Browse Source

Bessere ToolTips Teil 1

Kolja Strohm 5 years ago
parent
commit
e15e18e7d4
13 changed files with 60 additions and 32 deletions
  1. 1 1
      AlphaFeld.cpp
  2. 1 1
      Animation.cpp
  3. 1 1
      AuswahlBox.cpp
  4. 1 1
      Bild.cpp
  5. 1 1
      Fenster.cpp
  6. 1 1
      Knopf.cpp
  7. 5 3
      Rahmen.cpp
  8. 1 1
      Tabelle.cpp
  9. 1 1
      TextFeld.cpp
  10. 20 12
      ToolTip.cpp
  11. 9 6
      ToolTip.h
  12. 15 3
      Zeichnung.cpp
  13. 3 0
      Zeichnung.h

+ 1 - 1
AlphaFeld.cpp

@@ -88,7 +88,7 @@ Zeichnung *AlphaFeld::dublizieren() const // Kopiert das Zeichnung
     obj->setMausEreignis( mak );
     obj->setTastaturEreignis( tak );
     if( toolTip )
-        obj->setToolTipText( toolTip->zText()->getText(), toolTip->zBildschirm() );
+        obj->setToolTipZ( (ToolTip*)toolTip->dublizieren() );
     obj->setStrength( strength );
     obj->setFarbe( farbe );
     return obj;

+ 1 - 1
Animation.cpp

@@ -414,7 +414,7 @@ Zeichnung *Animation2D::dublizieren() const
     ret->setMausEreignis( mak );
     ret->setTastaturEreignis( tak );
     if( toolTip )
-        ret->setToolTipText( toolTip->zText()->getText(), toolTip->zBildschirm() );
+        ret->setToolTipZ( (ToolTip*)toolTip->dublizieren() );
     if( data )
         ret->setAnimationDataZ( data->getThis() );
     ret->setAPS( aps );

+ 1 - 1
AuswahlBox.cpp

@@ -2139,7 +2139,7 @@ Zeichnung *AuswahlBox::dublizieren() const // Erzeugt eine Kopie des Zeichnungs
     obj->setMausEreignis( mak );
     obj->setTastaturEreignis( tak );
     if( toolTip )
-        obj->setToolTipText( toolTip->zText()->getText(), toolTip->zBildschirm() );
+        obj->setToolTipZ( (ToolTip*)toolTip->dublizieren() );
     obj->setStyle( style );
     if( textRd )
         obj->setTextRendererZ( textRd->getThis() );

+ 1 - 1
Bild.cpp

@@ -2755,7 +2755,7 @@ Zeichnung *BildZ::dublizieren() const // erstellt eine Kopie des Zeichnungs
     obj->setMausEreignis( mak );
     obj->setTastaturEreignis( tak );
     if( toolTip )
-        obj->setToolTipText( toolTip->zText()->getText(), toolTip->zBildschirm() );
+        obj->setToolTipZ( (ToolTip*)toolTip->dublizieren() );
     obj->setStyle( style );
     obj->setHintergrundFarbe( hintergrundFarbe );
     if( hintergrundFeld )

+ 1 - 1
Fenster.cpp

@@ -2453,7 +2453,7 @@ Zeichnung *Fenster::dublizieren() const // Erzeugt eine Kopie des Fensters
     ret->setMausEreignis( mak );
     ret->setTastaturEreignis( tak );
     if( toolTip )
-        ret->setToolTipText( toolTip->zText()->getText(), toolTip->zBildschirm() );
+        ret->setToolTipZ( (ToolTip*)toolTip->dublizieren() );
     ret->setStyle( style );
     ret->setClosingMeParam( closingMeParam );
     ret->setClosingMe( closingMe );

+ 1 - 1
Knopf.cpp

@@ -276,7 +276,7 @@ Zeichnung *Knopf::dublizieren() const // Erzeugt eine Kopie des Zeichnungs
     obj->setMausEreignis( mak );
     obj->setTastaturEreignis( tak );
     if( toolTip )
-        obj->setToolTipText( toolTip->zText()->getText(), toolTip->zBildschirm() );
+        obj->setToolTipZ( (ToolTip*)toolTip->dublizieren() );
     obj->setStyle( style );
     obj->setSchriftSize( getSchriftSize() );
     if( zSchrift() )

+ 5 - 3
Rahmen.cpp

@@ -156,7 +156,8 @@ Zeichnung *LRahmen::dublizieren() const // Kopiert das Zeichnung
     obj->setMausEreignis( mak );
     obj->setTastaturEreignis( tak );
     if( toolTip )
-        obj->setToolTipText( toolTip->zText()->getText(), toolTip->zBildschirm() );
+        obj->setToolTipZ( (ToolTip*)toolTip->dublizieren() );
+    obj->setBreaks( breaks );
     obj->setAlpha( alpha );
     obj->setFarbe( farbe );
     obj->setRamenBreite( br );
@@ -248,7 +249,7 @@ void Rahmen3D::render( Bild &Obj ) // Zeichnet den Rahmen in das RenderZeichnung
 
 Zeichnung *Rahmen3D::dublizieren() const // Kopiert das Zeichnung
 {
-    Rahmen *obj = new LRahmen();
+    Rahmen *obj = new Rahmen3D();
     obj->setPosition( pos );
     obj->setSize( gr );
     obj->setMausEreignisParameter( makParam );
@@ -256,7 +257,8 @@ Zeichnung *Rahmen3D::dublizieren() const // Kopiert das Zeichnung
     obj->setMausEreignis( mak );
     obj->setTastaturEreignis( tak );
     if( toolTip )
-        obj->setToolTipText( toolTip->zText()->getText(), toolTip->zBildschirm() );
+        obj->setToolTipZ( (ToolTip*)toolTip->dublizieren() );
+    obj->setBreaks( breaks );
     obj->setAlpha( alpha );
     obj->setFarbe( farbe );
     obj->setRamenBreite( br );

+ 1 - 1
Tabelle.cpp

@@ -1569,7 +1569,7 @@ Zeichnung *ObjTabelle::dublizieren() const // Erzeugt eine Kopie des Zeichnungs
     obj->setMausEreignis( mak );
     obj->setTastaturEreignis( tak );
     if( toolTip )
-        obj->setToolTipText( toolTip->zText()->getText(), toolTip->zBildschirm() );
+        obj->setToolTipZ( (ToolTip*)toolTip->dublizieren() );
     obj->setStyle( style );
     if( rahmen )
         obj->setRahmenZ( (Rahmen*)rahmen->dublizieren() );

+ 1 - 1
TextFeld.cpp

@@ -802,7 +802,7 @@ Zeichnung *TextFeld::dublizieren() const // Erzeugt eine Kopie des Zeichnungs
 	obj->setMausEreignis( mak );
 	obj->setTastaturEreignis( tak );
 	if( toolTip )
-		obj->setToolTipText( toolTip->zText()->getText(), toolTip->zBildschirm() );
+		obj->setToolTipZ( (ToolTip*)toolTip->dublizieren() );
 	obj->setStyle( style );
 	obj->setSchriftSize( schriftSize );
 	if( textRd )

+ 20 - 12
ToolTip.cpp

@@ -12,7 +12,7 @@ using namespace Framework;
 // Inhalt der ToolTip Klasse aus ToolTip.h
 // Konstruktor
 ToolTip::ToolTip( Bildschirm *zScreen )
-    : TextFeld(),
+    : ZeichnungHintergrund(),
     size( 0, 0 ),
     animationSpeed( 250 ),
     warten( 1 ),
@@ -24,12 +24,15 @@ ToolTip::ToolTip( Bildschirm *zScreen )
     zeichnen( 0 ),
 	bildschirm( zScreen )
 {
+    members = new RCArray< Zeichnung >();
     bildschirm->addToolTip( ( ToolTip* )this->getThis() );
 }
 
 // Destruktor
 ToolTip::~ToolTip()
-{}
+{
+    members->release();
+}
 
 // nicht constant
 void ToolTip::setSize( int breite, int height )
@@ -45,6 +48,13 @@ void ToolTip::setSize( Punkt &gr )
     rend = 1;
 }
 
+// Fügt eine Zeichnung zum Tooltip hinzu
+//  m: die neue Zeichnung
+void ToolTip::addMember( Zeichnung *m )
+{
+    members->add( m );
+}
+
 void ToolTip::setWarten( double warten )
 {
     this->warten = warten;
@@ -103,7 +113,7 @@ bool ToolTip::tick( double tickVal )
                 sichtbar = 1;
                 wartenCount = 0;
                 alpha = 0xFF;
-				TextFeld::setSize( 0, 0 );
+				ZeichnungHintergrund::setSize( 0, 0 );
             }
         }
         else
@@ -113,20 +123,20 @@ bool ToolTip::tick( double tickVal )
     {
         if( getBreite() != size.x )
         {
-			TextFeld::setSize( getBreite() + val, getSchriftSize() + getRahmenBreite() * 2 );
+            ZeichnungHintergrund::setSize( getBreite() + val, getHeight() );
             if( getBreite() > size.x )
-				TextFeld::setSize( size.x, getHeight() );
+                ZeichnungHintergrund::setSize( size.x, getHeight() );
             rend = 1;
         }
-        else if( getHeight() != size.y )
+        if( getHeight() != size.y )
         {
-			TextFeld::setSize( getBreite(), getHeight() + val );
+            ZeichnungHintergrund::setSize( getBreite(), getHeight() + val );
             if( getHeight() > size.y )
-				TextFeld::setSize( getBreite(), size.y );
+                ZeichnungHintergrund::setSize( getBreite(), size.y );
             rend = 1;
         }
     }
-    return TextFeld::tick( tickVal );
+    return ZeichnungHintergrund::tick( tickVal );
 }
 
 void ToolTip::doMausEreignis( MausEreignis &me )
@@ -142,15 +152,13 @@ void ToolTip::render( Bild &zRObj )
 {
     if( alpha && zeichnen )
     {
-        zTextRenderer()->setSchriftSize( getSchriftSize() );
-        size = Punkt( zTextRenderer()->getTextBreite( zText()->getText() ) + getRahmenBreite() * 2, zTextRenderer()->getTextHeight( zText()->getText() ) + getRahmenBreite() * 2 );
         zRObj.setAlpha( alpha );
         setPosition( pos );
         if( getX() + getBreite() > zRObj.getBreite() )
             setPosition( getX() - ( getX() + getBreite() - zRObj.getBreite() ), getY() );
         if( getY() + getHeight() > zRObj.getHeight() )
             setPosition( getX(), getY() - ( getY() + getHeight() - zRObj.getHeight() ) );
-		TextFeld::render( zRObj );
+        ZeichnungHintergrund::render( zRObj );
         zRObj.releaseAlpha();
         zeichnen = 0;
     }

+ 9 - 6
ToolTip.h

@@ -1,7 +1,8 @@
 #ifndef ToolTip_H
 #define ToolTip_H
 
-#include "TextFeld.h"
+#include "Array.h"
+#include "Zeichnung.h"
 
 namespace Framework
 {
@@ -13,13 +14,10 @@ namespace Framework
     struct MausEreignis; // MausEreignis.h
     class Bildschirm; // Bildschirm.h
 
-    // Verwaltet ein automatisch ausfahrendes Fenster an der Mausposition, wo hilfe Texte eingeblendet werden
-    class ToolTip : public TextFeld
+    class ToolTip : public ZeichnungHintergrund
     {
-    public:
-        class Style : public TextFeld::Style
-        {};
     private:
+        RCArray< Zeichnung > *members;
         Punkt size;
         double animationSpeed;
         double warten;
@@ -45,6 +43,9 @@ namespace Framework
         //  gr: Die Größe in Pixeln
         // Die Größe wird beim rendern überschrieben
         __declspec( dllexport ) void setSize( Punkt &gr );
+        // Fügt eine Zeichnung zum Tooltip hinzu
+        //  m: die neue Zeichnung
+        __declspec( dllexport ) void addMember( Zeichnung *m );
         // Setzt die anzahl an Seunden, de gewartet wird bis der Tipp erscheint
         //  warten: Die Anzahl an Sekunden
         __declspec( dllexport ) void setWarten( double warten );
@@ -70,6 +71,8 @@ namespace Framework
         __declspec( dllexport ) void render( Bild &zRObj ) override;
         // Gibt einen Zeiger auf den Bildschirm ohne erhöhten Reference Counter zurück, so dem der Tooltip gehört.
         __declspec( dllexport ) Bildschirm *zBildschirm() const;
+        // Erzeugt eine komplette kopie eines tooltips ohne gleiche referenzen
+        __declspec( dllexport ) Zeichnung *dublizieren() const override;
         // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
         //  return: 0.
         __declspec( dllexport ) Zeichnung *release() override;

+ 15 - 3
Zeichnung.cpp

@@ -8,6 +8,7 @@
 #include "Rahmen.h"
 #include "AlphaFeld.h"
 #include "Bild.h"
+#include "TextFeld.h"
 #ifdef WIN32
 #include <Windows.h>
 #endif
@@ -61,10 +62,21 @@ void Zeichnung::setToolTipText( const char *txt, Bildschirm *zScreen )
     {
         if( !toolTip )
             toolTip = new ToolTip( zScreen );
-        toolTip->setText( txt );
+        TextFeld *t = new TextFeld();
+        t->setText( txt );
+        toolTip->addMember( t );
     }
 }
 
+// legt den tooltip fest
+// tt: der tooltip
+void Zeichnung::setToolTipZ( ToolTip *tt )
+{
+    if( toolTip )
+        toolTip->release();
+    toolTip = tt;
+}
+
 void Zeichnung::lockZeichnung()
 {
     cs.lock();
@@ -359,7 +371,7 @@ Zeichnung *Zeichnung::dublizieren() const // Erzeugt eine Kopie des Zeichnungs
     obj->setMausEreignis( mak );
     obj->setTastaturEreignis( tak );
     if( toolTip )
-        obj->setToolTipText( toolTip->zText()->getText(), toolTip->zBildschirm() );
+        obj->setToolTipZ( (ToolTip*)toolTip->dublizieren() );
     return obj;
 }
 
@@ -843,7 +855,7 @@ Zeichnung *ZeichnungHintergrund::dublizieren() const // Erzeugt eine Kopie des Z
     obj->setMausEreignis( mak );
     obj->setTastaturEreignis( tak );
     if( toolTip )
-        obj->setToolTipText( toolTip->zText()->getText(), toolTip->zBildschirm() );
+        obj->setToolTipZ( (ToolTip*)toolTip->dublizieren() );
     obj->setStyle( style );
     obj->setHintergrundFarbe( hintergrundFarbe );
     if( hintergrundFeld )

+ 3 - 0
Zeichnung.h

@@ -64,6 +64,9 @@ namespace Framework
         //  txt: Der Text, der angezeigt werden soll
         //  zScreen: Ein Zeiger auf das Verwendete Bildschirm Objekt ohne erhöhten Reference Counter
         __declspec( dllexport ) void setToolTipText( const char *txt, Bildschirm *zScreen );
+        // 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();