Rahmen.cpp 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. #include "Rahmen.h"
  2. #include "Punkt.h"
  3. #include "Bild.h"
  4. #include "Scroll.h"
  5. #include "ToolTip.h"
  6. #include "Text.h"
  7. using namespace Framework;
  8. // Inhalt der Rahmen Klasse aus Rahmen.h
  9. // Konstruktor
  10. Rahmen::Rahmen()
  11. : Zeichnung(),
  12. br( 1 ),
  13. farbe( 0xFF000000 ),
  14. alpha( 0 ),
  15. breaks( 0 )
  16. {}
  17. // Destruktor
  18. Rahmen::~Rahmen()
  19. {}
  20. // nicht constant
  21. void Rahmen::setRamenBreite( int br ) // setzt die Breite des Rahmens
  22. {
  23. this->br = br;
  24. rend = 1;
  25. }
  26. // wenn dieser Flag gesetzt wird, wird der Rahmen gestrichelt gezeichnet
  27. // br: 1 -> gestrichelt, 0 -> durchgehend
  28. void Rahmen::setBreaks( bool br, int brOff, int brLength, int lineLength )
  29. {
  30. breaks = br;
  31. breakOffset = brOff;
  32. breakLength = brLength;
  33. this->lineLength = lineLength;
  34. rend = 1;
  35. }
  36. void Rahmen::setAlpha( bool a ) // Legt fest, ob der Alphawert der Farbe berücksichtigt werden soll
  37. {
  38. alpha = a;
  39. rend = 1;
  40. }
  41. void Rahmen::setFarbe( int f ) // Legt die Farbe des Rahmens fest
  42. {
  43. farbe = f;
  44. rend = 1;
  45. }
  46. int Rahmen::getFarbe() const // Gibt die Farbe des Ramens zurück
  47. {
  48. return farbe;
  49. }
  50. bool Rahmen::hatAlpha() const // Gibt zurück, ob der Alphawert der Farbe beachtet wird
  51. {
  52. return alpha;
  53. }
  54. int Rahmen::getRBreite() const // Gibt die Breite des Rahmens zurück
  55. {
  56. return br;
  57. }
  58. // Gibt 1 zurück, falls der Rahmen gestrichelt gezeichnet wird
  59. bool Rahmen::hasBreaks() const
  60. {
  61. return breaks;
  62. }
  63. // startpunkt des ersten linienabschnittes
  64. int Rahmen::getBreakOffset() const
  65. {
  66. return breakOffset;
  67. }
  68. // länge einer lücke
  69. int Rahmen::getBreakLength() const
  70. {
  71. return breakLength;
  72. }
  73. // länge einer linie
  74. int Rahmen::getLineLength() const
  75. {
  76. return lineLength;
  77. }
  78. // Inhalt der LRahmen Klasse aus Rahmen.h
  79. // Konstruktor
  80. LRahmen::LRahmen()
  81. : Rahmen()
  82. {}
  83. // Destruktor
  84. LRahmen::~LRahmen()
  85. {}
  86. void LRahmen::render( Bild &Obj ) // Zeichnet den Rahmen in das RenderZeichnung
  87. {
  88. Zeichnung::render( Obj );
  89. int x = 0;
  90. int y = 0;
  91. int b = gr.x - 1;
  92. int h = gr.y - 1;
  93. if( !Obj.setDrawOptions( pos.x, pos.y, gr.x, gr.y ) )
  94. return;
  95. if( !breaks )
  96. {
  97. if( alpha )
  98. {
  99. for( int i = 0; i < br; ++i )
  100. {
  101. Obj.drawLinieHAlpha( x + i + 1, y + i, gr.x - i * 2 - 1, farbe );
  102. Obj.drawLinieVAlpha( b - i, y + i + 1, gr.y - i * 2 - 2, farbe );
  103. Obj.drawLinieHAlpha( x + i + 1, h - i, gr.x - i * 2 - 1, farbe );
  104. Obj.drawLinieVAlpha( x + i, y + i, gr.y - i * 2, farbe );
  105. }
  106. }
  107. else
  108. {
  109. for( int i = 0; i < br; ++i )
  110. {
  111. Obj.drawLinieH( x + i + 1, y + i, gr.x - i * 2 - 1, farbe );
  112. Obj.drawLinieV( b - i, y + i + 1, gr.y - i * 2 - 2, farbe );
  113. Obj.drawLinieH( x + i + 1, h - i, gr.x - i * 2 - 1, farbe );
  114. Obj.drawLinieV( x + i, y + i, gr.y - i * 2, farbe );
  115. }
  116. }
  117. }
  118. else
  119. {
  120. if( alpha )
  121. {
  122. for( int i = 0; i < br; ++i )
  123. {
  124. for( int x = breakOffset; x < gr.x; x += lineLength + breakLength )
  125. Obj.drawLinieHAlpha( x + i + 1, y + i, lineLength - ( x + i + 1 + lineLength > gr.x - i - 1 ? gr.x - i - 1 - ( x + i + 1 + lineLength ) : 0 ), farbe );
  126. for( int x = gr.x - breakOffset - lineLength; x >= 0; x -= lineLength + breakLength )
  127. Obj.drawLinieHAlpha( MAX( x + i + 1, i + 1 ), h - i, lineLength - ( x + i + 1 < i + 1 ? i + 1 - ( x + i + 1 ) : 0 ), farbe );
  128. for( int y = breakOffset; y < gr.y; y += lineLength + breakLength )
  129. Obj.drawLinieVAlpha( b - i, y + i + 1, lineLength - ( y + i + 1 + lineLength > gr.y - i - 1 ? gr.y - i - 1 - ( y + i + 1 + lineLength ) : 0 ), farbe );
  130. for( int y = gr.y - breakOffset - lineLength; y >= 0; y -= lineLength + breakLength )
  131. Obj.drawLinieVAlpha( x + i, MAX( y + i, i ), lineLength - ( y + i < i ? i - ( y + i ) : 0 ), farbe );
  132. }
  133. }
  134. else
  135. {
  136. for( int i = 0; i < br; ++i )
  137. {
  138. for( int x = breakOffset; x < gr.x; x += lineLength + breakLength )
  139. Obj.drawLinieH( x + i + 1, y + i, lineLength - ( x + i + 1 + lineLength > gr.x - i - 1 ? gr.x - i - 1 - ( x + i + 1 + lineLength ) : 0 ), farbe );
  140. for( int x = gr.x - breakOffset - lineLength; x >= 0; x -= lineLength + breakLength )
  141. Obj.drawLinieH( MAX( x + i + 1, i + 1 ), h - i, lineLength - ( x + i + 1 < i + 1 ? i + 1 - ( x + i + 1 ) : 0 ), farbe );
  142. for( int y = breakOffset; y < gr.y; y += lineLength + breakLength )
  143. Obj.drawLinieV( b - i, y + i + 1, lineLength - ( y + i + 1 + lineLength > gr.y - i - 1 ? gr.y - i - 1 - ( y + i + 1 + lineLength ) : 0 ), farbe );
  144. for( int y = gr.y - breakOffset - lineLength; y >= 0; y -= lineLength + breakLength )
  145. Obj.drawLinieV( x + i, MAX( y + i, i ), lineLength - ( y + i < i ? i - ( y + i ) : 0 ), farbe );
  146. }
  147. }
  148. }
  149. Obj.releaseDrawOptions();
  150. }
  151. Zeichnung *LRahmen::dublizieren() const // Kopiert das Zeichnung
  152. {
  153. Rahmen *obj = new LRahmen();
  154. obj->setPosition( pos );
  155. obj->setSize( gr );
  156. obj->setMausEreignisParameter( makParam );
  157. obj->setTastaturEreignisParameter( takParam );
  158. obj->setMausEreignis( mak );
  159. obj->setTastaturEreignis( tak );
  160. if( toolTip )
  161. obj->setToolTipZ( (ToolTip*)toolTip->dublizieren() );
  162. obj->setBreaks( breaks );
  163. obj->setAlpha( alpha );
  164. obj->setFarbe( farbe );
  165. obj->setRamenBreite( br );
  166. return obj;
  167. }
  168. // Inhalt der Rahmen3D Klasse aus Rahmen.h
  169. // Konstruktor
  170. Rahmen3D::Rahmen3D()
  171. : Rahmen()
  172. {
  173. alpha = 1;
  174. farbe = 0x70FFFFFF;
  175. br = 5;
  176. }
  177. // Destruktor
  178. Rahmen3D::~Rahmen3D()
  179. {}
  180. void Rahmen3D::render( Bild &Obj ) // Zeichnet den Rahmen in das RenderZeichnung
  181. {
  182. Zeichnung::render( Obj );
  183. int x = 0;
  184. int y = 0;
  185. int b = gr.x - 1;
  186. int h = gr.y - 1;
  187. int fcomp = ( farbe & 0xFF000000 ) | ( ~farbe & 0x00FFFFFF );
  188. if( !Obj.setDrawOptions( pos.x, pos.y, gr.x, gr.y ) )
  189. return;
  190. if( !breaks )
  191. {
  192. if( alpha )
  193. {
  194. for( int i = 0; i < br; ++i )
  195. {
  196. Obj.drawLinieHAlpha( x + i + 1, y + i, gr.x - i * 2 - 1, farbe );
  197. Obj.drawLinieVAlpha( b - i, y + i + 1, gr.y - i * 2 - 2, farbe );
  198. Obj.drawLinieHAlpha( x + i + 1, h - i, gr.x - i * 2 - 1, fcomp );
  199. Obj.drawLinieVAlpha( x + i, y + i, gr.y - i * 2, fcomp );
  200. }
  201. }
  202. else
  203. {
  204. for( int i = 0; i < br; ++i )
  205. {
  206. Obj.drawLinieH( x + i + 1, y + i, gr.x - i * 2 - 1, farbe );
  207. Obj.drawLinieV( b - i, y + i + 1, gr.y - i * 2 - 2, farbe );
  208. Obj.drawLinieH( x + i + 1, h - i, gr.x - i * 2 - 1, fcomp );
  209. Obj.drawLinieV( x + i, y + i, gr.y - i * 2, fcomp );
  210. }
  211. }
  212. }
  213. else
  214. {
  215. if( alpha )
  216. {
  217. for( int i = 0; i < br; ++i )
  218. {
  219. for( int x = breakOffset; x < gr.x; x += lineLength + breakLength )
  220. Obj.drawLinieHAlpha( x + i + 1, y + i, lineLength - ( x + i + 1 + lineLength > gr.x - i - 1 ? gr.x - i - 1 - ( x + i + 1 + lineLength ) : 0 ), farbe );
  221. for( int x = gr.x - breakOffset - lineLength; x >= 0; x -= lineLength + breakLength )
  222. Obj.drawLinieHAlpha( MAX( x + i + 1, i + 1 ), h - i, lineLength - ( x + i + 1 < i + 1 ? i + 1 - ( x + i + 1 ) : 0 ), fcomp );
  223. for( int y = breakOffset; y < gr.y; y += lineLength + breakLength )
  224. Obj.drawLinieVAlpha( b - i, y + i + 1, lineLength - ( y + i + 1 + lineLength > gr.y - i - 1 ? gr.y - i - 1 - ( y + i + 1 + lineLength ) : 0 ), farbe );
  225. for( int y = gr.y - breakOffset - lineLength; y >= 0; y -= lineLength + breakLength )
  226. Obj.drawLinieVAlpha( x + i, MAX( y + i, i ), lineLength - ( y + i < i ?i - ( y + i ) : 0 ), fcomp );
  227. }
  228. }
  229. else
  230. {
  231. for( int i = 0; i < br; ++i )
  232. {
  233. for( int x = breakOffset; x < gr.x; x += lineLength + breakLength )
  234. Obj.drawLinieH( x + i + 1, y + i, lineLength - ( x + i + 1 + lineLength > gr.x - i - 1 ? gr.x - i - 1 - ( x + i + 1 + lineLength ) : 0 ), farbe );
  235. for( int x = gr.x - breakOffset - lineLength; x >= 0; x -= lineLength + breakLength )
  236. Obj.drawLinieH( MAX( x + i + 1, i + 1 ), h - i, lineLength - ( x + i + 1 < i + 1 ? i + 1 - ( x + i + 1 ) : 0 ), fcomp );
  237. for( int y = breakOffset; y < gr.y; y += lineLength + breakLength )
  238. Obj.drawLinieV( b - i, y + i + 1, lineLength - ( y + i + 1 + lineLength > gr.y - i - 1 ? gr.y - i - 1 - ( y + i + 1 + lineLength ) : 0 ), farbe );
  239. for( int y = gr.y - breakOffset - lineLength; y >= 0; y -= lineLength + breakLength )
  240. Obj.drawLinieV( x + i, MAX( y + i, i ), lineLength - ( y + i < i ? i - ( y + i ) : 0 ), fcomp );
  241. }
  242. }
  243. }
  244. Obj.releaseDrawOptions();
  245. }
  246. Zeichnung *Rahmen3D::dublizieren() const // Kopiert das Zeichnung
  247. {
  248. Rahmen *obj = new Rahmen3D();
  249. obj->setPosition( pos );
  250. obj->setSize( gr );
  251. obj->setMausEreignisParameter( makParam );
  252. obj->setTastaturEreignisParameter( takParam );
  253. obj->setMausEreignis( mak );
  254. obj->setTastaturEreignis( tak );
  255. if( toolTip )
  256. obj->setToolTipZ( (ToolTip*)toolTip->dublizieren() );
  257. obj->setBreaks( breaks );
  258. obj->setAlpha( alpha );
  259. obj->setFarbe( farbe );
  260. obj->setRamenBreite( br );
  261. return obj;
  262. }