ToolTip.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  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. : ZeichnungHintergrund(),
  14. size( 0, 0 ),
  15. animationSpeed( 250 ),
  16. warten( 1 ),
  17. wartenCount( 0 ),
  18. tval( 0 ),
  19. mausIn( 0 ),
  20. alpha( 0 ),
  21. sichtbar( 0 ),
  22. zeichnen( 0 ),
  23. bildschirm( zScreen )
  24. {
  25. members = new RCArray< Zeichnung >();
  26. bildschirm->addToolTip( ( ToolTip* )this->getThis() );
  27. }
  28. // Destruktor
  29. ToolTip::~ToolTip()
  30. {
  31. members->release();
  32. }
  33. // nicht constant
  34. void ToolTip::setSize( int breite, int height )
  35. {
  36. size.x = breite;
  37. size.y = height;
  38. rend = 1;
  39. }
  40. void ToolTip::setSize( Punkt &gr )
  41. {
  42. size = gr;
  43. rend = 1;
  44. }
  45. // Fügt eine Zeichnung zum Tooltip hinzu
  46. // m: die neue Zeichnung
  47. void ToolTip::addMember( Zeichnung *m )
  48. {
  49. members->add( m );
  50. }
  51. void ToolTip::setWarten( double warten )
  52. {
  53. this->warten = warten;
  54. }
  55. void ToolTip::setAnimationSpeed( double speed )
  56. {
  57. animationSpeed = speed;
  58. }
  59. void ToolTip::setMausIn( bool mausIn )
  60. {
  61. if( this->mausIn != mausIn )
  62. rend = 1;
  63. this->mausIn = mausIn;
  64. if( !mausIn )
  65. sichtbar = 0;
  66. }
  67. void ToolTip::wartenReset()
  68. {
  69. wartenCount = 0;
  70. }
  71. void ToolTip::setZeichnen()
  72. {
  73. zeichnen = 1;
  74. }
  75. bool ToolTip::tick( double tickVal )
  76. {
  77. this->tval += tickVal * animationSpeed;
  78. int val = ( int )this->tval;
  79. if( val < 1 )
  80. {
  81. bool ret = rend;
  82. rend = 0;
  83. return ret;
  84. }
  85. this->tval -= val;
  86. if( !sichtbar )
  87. {
  88. if( alpha )
  89. {
  90. if( alpha - val < 0 )
  91. alpha = 0;
  92. else
  93. alpha = (unsigned char)( alpha - val );
  94. rend = 1;
  95. }
  96. if( mausIn )
  97. {
  98. wartenCount += tickVal;
  99. if( wartenCount >= warten )
  100. {
  101. sichtbar = 1;
  102. wartenCount = 0;
  103. alpha = 0xFF;
  104. ZeichnungHintergrund::setSize( 0, 0 );
  105. }
  106. }
  107. else
  108. wartenCount = 0;
  109. }
  110. else
  111. {
  112. if( getBreite() != size.x )
  113. {
  114. ZeichnungHintergrund::setSize( getBreite() + val, getHeight() );
  115. if( getBreite() > size.x )
  116. ZeichnungHintergrund::setSize( size.x, getHeight() );
  117. rend = 1;
  118. }
  119. if( getHeight() != size.y )
  120. {
  121. ZeichnungHintergrund::setSize( getBreite(), getHeight() + val );
  122. if( getHeight() > size.y )
  123. ZeichnungHintergrund::setSize( getBreite(), size.y );
  124. rend = 1;
  125. }
  126. }
  127. return ZeichnungHintergrund::tick( tickVal );
  128. }
  129. void ToolTip::doMausEreignis( MausEreignis &me )
  130. {
  131. if( mausIn )
  132. pos.x = me.mx, pos.y = me.my + 15;
  133. sichtbar = 0;
  134. if( alpha )
  135. rend = 1;
  136. }
  137. void ToolTip::render( Bild &zRObj )
  138. {
  139. if( alpha && zeichnen )
  140. {
  141. zRObj.setAlpha( alpha );
  142. setPosition( pos );
  143. if( getX() + getBreite() > zRObj.getBreite() )
  144. setPosition( getX() - ( getX() + getBreite() - zRObj.getBreite() ), getY() );
  145. if( getY() + getHeight() > zRObj.getHeight() )
  146. setPosition( getX(), getY() - ( getY() + getHeight() - zRObj.getHeight() ) );
  147. ZeichnungHintergrund::render( zRObj );
  148. zRObj.releaseAlpha();
  149. zeichnen = 0;
  150. }
  151. }
  152. // constant
  153. Bildschirm *ToolTip::zBildschirm() const
  154. {
  155. return bildschirm;
  156. }
  157. // Reference Counting
  158. Zeichnung *ToolTip::release()
  159. {
  160. Zeichnung::release();
  161. if( ref == 1 )
  162. {
  163. if( !bildschirm->removeToolTip( this ) )
  164. delete this;
  165. }
  166. return 0;
  167. }