M2DVorschau.cpp 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. #include "M2DVorschau.h"
  2. #include "Model2D.h"
  3. #include "MausEreignis.h"
  4. #include "Rahmen.h"
  5. #include "AlphaFeld.h"
  6. #include "ToolTip.h"
  7. #include "Globals.h"
  8. #include "Bild.h"
  9. using namespace Framework;
  10. // Inhalt der M2DVorschau Klasse aus M2DVorschau.h
  11. // Konstruktor
  12. M2DVorschau::M2DVorschau()
  13. : ZeichnungHintergrund()
  14. {
  15. mdl = 0;
  16. mx = -1;
  17. my = -1;
  18. ref = 1;
  19. }
  20. // Destruktor
  21. M2DVorschau::~M2DVorschau()
  22. {
  23. if( mdl )
  24. mdl->release();
  25. if( ram )
  26. ram->release();
  27. if( af )
  28. af->release();
  29. }
  30. // nicht constant
  31. void M2DVorschau::setModel2DZ( Model2D *mdl )
  32. {
  33. if( this->mdl )
  34. this->mdl->release();
  35. this->mdl = mdl;
  36. rend = 1;
  37. }
  38. void M2DVorschau::setModel2D( Model2DData *mdl )
  39. {
  40. if( !this->mdl )
  41. this->mdl = new Model2D();
  42. this->mdl->setModel( mdl );
  43. rend = 1;
  44. }
  45. void M2DVorschau::doMausEreignis( MausEreignis &me )
  46. {
  47. if( hatStyleNicht( Style::Erlaubt ) || hatStyleNicht( Style::Sichtbar ) )
  48. {
  49. mausIn = 0;
  50. if( toolTip )
  51. toolTip->setMausIn( 0 );
  52. return;
  53. }
  54. if( me.verarbeitet || ( !( me.mx >= pos.x && me.mx <= pos.x + gr.x && me.my >= pos.y && me.my <= pos.y + gr.y ) && me.id != ME_Leaves ) )
  55. {
  56. if( mausIn )
  57. {
  58. mausIn = 0;
  59. if( toolTip )
  60. toolTip->setMausIn( 0 );
  61. MausEreignis me2;
  62. me2.id = ME_Leaves;
  63. me2.mx = me.mx;
  64. me2.my = me.my;
  65. me2.verarbeitet = 0;
  66. doMausEreignis( me2 );
  67. }
  68. return;
  69. }
  70. if( !mausIn && me.id != ME_Leaves )
  71. {
  72. mausIn = 1;
  73. if( toolTip )
  74. toolTip->setMausIn( 1 );
  75. MausEreignis me2;
  76. me2.id = ME_Betritt;
  77. me2.mx = me.mx;
  78. me2.my = me.my;
  79. me2.verarbeitet = 0;
  80. doMausEreignis( me2 );
  81. }
  82. me.mx -= pos.x, me.my -= pos.y;
  83. if( Mak && Mak( makParam, this, me ) )
  84. {
  85. if( hatStyle( Style::UsrScale ) )
  86. {
  87. if( mdl && me.id == ME_UScroll )
  88. mdl->addSize( 0.01f );
  89. if( mdl && me.id == ME_DScroll )
  90. mdl->addSize( -0.01f );
  91. }
  92. if( me.id == ME_RLinks || me.id == ME_RRechts || me.id == ME_Leaves )
  93. {
  94. mx = -1;
  95. my = -1;
  96. }
  97. if( mdl && me.id == ME_Bewegung )
  98. {
  99. if( mx != -1 && my != -1 )
  100. {
  101. if( getMausStand( M_Links ) && hatStyle( Style::UsrMove ) )
  102. mdl->setPosition( mdl->getPosition() + Punkt( me.mx - mx, me.my - my ) );
  103. if( getMausStand( M_Rechts ) && hatStyle( Style::UsrRot ) )
  104. {
  105. if( me.mx > gr.x / 2 )
  106. mdl->addDrehung( 0.01f * (float)( me.my - my ) );
  107. else
  108. mdl->addDrehung( -0.01f * (float)( me.my - my ) );
  109. if( me.my > gr.y / 2 )
  110. mdl->addDrehung( -0.01f * (float)( me.mx - mx ) );
  111. else
  112. mdl->addDrehung( 0.01f * (float)( me.mx - mx ) );
  113. }
  114. mx = me.mx;
  115. my = me.my;
  116. }
  117. }
  118. if( me.id == ME_PLinks || me.id == ME_PRechts )
  119. {
  120. mx = me.mx;
  121. my = me.my;
  122. }
  123. if( nMak && me.verarbeitet )
  124. me.verarbeitet = nMak( nmakParam, this, me );
  125. }
  126. me.mx += pos.x, me.my += pos.y;
  127. }
  128. bool M2DVorschau::tick( double tv )
  129. {
  130. rend |= mdl ? mdl->tick( tv ) : 0;
  131. rend |= af ? af->tick( tv ) : 0;
  132. rend |= ram ? ram->tick( tv ) : 0;
  133. return ZeichnungHintergrund::tick( tv );
  134. }
  135. void M2DVorschau::render( Bild &rb )
  136. {
  137. removeStyle( Style::VScroll | Style::HScroll );
  138. if( hatStyleNicht( Style::Sichtbar ) )
  139. return;
  140. ZeichnungHintergrund::render( rb );
  141. if( !rb.setDrawOptions( innenPosition, innenSize ) )
  142. return;
  143. if( mdl )
  144. {
  145. int rbr = rahmen && hatStyle( Style::Rahmen ) ? rahmen->getRBreite() : 0;
  146. rb.addScrollOffset( -gr.x / 2 + rbr, -gr.y / 2 + rbr );
  147. mdl->render( rb );
  148. }
  149. rb.releaseDrawOptions();
  150. }
  151. // constant
  152. Model2D *M2DVorschau::zModel() const
  153. {
  154. return mdl;
  155. }
  156. Model2D *M2DVorschau::getModel() const
  157. {
  158. return mdl ? mdl->getThis() : 0;
  159. }
  160. Zeichnung *M2DVorschau::dublizieren() const
  161. {
  162. M2DVorschau *ret = new M2DVorschau();
  163. if( mdl )
  164. ret->setModel2D( mdl->getModel() );
  165. if( rahmen )
  166. ret->setLinienRahmenZ( (LRahmen*)rahmen->dublizieren() );
  167. if( hintergrundFeld )
  168. ret->setAlphaFeldZ( (AlphaFeld*)hintergrundFeld->dublizieren() );
  169. ret->setHintergrundFarbe( bgF );
  170. return ret;
  171. }
  172. // Reference counting
  173. M2DVorschau *M2DVorschau::getThis()
  174. {
  175. ref++;
  176. return this;
  177. }
  178. M2DVorschau *M2DVorschau::release()
  179. {
  180. ref--;
  181. if( !ref )
  182. delete this;
  183. return 0;
  184. }