#ifndef Schrift_H #define Schrift_H #include "Critical.h" #include "Punkt.h" #include namespace Framework { class Bild; //! Bild.h class Text; //! Text.h class Buchstabe; //! aus dieser Datei class Alphabet; //! aus dieser Datei class Schrift; //! aus dieser Datei //! Speichert die Alphawerte eines Zeichens einer bestimmten Schrift //! Die anderen Farbwerte werden durch die Schriftfarbe bestimmt. Daher nur die Alpha werte. class Buchstabe { private: Punkt size; unsigned char *alpha; int schriftSize; int ref; public: //! Erstellt ein neues leeres Zeichnung __declspec( dllexport ) Buchstabe(); //! Löscht das Zeichnung __declspec( dllexport ) ~Buchstabe(); //! Erstellt einen neuen Buchstaben mit bestimmter Größe //! \param size Die Größe des Buchstabens in Pixel __declspec( dllexport ) void NeuBuchstabe( Punkt &size ); //! Setzt den Alphawert eines bestimmten Pixels //! \param pos Die position des Pixels //! \param alpha Der Wert des Pixels __declspec( dllexport ) void setPixel( Punkt &pos, unsigned char alpha ); //! Setzt den Alphawert eines bestimmten Pixels //! \param x die x Position des Pixels //! \param y die y Position des Pixels //! \param alpha Der Wert des Pixels __declspec( dllexport ) void setPixel( int x, int y, unsigned char alpha ); //! Setzt den Alphawert eines bestimmten Pixels //! \param i der Index des Pixels. Er berechnet sich durch x + y * breite und geht von 0 bis breite * höhe - 1 //! \param alpha Der Wert des Pixels __declspec( dllexport ) void setPixel( int i, unsigned char alpha ); //! Setzt die Schriftgröße, zu der der Buchstabe gehört //! \param sg Die Schriftgröße des Buchstabens. __declspec( dllexport ) void setSchriftSize( int sg ); //! Gibt die Schriftgröße zurück, zu der der Buchstabe gehört __declspec( dllexport ) int getSchriftSize() const; //! Gibt die alpha Werte des Buchstabens als array zurück wobei die werte Zeilenweise hintereinander stehen __declspec( dllexport ) unsigned char *getBuff() const; //! Gibt die Größe des Buchstabens in Pixeln nicht skalliert zurück. __declspec( dllexport ) const Punkt &getSize() const; //! Gibt die Breite des Buchstabens in Pixeln zurück __declspec( dllexport ) int getBreite() const; //! Gibt die Höhe des Buchstabens in Pixeln zurück __declspec( dllexport ) int getHeight() const; //! Erhöht den Reference Counting Zähler. //! \return this. __declspec( dllexport ) Buchstabe *getThis(); //! Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht. //! \return 0. __declspec( dllexport ) Buchstabe *release(); }; //! Speichert alle Buchstaben der selben Schriftgröße. //! Wird von der Schrift klasse verwendet class Alphabet { private: Buchstabe **zeichen; int schriftSize; int ref; public: //! Erzeugt ein leeres Zeichnung __declspec( dllexport ) Alphabet(); //! Löscht ein Zeichnung __declspec( dllexport ) ~Alphabet(); //! Löscht alle gespeicherten Zeichen __declspec( dllexport ) void NeuAlphabet(); //! Fügt dem Alphabet einen Buchstaben hinzu //! Wenn der hinzugefügte Buchstabe bereits existiert wird er überschrieben //! \param i Der ASCII code des Buchstaben, der hinzugefügt werden soll //! \param buchstabe Der Buchstabe, der hinzugefügt wird __declspec( dllexport ) void setBuchstabe( unsigned char i, Buchstabe *buchstabe ); //! Setzt die Schriftgröße des Alphabets und die der gespeicherten buchstaben //! \param gr Die Schriftgröße des Alphabets __declspec( dllexport ) void setSchriftSize( int gr ); //! Gibt den gespeicherten Buchstaben zu einem bestimmten ASCII Zeichen zurück //! \param i Der ASCII code des Zeichens //! \return Ein Zeiger zu dem Buchstaben mit erhöhtem Reference Counter __declspec( dllexport ) Buchstabe *getBuchstabe( unsigned char i ) const; //! Gibt den gespeicherten Buchstaben zu einem bestimmten ASCII Zeichen zurück //! \param i Der ASCII code des Zeichens //! \return Ein Zeiger zu dem Buchstaben ohne erhöhtem Reference Counter __declspec( dllexport ) Buchstabe *zBuchstabe( unsigned char i ) const; //! Prüft, ob zu einem bestimmten ASCII code ein Zeichen vorhanden ist //! \param b Der zu prüfende ASCII code //! \return (true), wenn ein Zeichen zu dem Code gefunden wurde. (false) sonnst __declspec( dllexport ) bool hatBuchstabe( unsigned char b ) const; //! Gibt die Schriftgröße zurück, deren Zeichen in diesem Alphabet gespeichert werden __declspec( dllexport ) int getSchriftSize() const; //! Erhöht den Reference Counting Zähler. //! \return this. __declspec( dllexport ) Alphabet *getThis(); //! Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht. //! \return 0. __declspec( dllexport ) Alphabet *release(); }; //! Specihert eine Liste von Alphabeten mit verschiedener Schriftgröße. //! Wird von der Schrift Klasse verwendet, um alle Zeichen der Schriftgröße nach sortiert zu speichern. class AlphabetArray { private: AlphabetArray *next; Alphabet *This; public: //! Erzeugt eine neue Liste __declspec( dllexport ) AlphabetArray(); //! Löscht eine Liste __declspec( dllexport ) ~AlphabetArray(); //! Fügt der Liste ein Alphabet hinzu //! Wenn bereits ein Alphabet mit der selben Schriftgröße existiert, wird das Alphabet nicht hinzugefügt //! \param alphabet Das Alphabet, welches hinzugefügt werden soll //! \return (true), wenn das Alphabet hinzugefügt wurde. (false) sonnst. __declspec( dllexport ) bool addAlphabet( Alphabet *alphabet ); //! Löscht ein Alphabet bestimmter Schriftgröße aus der Liste //! \param sg Die Schriftgröße des Alphabets, welches entfernt werden soll //! \return (true), wenn ein Alphabet entfernt wurde. (false) sonnst __declspec( dllexport ) bool removeAlphabet( int sg ); //! Setzt den Zeiger auf das nächste Element der Liste auf 0 __declspec( dllexport ) void setNext0(); //! Gibt ein bestimmtes Alphabet mit erhöhtem Reference Counter zurück //! \param sg Die Schriftgröße, dessen Alphabet gesucht werden soll //! \return (0), fals kein passendes Alphabet gefunden wurde __declspec( dllexport ) Alphabet *getAlphabet( unsigned char sg ) const; //! Gibt ein bestimmtes Alphabet ohne erhöhtem Reference Counter zurück //! \param sg Die Schriftgröße, dessen Alphabet gesucht werden soll //! \return (0), fals kein passendes Alphabet gefunden wurde __declspec( dllexport ) Alphabet *zAlphabet( unsigned char sg ) const; //! Gibt ein bestimmtes Alphabet mit erhöhtem Reference Counter zurück //! \param index Der Index des gesuchten Alphabets in der Reihenfolge wie sie der Liste hinzugefügt wurden //! \param count Hier sollte 0 übergeben werden. Gibt an auf dem wievielten Element der Liste die Funktion aufgerufen wird. //! \return (0), fals kein passendes Alphabet gefunden wurde __declspec( dllexport ) Alphabet *getAlphabetI( int index, int count ) const; //! Gibt ein bestimmtes Alphabet ohne erhöhtem Reference Counter zurück //! \param index Der Index des gesuchten Alphabets in der Reihenfolge wie sie der Liste hinzugefügt wurden //! \param count Hier sollte 0 übergeben werden. Gibt an auf dem wievielten Element der Liste die Funktion aufgerufen wird. //! \return (0), fals kein passendes Alphabet gefunden wurde __declspec( dllexport ) Alphabet *zAlphabetI( int index, int count ) const; //! Gibt einen Zeiger auf das nächste Element der Liste zurück __declspec( dllexport ) AlphabetArray *getNext() const; }; //! Speichert alle Buchstaben einer Schrift in verschiedenen Schriftgrößen class Schrift { private: unsigned char alphabetAnzahl; AlphabetArray *alphabet; int ref; public: //! Erzeugt eine leere Schrift __declspec( dllexport ) Schrift(); //! Löscht ein Zeichnung __declspec( dllexport ) ~Schrift(); //! Fügt der Schrift ein Alphabet hinzu. Sollte bereits ein Alphabet der selben Schriftgröße existieren, wird das Alphabet nicht hinzugefügt //! \param alphabet Das Alphabet, welches hinzugefügt werden soll //! \return (true), wenn das Alphabet hinzugefügt wurde. (false) sonnst __declspec( dllexport ) bool addAlphabet( Alphabet *alphabet ); //! Löscht ein bestimmtes Alphabet aus der Schrift //! \param sg Die Schriftgröße, deren Alphabet entfernt werden soll __declspec( dllexport ) void removeAlphabet( int sg ); //! Gibt ein bestimmtes Alphabet mit erhöhtem Reference Counter zurück //! \param sg Die Schriftgröße, dessen Alphabet gesucht werden soll //! \return (0), fals kein passendes Alphabet gefunden wurde __declspec( dllexport ) Alphabet *getAlphabet( int sg ) const; //! Gibt ein bestimmtes Alphabet ohne erhöhtem Reference Counter zurück //! \param sg Die Schriftgröße, dessen Alphabet gesucht werden soll //! \return (0), fals kein passendes Alphabet gefunden wurde __declspec( dllexport ) Alphabet *zAlphabet( int sg ) const; //! Gibt ein bestimmtes Alphabet mit erhöhtem Reference Counter zurück //! \param index Der Index des gesuchten Alphabets in der Reihenfolge wie sie der Liste hinzugefügt wurden //! \return (0), fals kein passendes Alphabet gefunden wurde __declspec( dllexport ) Alphabet *getAlphabetI( int index ) const; //! Gibt ein bestimmtes Alphabet ohne erhöhtem Reference Counter zurück //! \param index Der Index des gesuchten Alphabets in der Reihenfolge wie sie der Liste hinzugefügt wurden //! \return (0), fals kein passendes Alphabet gefunden wurde __declspec( dllexport ) Alphabet *zAlphabetI( int index ) const; //! Gibt zurück, wie viele Alphabete (und damit Schriftgrößen) in der Schrift enthalten sind __declspec( dllexport ) unsigned char getAlphabetAnzahl() const; //! Erhöht den Reference Counting Zähler. //! \return this. __declspec( dllexport ) Schrift *getThis(); //! Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht. //! \return 0. __declspec( dllexport ) Schrift *release(); }; class TextRenderer { protected: Schrift *s; int schriftSize; int zeilenAbstand; int zeichenAbstand; int ref; public: __declspec( dllexport ) TextRenderer(); __declspec( dllexport ) TextRenderer( Schrift *schrift ); __declspec( dllexport ) virtual ~TextRenderer(); __declspec( dllexport ) void setSchriftZ( Schrift *schrift ); __declspec( dllexport ) Schrift *getSchrift(); __declspec( dllexport ) Schrift *zSchrift(); //! Setzt die Schriftgröße, in der gezeichnet werden soll. Die Schrift wählt automatisch das passende Alphabet zum Zeichnen //! \param sg Die Schriftgröße __declspec( dllexport ) void setSchriftSize( int sg ); //! Setzt den Zeilenabstand, der zum zeichnen verwendet werden soll //! \param za Der Zeilenabstand zum unteren Ende der darüber liegenden zeile in Pixeln __declspec( dllexport ) void setZeilenAbstand( int za ); //! Setzt den Zeichenabstand, der zum zeichnen verwendet werden soll //! \param za Der Zeichenabstand zum unteren Ende der darüber liegenden zeile in Pixeln __declspec( dllexport ) void setZeichenAbstand( int za ); //! Fügt Zeilenumbrüche in den Text ein, so dass er bei einer vorgegebenen Breite follständig angezeigt wird //! \param zText Der text, in den die Zeilenumbrüche eingefügt werden sollen //! \param maxBreite Die Breite in Pixeln auf der der Text follständig angezeigt werden soll __declspec( dllexport ) virtual void textFormatieren( Text *zText, int maxBreite ); //! Zeichnet einen Bestimmten Text mit Cursor und einfärbung auf ein Bild //! Nutze (setPosition) und (setDrawSchriftGröße) um die Position und die Größe zu verändern //! \param x x position des ersten zeichens //! \param y y position des ersten zeichens //! \param txt Der Text, der gezeichnet werden soll //! \param zRObj Das Bild, auf das gezeichnet werden soll //! \param cpos Die position des Cursors im Text //! \param cf Die Farbe des Cursors //! \param fbeg Die Position des Zeichens im Text, wo die Einfärbung beginnen soll. Der Text wird von dort bis zur Cursorposition eingefärbt //! \param ff Die Hintergrund Farbe des eingefärbten Textes //! \param f Eine Funktion die für jeden Buchstaben aufgerufen wird und seine Farbe zurückgibt __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 ); //! Zeichnet einen Bestimmten Text mit Cursor und einfärbung auf ein Bild //! Nutze (setPosition) und (setDrawSchriftGröße) um die Position und die Größe zu verändern //! \param x x position des ersten zeichens //! \param y y position des ersten zeichens //! \param txt Der Text, der gezeichnet werden soll //! \param zRObj Das Bild, auf das gezeichnet werden soll //! \param cpos Die position des Cursors im Text //! \param cf Die Farbe des Cursors //! \param fbeg Die Position des Zeichens im Text, wo die Einfärbung beginnen soll. Der Text wird von dort bis zur Cursorposition eingefärbt //! \param ff Die Hintergrund Farbe des eingefärbten Textes //! \param f Die Farbe, in der der Text gezeichnet werden soll __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 ); //! Zeichnet einen Bestimmten Buchstaben mit einfärbung auf ein Bild //! Nutze (setPosition) und (setDrawSchriftGröße) um die Position und die Größe zu verändern //! \param x x position des ersten zeichens //! \param y y position des ersten zeichens //! \param txt Der Text, der gezeichnet werden soll //! \param zRObj Das Bild, auf das gezeichnet werden soll //! \param color Die Farbe, in der der Text gezeichnet werden soll //! \param underlined 1, falls der Text unterstrichen sein soll //! \param selected 1, falls das zeichen eingefärbt sein soll //! \param selectedBackgroundColor Die Hintergrund Farbe des eingefärbten Textes __declspec( dllexport ) virtual void renderChar( int &x, int y, char c, Bild &zRObj, int color, bool underlined = 0, bool selected = 0, int selectedBackgroundColor = 0 ); //! Gibt die Schriftgröße zurück, die zum Zeichnen verwendet wird __declspec( dllexport ) int getSchriftSize() const; //! Gibt den Abstand in Pixeln zum unteren Ende der darüber ligenden Zeile zurück __declspec( dllexport ) int getZeilenabstand() const; //! Ermittelt, wie viele Pixel benötigt werden, um einen Bestimmten Text vollständig darzustellen //! \param txt Der Text, von dem die Breite in Pixeln ermitelt werden soll __declspec( dllexport ) virtual int getTextBreite( const char *txt ) const; //! Ermittelt, wie viele Pixel benötigt werden, um einen Bestimmten Text vollständig darzustellen //! \param txt Der Text, von dem die Höhe in Pixeln ermitelt werden soll __declspec( dllexport ) virtual int getTextHeight( const char *txt ) const; //! Ermittelt, wie viele Pixel benötigt werden, um einen Bestimmten Buchstaben vollständig darzustellen //! \param c Der Buchstabe, von dem die Breite in Pixeln ermitelt werden soll __declspec( dllexport ) virtual int getCharWidth( const char c ) const; //! Ermittelt, wie viele Pixel benötigt werden, um einen Bestimmten Text vollständig darzustellen //! \param c Der Buchstabe, von dem die Höhe in Pixeln ermitelt werden soll __declspec( dllexport ) virtual int getCharHeight( const char c ) const; //! Gibt den Abstand in Pixeln zum unteren Ende der darüber ligenden Zeile zurück __declspec( dllexport ) int getZeilenAbstand() const; //! Gibt den Abstand in Pixeln zum zwischen zwei zeichen auf der x Achse zurück __declspec( dllexport ) int getZeichenAbstand() const; //! Gibt die skallierte Höhe zurück, die eine gezeichnete Zeile in Pixeln benötigt __declspec( dllexport ) int getZeilenHeight() const; //! Ermittelt das Zeichen im Text, auf das die Maus zeigt //! \param zTxt Der Text, auf den die Maus Zeigt //! \param mausX Die X Position der Maus in Pixeln Relativ zur Position des ersten Zeichens //! \param mausY Die Y Position der Maus in Pixeln Relativ zur Position des ersten Zeichens __declspec( dllexport ) virtual int textPos( const char *txt, int mausX, int mausY ) const; //! Erhöht den Reference Counting Zähler. //! \return this. __declspec( dllexport ) TextRenderer *getThis(); //! Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht. //! \return 0. __declspec( dllexport ) virtual TextRenderer *release(); }; class GravurTextRenderer : public TextRenderer { public: __declspec( dllexport ) GravurTextRenderer(); __declspec( dllexport ) GravurTextRenderer( Schrift *schrift ); __declspec( dllexport ) virtual ~GravurTextRenderer(); //! Zeichnet einen Bestimmten Buchstaben mit einfärbung auf ein Bild //! Nutze (setPosition) und (setDrawSchriftGröße) um die Position und die Größe zu verändern //! \param x x position des ersten zeichens //! \param y y position des ersten zeichens //! \param txt Der Text, der gezeichnet werden soll //! \param zRObj Das Bild, auf das gezeichnet werden soll //! \param color Die Farbe, in der der Text gezeichnet werden soll //! \param underlined 1, falls der Text unterstrichen sein soll //! \param selected 1, falls das zeichen eingefärbt sein soll //! \param selectedBackgroundColor Die Hintergrund Farbe des eingefärbten Textes __declspec( dllexport ) virtual void renderChar( int &x, int y, char c, Bild &zRObj, int color, bool underlined = 0, bool selected = 0, int selectedBackgroundColor = 0 ); //! Ermittelt, wie viele Pixel benötigt werden, um einen Bestimmten Buchstaben vollständig darzustellen //! \param c Der Buchstabe, von dem die Breite in Pixeln ermitelt werden soll __declspec( dllexport ) virtual int getCharWidth( const char c ) const; //! Ermittelt, wie viele Pixel benötigt werden, um einen Bestimmten Text vollständig darzustellen //! \param c Der Buchstabe, von dem die Höhe in Pixeln ermitelt werden soll __declspec( dllexport ) virtual int getCharHeight( const char c ) const; }; class KursivTextRenderer : public TextRenderer { public: __declspec( dllexport ) KursivTextRenderer(); __declspec( dllexport ) KursivTextRenderer( Schrift *schrift ); __declspec( dllexport ) virtual ~KursivTextRenderer(); //! Zeichnet einen Bestimmten Buchstaben mit einfärbung auf ein Bild //! Nutze (setPosition) und (setDrawSchriftGröße) um die Position und die Größe zu verändern //! \param x x position des ersten zeichens //! \param y y position des ersten zeichens //! \param txt Der Text, der gezeichnet werden soll //! \param zRObj Das Bild, auf das gezeichnet werden soll //! \param color Die Farbe, in der der Text gezeichnet werden soll //! \param underlined 1, falls der Text unterstrichen sein soll //! \param selected 1, falls das zeichen eingefärbt sein soll //! \param selectedBackgroundColor Die Hintergrund Farbe des eingefärbten Textes __declspec( dllexport ) virtual void renderChar( int &x, int y, char c, Bild &zRObj, int color, bool underlined = 0, bool selected = 0, int selectedBackgroundColor = 0 ); //! Ermittelt, wie viele Pixel benötigt werden, um einen Bestimmten Buchstaben vollständig darzustellen //! \param c Der Buchstabe, von dem die Breite in Pixeln ermitelt werden soll __declspec( dllexport ) virtual int getCharWidth( const char c ) const; //! Ermittelt, wie viele Pixel benötigt werden, um einen Bestimmten Text vollständig darzustellen //! \param c Der Buchstabe, von dem die Höhe in Pixeln ermitelt werden soll __declspec( dllexport ) virtual int getCharHeight( const char c ) const; }; } #endif