ToolTip.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. #include "ToolTip.h"
  2. #include "TextFeld.h"
  3. #include "Text.h"
  4. #include "AlphaFeld.h"
  5. #include "Bild.h"
  6. #include "MausEreignis.h"
  7. #include "Schrift.h"
  8. #include "Bildschirm.h"
  9. using namespace Framework;
  10. // Inhalt der ToolTip Klasse aus ToolTip.h
  11. // Konstruktor
  12. ToolTip::ToolTip( Bildschirm *zScreen )
  13. : TextFeld(),
  14. größe( 0, 0 ),
  15. animationSpeed( 250 ),
  16. warten( 1 ),
  17. wartenCount( 0 ),
  18. tval( 0 ),
  19. mausIn( 0 ),
  20. alpha( 0 ),
  21. sichtbar( 0 ),
  22. bildschirm( zScreen ),
  23. zeichnen( 0 )
  24. {
  25. bildschirm->addToolTip( ( ToolTip* )this->getThis() );
  26. }
  27. // Destruktor
  28. ToolTip::~ToolTip()
  29. {}
  30. // nicht constant
  31. void ToolTip::setGröße( int breite, int höhe )
  32. {
  33. größe.x = breite;
  34. größe.y = höhe;
  35. rend = 1;
  36. }
  37. void ToolTip::setGröße( Punkt &gr )
  38. {
  39. größe = gr;
  40. rend = 1;
  41. }
  42. void ToolTip::setWarten( double warten )
  43. {
  44. this->warten = warten;
  45. }
  46. void ToolTip::setAnimationSpeed( double speed )
  47. {
  48. animationSpeed = speed;
  49. }
  50. void ToolTip::setMausIn( bool mausIn )
  51. {
  52. if( this->mausIn != mausIn )
  53. rend = 1;
  54. this->mausIn = mausIn;
  55. if( !mausIn )
  56. sichtbar = 0;
  57. }
  58. void ToolTip::wartenReset()
  59. {
  60. wartenCount = 0;
  61. }
  62. void ToolTip::setZeichnen()
  63. {
  64. zeichnen = 1;
  65. }
  66. bool ToolTip::tick( double tickVal )
  67. {
  68. this->tval += tickVal * animationSpeed;
  69. int val = ( int )this->tval;
  70. if( val < 1 )
  71. {
  72. bool ret = rend;
  73. rend = 0;
  74. return ret;
  75. }
  76. this->tval -= val;
  77. if( !sichtbar )
  78. {
  79. if( alpha )
  80. {
  81. if( alpha - val < 0 )
  82. alpha = 0;
  83. else
  84. alpha -= val;
  85. rend = 1;
  86. }
  87. if( mausIn )
  88. {
  89. wartenCount += tickVal;
  90. if( wartenCount >= warten )
  91. {
  92. sichtbar = 1;
  93. wartenCount = 0;
  94. alpha = 0xFF;
  95. __super::setGröße( 0, 0 );
  96. }
  97. }
  98. else
  99. wartenCount = 0;
  100. }
  101. else
  102. {
  103. if( getBreite() != größe.x )
  104. {
  105. __super::setGröße( getBreite() + val, getSchriftGröße() + getLinienRahmenBreite() * 2 );
  106. if( getBreite() > größe.x )
  107. __super::setGröße( größe.x, getHöhe() );
  108. rend = 1;
  109. }
  110. else if( getHöhe() != größe.y )
  111. {
  112. __super::setGröße( getBreite(), getHöhe() + val );
  113. if( getHöhe() > größe.y )
  114. __super::setGröße( getBreite(), größe.y );
  115. rend = 1;
  116. }
  117. }
  118. bool ret = rend;
  119. rend = 0;
  120. return ret;
  121. }
  122. void ToolTip::doMausEreignis( MausEreignis &me )
  123. {
  124. if( mausIn )
  125. pos.x = me.mx, pos.y = me.my + 15;
  126. sichtbar = 0;
  127. if( alpha )
  128. rend = 1;
  129. }
  130. void ToolTip::render( Bild &zRObj )
  131. {
  132. if( alpha && zeichnen )
  133. {
  134. zSchrift()->lock();
  135. zSchrift()->setSchriftGröße( getSchriftGröße() );
  136. größe = Punkt( zSchrift()->getTextBreite( zText() ) + getLinienRahmenBreite() * 2, zSchrift()->getTextHöhe( zText() ) + getLinienRahmenBreite() * 2 );
  137. zSchrift()->unlock();
  138. zRObj.setAlpha( alpha );
  139. setPosition( pos );
  140. if( getX() + getBreite() > zRObj.getBreite() )
  141. setPosition( getX() - ( getX() + getBreite() - zRObj.getBreite() ), getY() );
  142. if( getY() + getHöhe() > zRObj.getHöhe() )
  143. setPosition( getX(), getY() - ( getY() + getHöhe() - zRObj.getHöhe() ) );
  144. __super::render( zRObj );
  145. zRObj.releaseAlpha();
  146. zeichnen = 0;
  147. }
  148. }
  149. // constant
  150. Bildschirm *ToolTip::zBildschirm() const
  151. {
  152. return bildschirm;
  153. }
  154. // Reference Counting
  155. TextFeld *ToolTip::getThis()
  156. {
  157. ++ref;
  158. return this;
  159. }
  160. TextFeld *ToolTip::release()
  161. {
  162. --ref;
  163. if( !ref )
  164. {
  165. delete this;
  166. return 0;
  167. }
  168. if( ref == 1 )
  169. {
  170. if( !bildschirm->removeToolTip( this ) )
  171. delete this;
  172. }
  173. return 0;
  174. }