Aktuelle Zeit: 23.02.2019 15:04

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 26 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3
Autor Nachricht
 Betreff des Beitrags: Re: Typeface - Sprite-based Schrift-Include/Module
BeitragVerfasst: 30.09.2018 20:06 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
ccode_new hat geschrieben:
Es wäre aber auch toll wenn man das "Character set"-Fenster schließen könnte.
Man kann zwar über die mittlere Maustaste (Scrollrad) im "Character set"-Fenster navigieren, aber normale Scrollbalken wären auch schön.


Ich dachte eigentlich, dass man den Zeichensatz "immer" sehen will. Aber klar, kann ich einbauen.
Normale Scrollbalken kann ich auch einbauen.

PS: Ich gebe zu der Editor ist etwas "sperrig", von daher ist Feedback auch da sehr willkommen.

ccode_new hat geschrieben:
So! Dank dir bastele ich mir jetzt aus Bildern mit Zeichen meine eigenen xml-Fonts.

Cool, gerne mal teilen.

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Typeface - Sprite-based Schrift-Include/Module
BeitragVerfasst: 01.10.2018 09:18 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
STARGÅTE hat geschrieben:
@mk-soft:

Ich weiß :cry: , liegt aber nicht "an mir":
[PB 5.22x86] TransformSprite() is acting strange
TransformSprite - OpenGL.
...
Vorallem die z-Parameter werden in OpenGL völlig ignoriert, damit sieht die Texture immer komisch aus.

Habe ich mir schon gedacht das es nicht an den Code liegt, sondern ein Bug ist.
Vielleicht wird der Bug irgendwann behoben

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Typeface - Sprite-based Schrift-Include/Module
BeitragVerfasst: 11.12.2018 19:31 
Offline

Registriert: 10.10.2008 01:28
Hallo STARGÅTE,
danke für die neue Version, sieht super aus!
Schön, das ich dich animieren konnte das alte Projekt nochmal anzufassen. :)

Ich habe noch zwei Wünsche:
1.) Fonts die auch grösser als 128 Pixel sein können (1024 genügt mir)
2.) Die Möglichkeit die Fonts auch aus der DataSection zu laden nennen wir es "CatchTypeface".
Ich weiss, Nachladen geht prima, aber manchmal möchte man es eben in einer Datei haben.
Ich hänge hier ein Beispiel von mir an, das ich im Wesentlichen aus LoadTypeface(Typeface.i, FileName.s) umgewandelt habe.
Bei mir funktioniert es prima mit einem 128pixel-Font.
Vielleicht kannst du das ja einfach integrieren, der Filename wäre auch zum Auswählen in der DataSection denkbar.

Grüsse vom Pforzheimer

Code:
; Lädt die angegebene 'Typeface' aus der angegebenen DataSection, FileName ist optional
; Loads the 'Typeface' from the XML file in the DataSection, FileName is optional
Procedure.i CatchTypeface(Typeface.i, FileName.s="")
 Protected fontpointer = ?Font_1_xml
 Protected fontpointer_len = ?Font_1_xml_end -?Font_1_xml
 Protected *Typeface.Typeface
 Protected XML.i = CatchXML(#PB_Any, fontpointer , fontpointer_len ,#PB_XML_StreamStart , #PB_UTF8)
 Protected *MainNode, *Node, Index.i, *SourceNode, *OutlayNode
 Protected *CurrentKerningPair.Typeface_KerningPair, Hash.i, Left.u, Right.u
 If Not XML
  ProcedureReturn #False
 EndIf
 *MainNode = MainXMLNode(XML)
 *Typeface = Typeface_Create(Typeface)
 ;*Typeface\CharacterSet\Sprite = LoadSprite(#PB_Any, GetXMLAttribute(*MainNode, "Image"), #PB_Sprite_AlphaBlending)
 *Typeface\CharacterSet\Sprite = CatchSprite(#PB_Any, ?Font_1_Sprite, #PB_Sprite_AlphaBlending)
 *Node = ChildXMLNode(*MainNode)
 While *Node
  If XMLNodeType(*Node) <> #PB_XML_Normal
   *Node = NextXMLNode(*Node)
   Continue
  EndIf
  Select GetXMLNodeName(*Node)
   Case "KerningPair"
    Left = Val(GetXMLAttribute(*Node, "Left"))
    Right = Val(GetXMLAttribute(*Node, "Right"))
    If (Left <= 255 And Right <= 255) Or #PB_Compiler_Unicode
     AddElement(*Typeface\CharacterSet\Elements\KerningPair())
     With *Typeface\CharacterSet\Elements\KerningPair()
      \CharacterPair = Left | Right<<16
      \Amount    = Val(GetXMLAttribute(*Node, "Amount"))
      Hash      = \CharacterPair % #Typeface_KerningSlots
      *CurrentKerningPair = *Typeface\CharacterSet\KerningPair(Hash)
      If *CurrentKerningPair
       While *CurrentKerningPair\NextPair
        *CurrentKerningPair = *CurrentKerningPair\NextPair
       Wend
       *CurrentKerningPair\NextPair = @*Typeface\CharacterSet\Elements\KerningPair()
      Else
       *Typeface\CharacterSet\KerningPair(Hash) = @*Typeface\CharacterSet\Elements\KerningPair()
      EndIf
     EndWith
    EndIf
   Case "Character"
    Index = Val(GetXMLAttribute(*Node, "Index"))
    If Index <= 255 Or #PB_Compiler_Unicode
     *SourceNode = XMLNodeFromPath(*Node, "Source")
     *OutlayNode = XMLNodeFromPath(*Node, "Outlay")
     *Typeface\CharacterSet\Character(Index) = AddElement(*Typeface\CharacterSet\Elements\Character())
     With *Typeface\CharacterSet\Elements\Character()
      \Source\X   = Val(GetXMLAttribute(*SourceNode, "X"))
      \Source\Y   = Val(GetXMLAttribute(*SourceNode, "Y"))
      \Source\Width = Val(GetXMLAttribute(*SourceNode, "Width"))
      \Source\Height = Val(GetXMLAttribute(*SourceNode, "Height"))
      \Outlay\x   = Val(GetXMLAttribute(*OutlayNode, "X"))
      \Outlay\y   = Val(GetXMLAttribute(*OutlayNode, "Y"))
      \Outlay\Width = Val(GetXMLAttribute(*OutlayNode, "Width"))
      \Outlay\Height = Val(GetXMLAttribute(*OutlayNode, "Height"))
     EndWith
    EndIf
  EndSelect
  *Node = NextXMLNode(*Node)
 Wend
 FreeXML(XML)
 ProcedureReturn *Typeface
EndProcedure

DataSection
 Font_1_xml:
 IncludeBinary "Fonts\Something.128.xml"
 Font_1_xml_end:
 Font_1_Sprite:
 IncludeBinary "Fonts\Something.128.xml.png"   
EndDataSection

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Typeface - Sprite-based Schrift-Include/Module
BeitragVerfasst: 11.12.2018 23:53 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
pforzheimer hat geschrieben:
Ich habe noch zwei Wünsche:
1.) Fonts die auch grösser als 128 Pixel sein können (1024 genügt mir)

Wie ist das gemeint? (rein theoretisch) ist die Große der Fonts nicht limitiert (nur durch die Image/Sprite Größe von PureBasic) und durch den aktuell genutzte Variablentyp in der TF-Datei (diese liegt aber bei 65535).
Zitat:
2.) Die Möglichkeit die Fonts auch aus der DataSection zu laden nennen wir es "CatchTypeface".

Diese Funktion gibt es bereits, allerdings nur für das binary Format (*.tf), was du aber mit dem Editor erzeugen kannst.
Code:
Declare.i CatchTypeface(Typeface.i, *Memory)

Du kannst hier einfach den Zeicher auf die DataSection übergeben:
Code:
CatchTypeface(#Typeface, ?Font_1)
DataSection
  Font_1:
  IncludeBinary "Fonts\Something.128.tf"
EndDataSection

Damit man von dem Editor unabhängig ist, kann ich aber noch die möglichkeit einbinden, XML und Bild als Zeiger zu übergeben

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Typeface - Sprite-based Schrift-Include/Module
BeitragVerfasst: 12.12.2018 00:59 
Offline

Registriert: 10.10.2008 01:28
Hallo STARGÅTE,
ich meinte bei Wunsch 1.) das dein Editor Fonts grösser als 128 Pixel aus TTF erzeugen kann, bei mir ist da Ende bei der Auswahl.
Eine andere Beschränkung hast du bei "max width", also der Graphikbreite eingebaut, da ist bei 1024 Schluss, von mir aus könnte das gern zumindestens 1920, also Full-HD-Breite sein, oder auch 3840. Okay, die "Zeichensatz"-Anzeige braucht dann einen Zoom oder Scrollbalken.

Gerüchteweise haben ja manche Graphikkarten ein Problem, wenn Graphiken o.Ä. breiter als der Screen sind. Ich selbst habe schon Graphiken mit 8192pixel Breite ohne Probleme eingesetzt. Nicht wundern, ich versuche meine graphischen Sachen jetzt schon immer auf 4k, also 3840x2160pixel zu programmieren und dann runter zu skalieren.

Und bei 2.) hatte ich mir selbst ein CatchTypeface geschrieben, da es in der Typeface-Version die ich benutzte nicht enthalten war. Ich habe jetzt nochmal in deine neue Version geschaut und siehe da, wir haben sogar genau den gleichen Procedurenamen gewählt :) Naja, das ergab sich ja logisch aus anderen Namen innerhalb PB.

STARGÅTE hat geschrieben:
Du kannst hier einfach den Zeiger auf die DataSection übergeben:
Code:
CatchTypeface(#Typeface, ?Font_1)
DataSection
  Font_1:
  IncludeBinary "Fonts\Something.128.tf"
EndDataSection

Damit man von dem Editor unabhängig ist, kann ich aber noch die möglichkeit einbinden, XML und Bild als Zeiger zu übergeben


Das wäre eine gute Idee, wobei ich kein Problem mit deinem .tf-Format habe.
Ich habe aber auch vor bestimmte Graphiken für Sprites als .png einzubinden, darum wäre das schon gut.

Mir fällt gerade noch was ein:
3.) Wie wäre ein dynamischer Import von *.ttf in beliebiger Grösse nach Typeface?
Also ich brauche "FONT abc" in xxx Pixel, dann hole ich mir das vom System und kann es mit Typeface nutzen. So wie bei Loadfont.
Dieser Vorgang könnte ruhig ein wenig dauern, sowas macht man ja normalweise nicht laufend innerhalb einer Loop.

BTW: Schonmal DrawVectorText() / DrawVectorParagraph() versucht? Der kann bei mir scheinbar nur ASCII, wenn ein Umlaut wie ü vorkommt, sehe ich nur eine breite Leerstelle.

Grüsse

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Typeface - Sprite-based Schrift-Include/Module
BeitragVerfasst: 16.12.2018 21:19 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Hallo pforzheimer,

hier mal eine neue Version des Editors (mit größerem Font-Size import und Bildgröße).
Die Verwendung ist jedoch auf eigene Gefahr, denn bei einer 1024 großen Font, kann das Bild schon mal einige GB groß werden.
https://www.unionbytes.de/downloads/TypefaceEditor.exe

Das CatchTypeface habe ich auch aktualisiert:
https://www.unionbytes.de/downloads/TypefaceBeta.pbi
Code:
; Loads a typeface from the memory address. (only TF format is supported)
;   Typeface         : A number as an identifier of the typeface or #PB_Any to assign the address itself as the identifier
;   *Memory          : The address of the memory buffer of the TF oder XML source
;   *ImageMemory     : The address of the memory buffer of the image
;   MemoryLength     : The length of the XML memory buffer. By default MemoryLength = *ImageMemory - *Memory
;   ProcedureReturn  : #False, if the loading fails, otherwise the address of the loaded typeface
Procedure.i CatchTypeface(Typeface.i, *Memory, *ImageMemory=#Null, MemoryLength.i=#Typeface_Ignore)


Zu 3. gibt es ein kleines Problem bezüglich der Kompatibilität auf Linux und Mac.
Aktuell benutze ich Windows API um zu bestimmen, welche Zeichen in einer Font enthalten sind.
Ich muss mal gucken, wie ich das einbaue.

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 26 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye