M2DVorschau.cpp 4.8 KB

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