#ifndef Zeichnung_H #define Zeichnung_H #include "Punkt.h" #include "MausEreignis.h" #include "TastaturEreignis.h" #include "Critical.h" #include #include namespace Framework { struct MausEreignis; // MausEreignis.h struct TastaturEreignis; // TastaturEreignis.h class Bild; // Bild.h class Zeichnung; // Aus dieser Datei class ToolTip; // ToopTip.h class Bildschirm; // Bildschirm.h class Rahmen; // Rahmen.h class AlphaFeld; // AlphaFeld.h class VScrollBar; // Scroll.h class HScrollBar; // Scroll.h class Schrift; // Eine Zeichnung für das 2D GUI Framework class Zeichnung { public: class Style { public: //! Wenn dieser Style gesetzt ist, wird die Zeichnung beim Zeichnen angezeigt const static __int64 Sichtbar = 0x00001; //! Wenn dieser Style gesetzt ist, kann der Benutzer mit der Zeichnung interagieren const static __int64 Erlaubt = 0x00002; //! Wenn dieser Style gesetzt ist, werden die Tastatur Ereignisse von der Zeichnung verarbeitet const static __int64 Fokus = 0x00004; //! Wenn dieser Style gesetzt ist, werden Maus Ereignisse auch verarbeitet, wenn das Objekt nicht sichtbar ist const static __int64 MEIgnoreSichtbar = 0x0800000000000000; //! Wenn dieser Style gesetzt ist, lockt der Thread das Objekt während das Maus ereignis verarbeitet wird const static __int64 MELockZeichnung = 0x1000000000000000; //! Wenn dieser Style gesetzt ist, werden maus ereignisse auch verarbeitet, wenn sie außerhalb der Zeichnung sind const static __int64 MEIgnoreInside = 0x2000000000000000; //! Wenn dieser Style gesetzt ist, werden maus ereignisse auch verarbeitet, wenn verarbeitet des Mausereignisses 1 ist const static __int64 MEIgnoreVerarbeitet = 0x4000000000000000; //! Wenn dieser Style gesetzt ist, werden maus ereignisse auch verarbeitet, wenn insideParent des Mausereignisses 0 ist const static __int64 MEIgnoreParentInside = 0x8000000000000000; }; protected: Punkt pos; Punkt gr; void *makParam; void *takParam; MausAktion mak; TastaturAktion tak; void *nmakParam; void *ntakParam; MausAktion nMak; TastaturAktion nTak; bool mausIn; Critical cs; ToolTip *toolTip; __int64 style; bool rend; std::queue< std::function< void() > > actions; std::function< void( Zeichnung * ) > onNeedToolTip; int ref; // Verarbeitet ein Maus Ereignis. Wird vom Framework automatisch aufgerufen. // me: Das Ereignis __declspec( dllexport ) virtual void doMausEreignis( MausEreignis &me, bool userRet ); public: // Konstruktor __declspec( dllexport ) Zeichnung(); // Destruktor __declspec( dllexport ) virtual ~Zeichnung(); // Übergibt einen Void Funktionspointer auf eine Aktion die einmalig vom Hauptthread ausgeführt werden soll. (Passiert nach dem Tick) __declspec( dllexport ) void postAction( std::function< void() > action ); // Legt fest, ob sich die Zeichnung seit des letzten Bildes verändert hat und neu gezeichnet werden muss __declspec( dllexport ) void setRender(); // Setzt den Text, der erscheint, wenn der Benutzer für längere Zeit mit der Maus in der Zeichnung verweilt // txt: Der Text, der angezeigt werden soll // zScreen: Ein Zeiger auf das Verwendete Bildschirm Objekt ohne erhöhten Reference Counter // zSchrift: Ein Zeiger auf die Schrift, die verwendet werden soll ohne erhöhten Reference Counter __declspec( dllexport ) void setToolTipText( const char *txt, Bildschirm *zScreen, Schrift *zSchrift ); // setzt eine Funktion, die aufgerufen wird, falls ein Tooltip benötigt wird und noch keiner gesetzt wurde // initToolTip: die Funktion __declspec( dllexport ) void setNeedToolTipEvent( std::function< void( Zeichnung * ) > onNeedTooltip ); // legt den tooltip fest // tt: der tooltip __declspec( dllexport ) void setToolTipZ( ToolTip *tt ); // Dies ist notwendig, falls mehrere Threads gleichzeitig die Zeichnung benutzen. // Wenn lockZeichnung() von zwei threads aufgerufen wird, wartet der letzte so lange, bis der erste unlockZeichnung() aufgerufen hat. __declspec( dllexport ) void lockZeichnung(); // Dies ist notwendig, falls mehrere Threads gleichzeitig die Zeichnung benutzen. // Wenn lockZeichnung() von zwei threads aufgerufen wird, wartet der letzte so lange, bis der erste unlockZeichnung() aufgerufen hat. __declspec( dllexport ) void unlockZeichnung(); // setzt den Parameter, der bei einem Maus Ereignis an die Rückruffunktion übergeben wird // p: Der Parameter __declspec( dllexport ) void setMausEreignisParameter( void *p ); // Setzt den Parameter, der bei einem Tastatur Ereignis an die Rückruffunktion übergeben wird // p: Der Parameter __declspec( dllexport ) void setTastaturEreignisParameter( void *p ); // Setzt die Rückruffunktion, die bei einem Maus Ereignis aufgerufen werden soll. // Wenn die Rückruffunktion 0 zurückgiebt, oder nicht gesetzt wurde, wird ein Maus Ereignis von der Zeichnung nicht weiter beachtet // Es kann die Standartfunktion __ret1ME verwendet werden, die in MausEreignis.h definiert ist und immer 1 zurückgibt // ak: Ein Zeiger auf die Rückruffunktion __declspec( dllexport ) void setMausEreignis( MausAktion ak ); // Setzt die Rückruffunktion, die bei einem Tastatur Ereignis aufgerufen werdne soll. // Wenn die Rückruffunktion 0 zurückgiebt, oder nicht gesetzt wurde, wird ein Tastatur Ereignis von der Zeichnung nicht weiter beachtet // Es kann die Standartfunktion __ret1TE verwendet werden, die in TastaturEreignis.h definiert ist und immer 1 zurückgibt // Weitere Standartfunktionen sind _nurNummernTE und _nurHexTE ebenfals aus TastaturEreignis.h // ak: Ein Zeiger auf die Rückruffunktion __declspec( dllexport ) void setTastaturEreignis( TastaturAktion ak ); // setzt den Parameter, der bei einem Maus Ereignis an die Rückruffunktion übergeben wird, die aufgerufen wird, fals das Ereignis von der Zeichnung verarbeitet wurde // p: Der Parameter __declspec( dllexport ) void setNMausEreignisParameter( void *p ); // Setzt den Parameter, der bei einem Tastatur Ereignis an die Rückruffunktion übergeben wird, die aufgerufen wird, fals das Ereignis von der Zeichnung verarbeitet wurde // p: Der Parameter __declspec( dllexport ) void setNTastaturEreignisParameter( void *p ); // Setzt die Rückruffunktion, die bei einem Maus Ereignis aufgerufen werden soll, nachdem das Ereignis bereits von der Zeichnung verarbeitet wurde // Wenn die Rückruffunktion 1 zurückgiebt, oder nicht gesetzt wurde, wird das Maus Ereignis von keiner weiteren Zeichnung verarbeitet, die zum Beispiel hinter dieser Zeichnung liegen // Es kann die Standartfunktion __ret1ME verwendet werden, die in MausEreignis.h definiert ist und immer 1 zurückgibt // ak: Ein Zeiger auf die Rückruffunktion __declspec( dllexport ) void setNMausEreignis( MausAktion ak ); // Setzt die Rückruffunktion, die bei einem Tastatur Ereignis aufgerufen werdne soll, nachdem das Ereignis bereits von der Zeichnung verarbeitet wurde // Wenn die Rückruffunktion 1 zurückgiebt, oder nicht gesetzt wurde, wird das Tastatur Ereignis von keiner weiteren Zeichnung verarbeitet // Es kann die Standartfunktion __ret1TE verwendet werden, die in TastaturEreignis.h definiert ist und immer 1 zurückgibt // Weitere Standartfunktionen sind _nurNummernTE und _nurHexTE ebenfals aus TastaturEreignis.h // ak: Ein Zeiger auf die Rückruffunktion __declspec( dllexport ) void setNTastaturEreignis( TastaturAktion ak ); // Verarbeitet ein Maus Ereignis. Wird vom Framework automatisch aufgerufen. // me: Das Ereignis __declspec( dllexport ) virtual void doPublicMausEreignis( MausEreignis &me ); // Verarbeitet ein Tastatur Ereignis. Wird vom Framework automatisch aufgerufen // te: Das Ereignis __declspec( dllexport ) virtual void doTastaturEreignis( TastaturEreignis &te ); // Verarbeitet die Zeit, die seit dem letzten aufruf dieser Funktion vergangen ist // tickVal: Die vergangene Zeit in Sekunden __declspec( dllexport ) virtual bool tick( double tickval ); // Setzt die Position der Zeichnung // pos: Die Position in Pixeln __declspec( dllexport ) void setPosition( const Punkt &pos ); // Setzt die X Position der Zeichnung // xPos: Die Position in Pixeln __declspec( dllexport ) void setX( int xPos ); // Setzt die Y Position der Zeichnung // yPos: Die Position in Pixeln __declspec( dllexport ) void setY( int yPos ); // Setzt die Größe der Zeichnung // gr: Ein Punkt mit x als Breite und y als Höhe in Pixeln __declspec( dllexport ) void setSize( const Punkt &gr ); // Setzt die Position der Zeichnung // x: Die X Position in Pixeln // y: Die Y Position in Pixeln __declspec( dllexport ) void setPosition( int x, int y ); // Setzt die Größe der Zeichnung // br: Die Breite in Pixeln // height: Die Höhe in Pixeln __declspec( dllexport ) void setSize( int br, int height ); // Setzt den Style der Zeichnung // style: Der neue Style bestehend aus den Flags aus der zugehörigen Style Klasse __declspec( dllexport ) void setStyle( __int64 style ); // Setzt den Style der Zeichnung // style: Alle Style Flags, die verändert werden sollen // add_remove: 1, falls der Style hinzugefügt werden soll. 0, falls der Style entfernt weden soll __declspec( dllexport ) void setStyle( __int64 style, bool add_remove ); // Fügt Style Flags hinzu // style: Der Style, der hinzugefügt werden soll __declspec( dllexport ) void addStyle( __int64 style ); // Entfernt Style Flags // style: Der Style, der entfernt werden soll __declspec( dllexport ) void removeStyle( __int64 style ); // Zeichnet die Zeihnung in ein bestimmtes Bild // zRObj: Das Bild, in das gezeichnet werden soll __declspec( dllexport ) virtual void render( Bild &zRObj ); // Gibt zurück, ob eine Rückruffunktion für Maus Ereignisse gesetzt wurde __declspec( dllexport ) bool hatMausEreignis() const; // Gibt zurück, ob eine Rückruffunktion für Tastatur Ereignisse gesetzt wurde __declspec( dllexport ) bool hatTastaturEreignis() const; // Gibt die Position der Zeichnung in Pixeln zurück __declspec( dllexport ) const Punkt &getPosition() const; // Gibt die Größe der Zeichnung in Pixeln zurück. x für Breite und y für Höhe __declspec( dllexport ) const Punkt &getSize() const; // Gibt die Breite der Zeichnung in Pixeln zurück __declspec( dllexport ) int getBreite() const; // Gibt die Höhe der Zeichnung in Pixeln zurück __declspec( dllexport ) int getHeight() const; // Gibt die Breite des Innenraumes in der Zeichnung in Pixeln zurück __declspec( dllexport ) virtual int getInnenBreite() const; // Gibt die Höhe des Innenraumes in der Zeichnung in Pixeln zurück __declspec( dllexport ) virtual int getInnenHeight() const; // Gibt die X Position der Zeichnung in Pixeln zurück __declspec( dllexport ) int getX() const; // Gibt die Y Position der Zeichnung in Pixeln zurück __declspec( dllexport ) int getY() const; // Prüft, ob ein Punkt in diesem Objekt liegt // p: der Punkt // return: 1, wenn der punkt innen ist, 0 sonst __declspec( dllexport ) virtual bool istPunktInnen( Punkt p ) const; // Prüft, ob ein Punkt in diesem Objekt liegt // x: die x koordinate des punktes // y: die y koordinate des punktes // return: 1, wenn der punkt innen ist, 0 sonst __declspec( dllexport ) virtual bool istPunktInnen( int x, int y ) const; // Gibt einen Zeiger auf das Tooltip Objekt zurück, walls es verwendet wird __declspec( dllexport ) ToolTip *getToolTip() const; // Gibt einen Zeiger auf das Tooltip Objekt ohne erhöhten Reference Counter zurück, walls es verwendet wird __declspec( dllexport ) ToolTip *zToolTip() const; // Gibt zurück, ob bestimmte Styles gesetzt wurden // style: Die Styles, die überprüft werden sollen // return: 1, falls alle Styles in style gesetzt wurden __declspec( dllexport ) bool hatStyle( __int64 style ) const; // Gibt zurück, ob bestimmte Styles nicht gesetzt wurden // style: Die Styles, die geprüft werden sollen // return: 1, falls alle Styles in style nicht gesetzt wurden __declspec( dllexport ) bool hatStyleNicht( __int64 style ) const; // Kopiert die Komplette Zeichnung, so dass sie ohne Effekt auf das Original verändert werden kann __declspec( dllexport ) virtual Zeichnung *dublizieren() const; // Erhöht den Reference Counting Zähler. // return: this. __declspec( dllexport ) Zeichnung *getThis(); // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht. // return: 0. __declspec( dllexport ) virtual Zeichnung *release(); }; // Eine Zeichnung für das 2D GUI Framework mit Hintergrund, Rahmen und Scroll Balken class ZeichnungHintergrund : public Zeichnung { public: class Style : public Zeichnung::Style { public: const static __int64 Rahmen = 0x00010; // Wenn dieser Flag gesetzt wird, bekommt die Zeichnugn einen Rahmen const static __int64 Hintergrund = 0x00020; // Wenn dieser Flag gesetzt wird, bekommt die Zeichnung einen Hintergrund const static __int64 HAlpha = 0x00040; // Wenn dieser Flag gesetzt wird, wird der Hintergrund durchsichtig. Benötigt Flag Hintergrund const static __int64 HBild = 0x00080; // Wenn dieser Flag gesetzt wird, wird ein Bild als hintergrund verwendet. Benötigt Flag Hintergrund const static __int64 Buffered = 0x00100; // Wenn dieser Flag gesetzt wird, Erscheint ein Farbübergang als Rahmen const static __int64 VScroll = 0x00200; // Wenn dieser Flag gesetzt wird, erscheint eine Scrollbar am rechten Rand const static __int64 HScroll = 0x00400; // Wenn dieser Flag gesetzt wird, erscheint eine Scrollbar am unteren Rand }; protected: int hintergrundFarbe; Rahmen *rahmen; Bild *hintergrundBild; AlphaFeld *hintergrundFeld; VScrollBar *vertikalScrollBar; HScrollBar *horizontalScrollBar; Punkt innenPosition; Punkt innenSize; public: // Konstruktor __declspec( dllexport ) ZeichnungHintergrund(); // Destruktor __declspec( dllexport ) virtual ~ZeichnungHintergrund(); // Setzt das Hintergrund Bild (benötigt Flag zum Zeichnen: Hintergrund, HBild) // bild: Das Bild wird kopiert und als Hintergrundbild verwendet __declspec( dllexport ) void setHintergrundBild( Bild *bild ); // Setzt einen Zeiger auf das Hintergrund Bild (benötigt Flag zum Zeichnen: Hintergrund) // bild: Das Bild wid ohne es zu kopieren verwendet __declspec( dllexport ) void setHintergrundBildZ( Bild *bild ); // Setzt die Hintergrund Farbe (benötigt Flag zum Zeichnen: Hintergrund) // fc: Die Hintergrundfarbe im A8R8G8B8 Format __declspec( dllexport ) void setHintergrundFarbe( int fc ); // Setzt einen Zeiger auf das AlphaFeld (benötigt Flag zum Zeichnen: Buffered) // buff: Das AlphaFeld, das über den Hintergrund gezeichnet werden soll __declspec( dllexport ) void setAlphaFeldZ( AlphaFeld *buff ); // Setzt die Stärke des AlphaFeldes (benötigt Flag zum Zeichnen: Buffered) // st: Die Stärke des AlphaFeldes, welches über dem Hintergrund gezeichnet werden soll __declspec( dllexport ) void setAlphaFeldStrength( int st ); // Setzt die Farbe des AlphaFeldes (benötigt Flag zum Zeichnen: Buffered) // fc: Die Farbe des AlphaFeldes, welches über dem Hintergrund gezeichnet werden soll __declspec( dllexport ) void setAlphaFeldFarbe( int fc ); // Setzt einen Zeiger zu dem Linien Rahmen, der um das TextFeld gezeichnet werden soll (benötigt Flag zum Zeichnen: Rahmen) // ram: Der Rahmen __declspec( dllexport ) void setRahmenZ( Rahmen *ram ); // Setzt die Breite des Linien Rahmens (benötigt Flag zum Zeichnen: Rahmen) // br: Die Breite in Pixeln __declspec( dllexport ) void setRahmenBreite( int br ); // Setzt die Farbe des Linien Rahmens (benötigt Flag zum Zeichnen: Rahmen) // fc: Die Farbe im A8R8G8B8 Format __declspec( dllexport ) void setRahmenFarbe( int fc ); // Setzt die Scrollgeschwindigkeit der vertikalen ScrollBar (benötigt Flag zum Zeichnen: VScroll) // ks: Die Scrollgeschwindigkeit in Pixeln für jeden Maus Klick __declspec( dllexport ) void setVertikalKlickScroll( int ks ); // Scrollt an eine Bestimmte Stelle bei der vertikalen ScrollBar (benötigt Flag zum Zeichnen: VScroll) // pos: Das Scroll Offset in Pixeln. __declspec( dllexport ) void setVertikalScrollPos( int pos ); // Setzt die Farbe der vertikalen ScrollBar (benötigt Flag zum Zeichnen: VScroll) // f: Die Fordergrundfarbe der ScrollBar im A8R8G8B8 Format // bgF: Die Hintergrundfarbe der ScrollBar im A8R8G8B8 Format __declspec( dllexport ) void setVertikalScrollFarbe( int f, int bgF ); // Setzt die Scrollgeschwindigkeit der horizontalen ScrollBar (benötigt Flag zum Zeichnen: HScroll) // ks: Die Scrollgeschwindigkeit in Pixeln für jeden Maus Klick __declspec( dllexport ) void setHorizontalKlickScroll( int ks ); // Scrollt an eine Bestimmte Stelle bei der horizontalen ScrollBar (benötigt Flag zum Zeichnen: HScroll) // pos: Das Scroll Offset in Pixeln. __declspec( dllexport ) void setHorizontalScrollPos( int pos ); // Setzt die Farbe der horizontalen ScrollBar (benötigt Flag zum Zeichnen: HScroll) // f: Die Fordergrundfarbe der ScrollBar im A8R8G8B8 Format // bgF: Die Hintergrundfarbe der ScrollBar im A8R8G8B8 Format __declspec( dllexport ) void setHorizontalScrollFarbe( int f, int bgF ); // Updated den Zeichenhintergrund // tickVal: Die vergangene Zeit in Sekunden, die seit dem Letzten Aufruf dieser Funktion verstrichen ist // return: 1, wenn das Bild neu gezeichnet werden muss. 0 sonnst __declspec( dllexport ) bool tick( double tickVal ) override; // Zeichnet den Hintergrund eines Zeichnunges nach rObj __declspec( dllexport ) void render( Bild &rObj ) override; // Gibt die Breite des Innenraumes in der Zeichnung in Pixeln zurück __declspec( dllexport ) virtual int getInnenBreite() const override; // Gibt die Höhe des Innenraumes in der Zeichnung in Pixeln zurück __declspec( dllexport ) virtual int getInnenHeight() const override; // Gibt das Hintergrundbild zurück. // return: 0, falls kein Hintergrundbild verwendet wird __declspec( dllexport ) Bild *getHintergrundBild() const; // Gibt das Hintergrundbild ohne erhöhten reference Counter zurück. // return: 0, falls kein Hintergrundbild verwendet wird __declspec( dllexport ) Bild *zHintergrundBild() const; // Gibt die Hintergrundfarbe im A8R8G8B8 Format zurück __declspec( dllexport ) int getHintergrundFarbe() const; // Gibt das AlphaFeld zurück, das über den Hintergrund gezeichnet wird. // return: 0, falls das AlphaFeld nicht definiert wurde __declspec( dllexport ) AlphaFeld *getAlphaFeld() const; // Gibt das AlphaFeld ohne erhöhten Reference Counter zurück, das über den Hintergrund gezeichnet wird. // return: 0, falls das AlphaFeld nicht definiert wurde __declspec( dllexport ) AlphaFeld *zAlphaFeld() const; // Git die Stärke des Alphafeldes zurück __declspec( dllexport ) int getAlphaFeldStrength() const; // Gibt die Farbe des Alphafedes im A8R8G8B8 Format zurück __declspec( dllexport ) int getAlphaFeldFarbe() const; // Gibt den Rahmen zurück // return: 0, falls kein Rahmen definiert wurde __declspec( dllexport ) Rahmen *getRahmen() const; // Gibt den Rahmen ohne erhöhten Reference Counter zurück // return: 0, falls kein Rahmen definiert wurde __declspec( dllexport ) Rahmen *zRahmen() const; // Gibt die Breite des Rahmens in Pixeln zurück __declspec( dllexport ) int getRahmenBreite() const; // Gibt die Farbe des Rahmens im A8R8G8B8 Format zurück __declspec( dllexport ) int getRahmenFarbe() const; // Gibt die Scroll geschwindigkeit der vertikalen Scroll Bar zurück __declspec( dllexport ) int getVertikalKlickScroll() const; // Gibt die Scroll Position der vertikalen Scroll Bar zurück __declspec( dllexport ) int getVertikalScrollPos() const; // Gibt die Farbe der vertikalen Scroll Bar im A8R8G8B8 Format zurück __declspec( dllexport ) int getVertikalScrollFarbe() const; // Gibt die Hintergrundfarbe der vertikalen Scroll Bar im A8R8G8B8 Format zurück __declspec( dllexport ) int getVertikalScrollHintergrund() const; // Gibt die Scroll geschwindigkeit der horizontalen Scroll Bar zurück __declspec( dllexport ) int getHorizontalKlickScroll() const; // Gibt die Scroll Position der horizontalen Scroll Bar zurück __declspec( dllexport ) int getHorizontalScrollPos() const; // Gibt die Farbe der horizontalen Scroll Bar im A8R8G8B8 Format zurück __declspec( dllexport ) int getHorizontalScrollFarbe() const; // Gibt die Hintergrundfarbe der horizontalen Scroll Bar im A8R8G8B8 Format zurück __declspec( dllexport ) int getHorizontalScrollHintergrund() const; // Erzeugt eine Kopie der Zeichnung, die ohne Auswirkungen auf das Original verändert werden kann __declspec( dllexport ) virtual Zeichnung *dublizieren() const; }; } #endif