Schrift.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. #ifndef Schrift_H
  2. #define Schrift_H
  3. #include "Critical.h"
  4. #include "Punkt.h"
  5. #include <functional>
  6. namespace Framework
  7. {
  8. class Bild; // Bild.h
  9. class Text; // Text.h
  10. struct VScrollData; // Scroll.h
  11. struct HScrollData; // Scroll.h
  12. class Buchstabe; // aus dieser Datei
  13. class Alphabet; // aus dieser Datei
  14. class Schrift; // aus dieser Datei
  15. // Speichert die Alphawerte eines Zeichens einer bestimmten Schrift
  16. // Die anderen Farbwerte werden durch die Schriftfarbe bestimmt. Daher nur die Alpha werte.
  17. class Buchstabe
  18. {
  19. private:
  20. Punkt size;
  21. unsigned char *alpha;
  22. int schriftSize;
  23. int ref;
  24. public:
  25. // Erstellt ein neues leeres Zeichnung
  26. __declspec( dllexport ) Buchstabe();
  27. // Löscht das Zeichnung
  28. __declspec( dllexport ) ~Buchstabe();
  29. // Erstellt einen neuen Buchstaben mit bestimmter Größe
  30. // size: Die Größe des Buchstabens in Pixel
  31. __declspec( dllexport ) void NeuBuchstabe( Punkt &size );
  32. // Setzt den Alphawert eines bestimmten Pixels
  33. // pos: Die position des Pixels
  34. // alpha: Der Wert des Pixels
  35. __declspec( dllexport ) void setPixel( Punkt &pos, unsigned char alpha );
  36. // Setzt den Alphawert eines bestimmten Pixels
  37. // x: die x Position des Pixels
  38. // y: die y Position des Pixels
  39. // alpha: Der Wert des Pixels
  40. __declspec( dllexport ) void setPixel( int x, int y, unsigned char alpha );
  41. // Setzt den Alphawert eines bestimmten Pixels
  42. // i: der Index des Pixels. Er berechnet sich durch x + y * breite und geht von 0 bis breite * höhe - 1
  43. // alpha: Der Wert des Pixels
  44. __declspec( dllexport ) void setPixel( int i, unsigned char alpha );
  45. // Setzt die Schriftgröße, zu der der Buchstabe gehört
  46. // sg: Die Schriftgröße des Buchstabens.
  47. __declspec( dllexport ) void setSchriftSize( int sg );
  48. // Gibt die Schriftgröße zurück, zu der der Buchstabe gehört
  49. __declspec( dllexport ) int getSchriftSize() const;
  50. // Gibt die alpha Werte des Buchstabens als array zurück wobei die werte Zeilenweise hintereinander stehen
  51. __declspec( dllexport ) unsigned char *getBuff() const;
  52. // Gibt die Größe des Buchstabens in Pixeln nicht skalliert zurück.
  53. __declspec( dllexport ) const Punkt &getSize() const;
  54. // Gibt die Breite des Buchstabens in Pixeln zurück
  55. __declspec( dllexport ) int getBreite() const;
  56. // Gibt die Höhe des Buchstabens in Pixeln zurück
  57. __declspec( dllexport ) int getHeight() const;
  58. // Erhöht den Reference Counting Zähler.
  59. // return: this.
  60. __declspec( dllexport ) Buchstabe *getThis();
  61. // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
  62. // return: 0.
  63. __declspec( dllexport ) Buchstabe *release();
  64. };
  65. // Speichert alle Buchstaben der selben Schriftgröße.
  66. // Wird von der Schrift klasse verwendet
  67. class Alphabet
  68. {
  69. private:
  70. Buchstabe **zeichen;
  71. int schriftSize;
  72. int ref;
  73. public:
  74. // Erzeugt ein leeres Zeichnung
  75. __declspec( dllexport ) Alphabet();
  76. // Löscht ein Zeichnung
  77. __declspec( dllexport ) ~Alphabet();
  78. // Löscht alle gespeicherten Zeichen
  79. __declspec( dllexport ) void NeuAlphabet();
  80. // Fügt dem Alphabet einen Buchstaben hinzu
  81. // Wenn der hinzugefügte Buchstabe bereits existiert wird er überschrieben
  82. // i: Der ASCII code des Buchstaben, der hinzugefügt werden soll
  83. // buchstabe: Der Buchstabe, der hinzugefügt wird
  84. __declspec( dllexport ) void setBuchstabe( unsigned char i, Buchstabe *buchstabe );
  85. // Setzt die Schriftgröße des Alphabets und die der gespeicherten buchstaben
  86. // gr: Die Schriftgröße des Alphabets
  87. __declspec( dllexport ) void setSchriftSize( int gr );
  88. // Gibt den gespeicherten Buchstaben zu einem bestimmten ASCII Zeichen zurück
  89. // i: Der ASCII code des Zeichens
  90. // return: Ein Zeiger zu dem Buchstaben mit erhöhtem Reference Counter
  91. __declspec( dllexport ) Buchstabe *getBuchstabe( unsigned char i ) const;
  92. // Gibt den gespeicherten Buchstaben zu einem bestimmten ASCII Zeichen zurück
  93. // i: Der ASCII code des Zeichens
  94. // return: Ein Zeiger zu dem Buchstaben ohne erhöhtem Reference Counter
  95. __declspec( dllexport ) Buchstabe *zBuchstabe( unsigned char i ) const;
  96. // Prüft, ob zu einem bestimmten ASCII code ein Zeichen vorhanden ist
  97. // b: Der zu prüfende ASCII code
  98. // return: (true), wenn ein Zeichen zu dem Code gefunden wurde. (false) sonnst
  99. __declspec( dllexport ) bool hatBuchstabe( unsigned char b ) const;
  100. // Gibt die Schriftgröße zurück, deren Zeichen in diesem Alphabet gespeichert werden
  101. __declspec( dllexport ) int getSchriftSize() const;
  102. // Erhöht den Reference Counting Zähler.
  103. // return: this.
  104. __declspec( dllexport ) Alphabet *getThis();
  105. // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
  106. // return: 0.
  107. __declspec( dllexport ) Alphabet *release();
  108. };
  109. // Specihert eine Liste von Alphabeten mit verschiedener Schriftgröße.
  110. // Wird von der Schrift Klasse verwendet, um alle Zeichen der Schriftgröße nach sortiert zu speichern.
  111. class AlphabetArray
  112. {
  113. private:
  114. AlphabetArray *next;
  115. Alphabet *This;
  116. public:
  117. // Erzeugt eine neue Liste
  118. __declspec( dllexport ) AlphabetArray();
  119. // Löscht eine Liste
  120. __declspec( dllexport ) ~AlphabetArray();
  121. // Fügt der Liste ein Alphabet hinzu
  122. // Wenn bereits ein Alphabet mit der selben Schriftgröße existiert, wird das Alphabet nicht hinzugefügt
  123. // alphabet: Das Alphabet, welches hinzugefügt werden soll
  124. // return: (true), wenn das Alphabet hinzugefügt wurde. (false) sonnst.
  125. __declspec( dllexport ) bool addAlphabet( Alphabet *alphabet );
  126. // Löscht ein Alphabet bestimmter Schriftgröße aus der Liste
  127. // sg: Die Schriftgröße des Alphabets, welches entfernt werden soll
  128. // return: (true), wenn ein Alphabet entfernt wurde. (false) sonnst
  129. __declspec( dllexport ) bool removeAlphabet( int sg );
  130. // Setzt den Zeiger auf das nächste Element der Liste auf 0
  131. __declspec( dllexport ) void setNext0();
  132. // Gibt ein bestimmtes Alphabet mit erhöhtem Reference Counter zurück
  133. // sg: Die Schriftgröße, dessen Alphabet gesucht werden soll
  134. // return: (0), fals kein passendes Alphabet gefunden wurde
  135. __declspec( dllexport ) Alphabet *getAlphabet( unsigned char sg ) const;
  136. // Gibt ein bestimmtes Alphabet ohne erhöhtem Reference Counter zurück
  137. // sg: Die Schriftgröße, dessen Alphabet gesucht werden soll
  138. // return: (0), fals kein passendes Alphabet gefunden wurde
  139. __declspec( dllexport ) Alphabet *zAlphabet( unsigned char sg ) const;
  140. // Gibt ein bestimmtes Alphabet mit erhöhtem Reference Counter zurück
  141. // index: Der Index des gesuchten Alphabets in der Reihenfolge wie sie der Liste hinzugefügt wurden
  142. // count: Hier sollte 0 übergeben werden. Gibt an auf dem wievielten Element der Liste die Funktion aufgerufen wird.
  143. // return: (0), fals kein passendes Alphabet gefunden wurde
  144. __declspec( dllexport ) Alphabet *getAlphabetI( int index, int count ) const;
  145. // Gibt ein bestimmtes Alphabet ohne erhöhtem Reference Counter zurück
  146. // index: Der Index des gesuchten Alphabets in der Reihenfolge wie sie der Liste hinzugefügt wurden
  147. // count: Hier sollte 0 übergeben werden. Gibt an auf dem wievielten Element der Liste die Funktion aufgerufen wird.
  148. // return: (0), fals kein passendes Alphabet gefunden wurde
  149. __declspec( dllexport ) Alphabet *zAlphabetI( int index, int count ) const;
  150. // Gibt einen Zeiger auf das nächste Element der Liste zurück
  151. __declspec( dllexport ) AlphabetArray *getNext() const;
  152. };
  153. // Speichert alle Buchstaben einer Schrift in verschiedenen Schriftgrößen
  154. class Schrift
  155. {
  156. private:
  157. unsigned char alphabetAnzahl;
  158. AlphabetArray *alphabet;
  159. int ref;
  160. public:
  161. // Erzeugt eine leere Schrift
  162. __declspec( dllexport ) Schrift();
  163. // Löscht ein Zeichnung
  164. __declspec( dllexport ) ~Schrift();
  165. // Fügt der Schrift ein Alphabet hinzu. Sollte bereits ein Alphabet der selben Schriftgröße existieren, wird das Alphabet nicht hinzugefügt
  166. // alphabet: Das Alphabet, welches hinzugefügt werden soll
  167. // return: (true), wenn das Alphabet hinzugefügt wurde. (false) sonnst
  168. __declspec( dllexport ) bool addAlphabet( Alphabet *alphabet );
  169. // Löscht ein bestimmtes Alphabet aus der Schrift
  170. // sg: Die Schriftgröße, deren Alphabet entfernt werden soll
  171. __declspec( dllexport ) void removeAlphabet( int sg );
  172. // Gibt ein bestimmtes Alphabet mit erhöhtem Reference Counter zurück
  173. // sg: Die Schriftgröße, dessen Alphabet gesucht werden soll
  174. // return: (0), fals kein passendes Alphabet gefunden wurde
  175. __declspec( dllexport ) Alphabet *getAlphabet( int sg ) const;
  176. // Gibt ein bestimmtes Alphabet ohne erhöhtem Reference Counter zurück
  177. // sg: Die Schriftgröße, dessen Alphabet gesucht werden soll
  178. // return: (0), fals kein passendes Alphabet gefunden wurde
  179. __declspec( dllexport ) Alphabet *zAlphabet( int sg ) const;
  180. // Gibt ein bestimmtes Alphabet mit erhöhtem Reference Counter zurück
  181. // index: Der Index des gesuchten Alphabets in der Reihenfolge wie sie der Liste hinzugefügt wurden
  182. // return: (0), fals kein passendes Alphabet gefunden wurde
  183. __declspec( dllexport ) Alphabet *getAlphabetI( int index ) const;
  184. // Gibt ein bestimmtes Alphabet ohne erhöhtem Reference Counter zurück
  185. // index: Der Index des gesuchten Alphabets in der Reihenfolge wie sie der Liste hinzugefügt wurden
  186. // return: (0), fals kein passendes Alphabet gefunden wurde
  187. __declspec( dllexport ) Alphabet *zAlphabetI( int index ) const;
  188. // Gibt zurück, wie viele Alphabete (und damit Schriftgrößen) in der Schrift enthalten sind
  189. __declspec( dllexport ) unsigned char getAlphabetAnzahl() const;
  190. // Erhöht den Reference Counting Zähler.
  191. // return: this.
  192. __declspec( dllexport ) Schrift *getThis();
  193. // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
  194. // return: 0.
  195. __declspec( dllexport ) Schrift *release();
  196. };
  197. class TextRenderer
  198. {
  199. protected:
  200. Schrift *s;
  201. int schriftSize;
  202. int zeilenAbstand;
  203. int zeichenAbstand;
  204. int ref;
  205. public:
  206. __declspec( dllexport ) TextRenderer();
  207. __declspec( dllexport ) TextRenderer( Schrift *schrift );
  208. __declspec( dllexport ) virtual ~TextRenderer();
  209. __declspec( dllexport ) void setSchriftZ( Schrift *schrift );
  210. __declspec( dllexport ) Schrift *getSchrift();
  211. __declspec( dllexport ) Schrift *zSchrift();
  212. // Setzt die Schriftgröße, in der gezeichnet werden soll. Die Schrift wählt automatisch das passende Alphabet zum Zeichnen
  213. // sg: Die Schriftgröße
  214. __declspec( dllexport ) void setSchriftSize( int sg );
  215. // Setzt den Zeilenabstand, der zum zeichnen verwendet werden soll
  216. // za: Der Zeilenabstand zum unteren Ende der darüber liegenden zeile in Pixeln
  217. __declspec( dllexport ) void setZeilenAbstand( int za );
  218. // Setzt den Zeichenabstand, der zum zeichnen verwendet werden soll
  219. // za: Der Zeichenabstand zum unteren Ende der darüber liegenden zeile in Pixeln
  220. __declspec( dllexport ) void setZeichenAbstand( int za );
  221. // Fügt Zeilenumbrüche in den Text ein, so dass er bei einer vorgegebenen Breite follständig angezeigt wird
  222. // zText: Der text, in den die Zeilenumbrüche eingefügt werden sollen
  223. // maxBreite: Die Breite in Pixeln auf der der Text follständig angezeigt werden soll
  224. __declspec( dllexport ) virtual void textFormatieren( Text *zText, int maxBreite );
  225. // Zeichnet einen Bestimmten Text mit Cursor und einfärbung auf ein Bild
  226. // Nutze (setPosition) und (setDrawSchriftGröße) um die Position und die Größe zu verändern
  227. // x: x position des ersten zeichens
  228. // y: y position des ersten zeichens
  229. // txt: Der Text, der gezeichnet werden soll
  230. // zRObj: Das Bild, auf das gezeichnet werden soll
  231. // cpos: Die position des Cursors im Text
  232. // cf: Die Farbe des Cursors
  233. // fbeg: Die Position des Zeichens im Text, wo die Einfärbung beginnen soll. Der Text wird von dort bis zur Cursorposition eingefärbt
  234. // ff: Die Hintergrund Farbe des eingefärbten Textes
  235. // f: Eine Funktion die für jeden Buchstaben aufgerufen wird und seine Farbe zurückgibt
  236. __declspec( dllexport ) virtual void renderText( int x, int y, const char *txt, Bild &zRObj, std::function< int( int, int, int ) > f, int cpos = -1, int cf = 0, int fbeg = -1, int ff = 0 );
  237. // Zeichnet einen Bestimmten Text mit Cursor und einfärbung auf ein Bild
  238. // Nutze (setPosition) und (setDrawSchriftGröße) um die Position und die Größe zu verändern
  239. // x: x position des ersten zeichens
  240. // y: y position des ersten zeichens
  241. // txt: Der Text, der gezeichnet werden soll
  242. // zRObj: Das Bild, auf das gezeichnet werden soll
  243. // cpos: Die position des Cursors im Text
  244. // cf: Die Farbe des Cursors
  245. // fbeg: Die Position des Zeichens im Text, wo die Einfärbung beginnen soll. Der Text wird von dort bis zur Cursorposition eingefärbt
  246. // ff: Die Hintergrund Farbe des eingefärbten Textes
  247. // f: Die Farbe, in der der Text gezeichnet werden soll
  248. __declspec( dllexport ) virtual void renderText( int x, int y, const char *txt, Bild &zRObj, int f, int cpos = -1, int cf = 0, int fbeg = -1, int ff = 0 );
  249. // Zeichnet einen Bestimmten Buchstaben mit einfärbung auf ein Bild
  250. // Nutze (setPosition) und (setDrawSchriftGröße) um die Position und die Größe zu verändern
  251. // x: x position des ersten zeichens
  252. // y: y position des ersten zeichens
  253. // txt: Der Text, der gezeichnet werden soll
  254. // zRObj: Das Bild, auf das gezeichnet werden soll
  255. // selected: 1, falls das zeichen eingefärbt sein soll
  256. // ff: Die Hintergrund Farbe des eingefärbten Textes
  257. // f: Die Farbe, in der der Text gezeichnet werden soll
  258. __declspec( dllexport ) virtual void renderChar( int &x, int y, char c, Bild &zRObj, bool selected, int ff, int f );
  259. // Gibt die Schriftgröße zurück, die zum Zeichnen verwendet wird
  260. __declspec( dllexport ) int getSchriftSize() const;
  261. // Gibt den Abstand in Pixeln zum unteren Ende der darüber ligenden Zeile zurück
  262. __declspec( dllexport ) int getZeilenabstand() const;
  263. // Ermittelt, wie viele Pixel benötigt werden, um einen Bestimmten Text vollständig darzustellen
  264. // txt: Der Text, von dem die Breite in Pixeln ermitelt werden soll
  265. __declspec( dllexport ) virtual int getTextBreite( const char *txt ) const;
  266. // Ermittelt, wie viele Pixel benötigt werden, um einen Bestimmten Text vollständig darzustellen
  267. // txt: Der Text, von dem die Höhe in Pixeln ermitelt werden soll
  268. __declspec( dllexport ) virtual int getTextHeight( const char *txt ) const;
  269. // Ermittelt, wie viele Pixel benötigt werden, um einen Bestimmten Buchstaben vollständig darzustellen
  270. // c: Der Buchstabe, von dem die Breite in Pixeln ermitelt werden soll
  271. __declspec( dllexport ) virtual int getCharWidth( const char c ) const;
  272. // Ermittelt, wie viele Pixel benötigt werden, um einen Bestimmten Text vollständig darzustellen
  273. // c: Der Buchstabe, von dem die Höhe in Pixeln ermitelt werden soll
  274. __declspec( dllexport ) virtual int getCharHeight( const char c ) const;
  275. // Gibt den Abstand in Pixeln zum unteren Ende der darüber ligenden Zeile zurück
  276. __declspec( dllexport ) int getZeilenAbstand() const;
  277. // Gibt die skallierte Höhe zurück, die eine gezeichnete Zeile in Pixeln benötigt
  278. __declspec( dllexport ) int getZeilenHeight() const;
  279. // Ermittelt das Zeichen im Text, auf das die Maus zeigt
  280. // zTxt: Der Text, auf den die Maus Zeigt
  281. // mausX: Die X Position der Maus in Pixeln Relativ zur Position des ersten Zeichens
  282. // mausY: Die Y Position der Maus in Pixeln Relativ zur Position des ersten Zeichens
  283. __declspec( dllexport ) virtual int textPos( const char *txt, int mausX, int mausY ) const;
  284. // Erhöht den Reference Counting Zähler.
  285. // return: this.
  286. __declspec( dllexport ) TextRenderer *getThis();
  287. // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht.
  288. // return: 0.
  289. __declspec( dllexport ) virtual TextRenderer *release();
  290. };
  291. class GravurTextRenderer : public TextRenderer
  292. {
  293. public:
  294. __declspec( dllexport ) GravurTextRenderer();
  295. __declspec( dllexport ) GravurTextRenderer( Schrift *schrift );
  296. __declspec( dllexport ) virtual ~GravurTextRenderer();
  297. // Zeichnet einen Bestimmten Buchstaben mit einfärbung auf ein Bild
  298. // Nutze (setPosition) und (setDrawSchriftGröße) um die Position und die Größe zu verändern
  299. // x: x position des ersten zeichens
  300. // y: y position des ersten zeichens
  301. // txt: Der Text, der gezeichnet werden soll
  302. // zRObj: Das Bild, auf das gezeichnet werden soll
  303. // selected: 1, falls das zeichen eingefärbt sein soll
  304. // ff: Die Hintergrund Farbe des eingefärbten Textes
  305. // f: Die Farbe, in der der Text gezeichnet werden soll
  306. __declspec( dllexport ) virtual void renderChar( int &x, int y, char c, Bild &zRObj, bool selected, int ff, int f );
  307. // Ermittelt, wie viele Pixel benötigt werden, um einen Bestimmten Buchstaben vollständig darzustellen
  308. // c: Der Buchstabe, von dem die Breite in Pixeln ermitelt werden soll
  309. __declspec( dllexport ) virtual int getCharWidth( const char c ) const;
  310. // Ermittelt, wie viele Pixel benötigt werden, um einen Bestimmten Text vollständig darzustellen
  311. // c: Der Buchstabe, von dem die Höhe in Pixeln ermitelt werden soll
  312. __declspec( dllexport ) virtual int getCharHeight( const char c ) const;
  313. // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht.
  314. // return: 0.
  315. __declspec( dllexport ) virtual TextRenderer *release();
  316. };
  317. }
  318. #endif