Fortschritt.cpp 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. #include "Fortschritt.h"
  2. #include "Rahmen.h"
  3. #include "AlphaFeld.h"
  4. #include "Bild.h"
  5. #include "Schrift.h"
  6. #include "Scroll.h"
  7. #include "Text.h"
  8. using namespace Framework;
  9. // Inhalt der FBalken Klasse aus Fortschritt.h
  10. // Konstruktor
  11. FBalken::FBalken()
  12. : ZeichnungHintergrund(),
  13. maxAk( 0 ),
  14. ak( 0 ),
  15. fRahmen( 0 ),
  16. fBuffer( 0 ),
  17. fBgF( 0xFF000000 ),
  18. fBgBild( 0 ),
  19. schrift( 0 ),
  20. schriftFarbe( 0 ),
  21. schriftGröße( 0 ),
  22. ref( 1 )
  23. {
  24. style = 0;
  25. }
  26. // Destructor
  27. FBalken::~FBalken()
  28. {
  29. if( rahmen )
  30. rahmen->release();
  31. if( fRahmen )
  32. fRahmen->release();
  33. if( fBuffer )
  34. fBuffer->release();
  35. if( fBgBild )
  36. fBgBild->release();
  37. if( schrift )
  38. schrift->release();
  39. }
  40. // nicht constant
  41. void FBalken::setAktionAnzahl( __int64 ak ) // setzt die anzahl der Aktionen
  42. {
  43. maxAk = ak;
  44. rend = 1;
  45. }
  46. void FBalken::aktionPlus() // eine Aktion ist fertig
  47. {
  48. ++ak;
  49. if( ak > maxAk )
  50. ak = maxAk;
  51. rend = 1;
  52. }
  53. void FBalken::aktionPlus( __int64 aktionen ) // mehrere Aktionen sind fertig
  54. {
  55. ak += aktionen;
  56. if( ak > maxAk )
  57. ak = maxAk;
  58. rend = 1;
  59. }
  60. void FBalken::reset() // setzt die fertigen Aktionen zurück
  61. {
  62. ak = 0;
  63. rend = 1;
  64. }
  65. void FBalken::setFRahmenZ( LRahmen *ram ) // setzt einen Zeiger zum Fertig Rahmen
  66. {
  67. if( fRahmen )
  68. fRahmen->release();
  69. fRahmen = ram;
  70. rend = 1;
  71. }
  72. void FBalken::setFRFarbe( int f ) // setzt die Fertig Rahmen Farbe
  73. {
  74. if( !fRahmen )
  75. fRahmen = new LRahmen();
  76. fRahmen->setFarbe( f );
  77. rend = 1;
  78. }
  79. void FBalken::setFRBreite( int br ) // setzt die Fertig Rahmen Breite
  80. {
  81. if( !fRahmen )
  82. fRahmen = new LRahmen();
  83. fRahmen->setRamenBreite( br );
  84. rend = 1;
  85. }
  86. void FBalken::setFAlphaFeldZ( AlphaFeld *af ) // setzt einen Zeiger zum Fertig Alpha Feld
  87. {
  88. if( fBuffer )
  89. fBuffer->release();
  90. fBuffer = af;
  91. rend = 1;
  92. }
  93. void FBalken::setFAFFarbe( int f ) // setzt die Fertig Alpha Feld Farbe
  94. {
  95. if( !fBuffer )
  96. fBuffer = new AlphaFeld();
  97. fBuffer->setFarbe( f );
  98. rend = 1;
  99. }
  100. void FBalken::setFAFStärke( int st ) // setzt die Stärke des Fertig Alpha Feldes
  101. {
  102. if( !fBuffer )
  103. fBuffer = new AlphaFeld();
  104. fBuffer->setStärke( st );
  105. rend = 1;
  106. }
  107. void FBalken::setFBgFarbe( int f ) // setzt einen Zeiger zur Fertig Hintergrund Farbe
  108. {
  109. fBgF = f;
  110. rend = 1;
  111. }
  112. void FBalken::setFBgBildZ( Bild *b ) // setzt das Fertig Hintergrund Bild
  113. {
  114. if( fBgBild )
  115. fBgBild->release();
  116. fBgBild = b;
  117. rend = 1;
  118. }
  119. void FBalken::setFBgBild( Bild *b ) // kopiert in das Fertig Hintergrund Bild
  120. {
  121. if( !fBgBild )
  122. fBgBild = new Bild();
  123. fBgBild->neuBild( b->getBreite(), b->getHöhe(), 0 );
  124. fBgBild->drawBild( 0, 0, b->getBreite(), b->getHöhe(), *b );
  125. b->release();
  126. rend = 1;
  127. }
  128. void FBalken::setSchriftZ( Schrift *s ) // setzt die Schrift
  129. {
  130. if( schrift )
  131. schrift->release();
  132. schrift = s;
  133. rend = 1;
  134. }
  135. void FBalken::setSFarbe( int f ) // setzt die Schrift Farbe
  136. {
  137. schriftFarbe = f;
  138. rend = 1;
  139. }
  140. void FBalken::setSGröße( unsigned char gr ) // setzt die Schrift größe
  141. {
  142. schriftGröße = gr;
  143. rend = 1;
  144. }
  145. void FBalken::render( Bild &zRObj ) // zeichnet nach zRObj
  146. {
  147. if( !hatStyle( Style::Sichtbar ) )
  148. return;
  149. lockZeichnung();
  150. löscheStyle( Style::VScroll | Style::HScroll );
  151. __super::render( zRObj );
  152. if( !zRObj.setDrawOptions( pos, gr ) )
  153. {
  154. unlockZeichnung();
  155. return;
  156. }
  157. int xx = 0;
  158. int yy = 0;
  159. int b = gr.x;
  160. int h = gr.y;
  161. if( hatStyle( Style::L_R ) )
  162. b = (int)( ( gr.x / 100.0 ) * getProzent() );
  163. else if( hatStyle( Style::R_L ) )
  164. {
  165. b = (int)( ( gr.x / 100.0 ) * getProzent() );
  166. xx -= b;
  167. }
  168. else if( hatStyle( Style::O_U ) )
  169. h = (int)( ( gr.y / 100.0 ) * getProzent() );
  170. else if( hatStyle( Style::U_O ) )
  171. {
  172. h = (int)( ( gr.y / 100.0 ) * getProzent() );
  173. yy -= h;
  174. }
  175. if( maxAk == 0 )
  176. b = 0, h = 0;
  177. if( !zRObj.setDrawOptions( xx, yy, b, h ) )
  178. {
  179. zRObj.releaseDrawOptions();
  180. unlockZeichnung();
  181. return;
  182. }
  183. int rbr = 0;
  184. if( hatStyle( Style::FRahmen ) && fRahmen )
  185. {
  186. fRahmen->setGröße( b, h );
  187. fRahmen->render( zRObj );
  188. rbr = fRahmen->getRBreite();
  189. }
  190. if( hatStyle( Style::FFarbe ) )
  191. {
  192. if( hatStyle( Style::FAlpha ) )
  193. zRObj.alphaRegion( rbr, rbr, b - rbr * 2, h - rbr * 2, fBgF );
  194. else
  195. zRObj.füllRegion( rbr, rbr, b - rbr * 2, h - rbr * 2, fBgF );
  196. }
  197. if( hatStyle( Style::FBild ) && fBgBild )
  198. {
  199. if( hatStyle( Style::FAlpha ) )
  200. zRObj.alphaBildSkall( rbr, rbr, b - rbr * 2, h - rbr * 2, *fBgBild );
  201. else
  202. zRObj.drawBildSkall( rbr, rbr, b - rbr * 2, h - rbr * 2, *fBgBild );
  203. }
  204. if( hatStyle( Style::FBuffered ) && fBuffer )
  205. {
  206. fBuffer->setGröße( b - rbr * 2, h - rbr * 2 );
  207. fBuffer->render( zRObj );
  208. }
  209. zRObj.releaseDrawOptions();
  210. if( hatStyle( Style::Prozent ) && schrift )
  211. {
  212. schrift->setSchriftGröße( schriftGröße );
  213. Text txt;
  214. txt.anhängen( (int)getProzent() );
  215. txt.anhängen( "%" );
  216. schrift->setDrawPosition( rbr + ( gr.x - rbr * 2 ) / 2 - schrift->getTextBreite( &txt ) / 2, rbr + ( gr.y - rbr * 2 ) / 2 - schrift->getTextHöhe( &txt ) / 2 );
  217. schrift->renderText( &txt, zRObj, schriftFarbe );
  218. }
  219. zRObj.releaseDrawOptions();
  220. unlockZeichnung();
  221. }
  222. // constant
  223. __int64 FBalken::getAktionAnzahl() const // gibt die Anzahl der Aktionen zurück
  224. {
  225. return maxAk;
  226. }
  227. double FBalken::getProzent() const // gibt die momentane Prozentzahl zurück
  228. {
  229. if( !maxAk )
  230. return 0;
  231. return ak / ( maxAk / 100.0 );
  232. }
  233. __int64 FBalken::getAktion() const // gibt die fertigen Aktionen zurück
  234. {
  235. return ak;
  236. }
  237. LRahmen *FBalken::getFRahmen() const // gibt den Fertig Rahmen zurück
  238. {
  239. if( fRahmen )
  240. return fRahmen->getThis();
  241. return 0;
  242. }
  243. LRahmen *FBalken::zFRahmen() const
  244. {
  245. return fRahmen;
  246. }
  247. AlphaFeld *FBalken::getFAlphaFeld() const // gibt das Fertig Alpha Feld zurück
  248. {
  249. if( fBuffer )
  250. return fBuffer->getThis();
  251. return 0;
  252. }
  253. AlphaFeld *FBalken::zFAlphaFeld() const
  254. {
  255. return fBuffer;
  256. }
  257. int FBalken::getFBgFarbe() const // gibt die Fertig Hintergrund Farbe zurück
  258. {
  259. return fBgF;
  260. }
  261. Bild *FBalken::getFBgBild() const // gibt das Fertig Hintergrund Bild zurück
  262. {
  263. if( fBgBild )
  264. return fBgBild->getThis();
  265. return 0;
  266. }
  267. Bild *FBalken::zFBgBild() const
  268. {
  269. return fBgBild;
  270. }
  271. Schrift *FBalken::getSchrift() const // gibt die Schrift zurück
  272. {
  273. if( schrift )
  274. return schrift->getThis();
  275. return 0;
  276. }
  277. Schrift *FBalken::zSchrift() const
  278. {
  279. return schrift;
  280. }
  281. int FBalken::getSFarbe() const // gibt die Schrift Farbe zurück
  282. {
  283. return schriftFarbe;
  284. }
  285. // Reference Counting
  286. FBalken *FBalken::getThis()
  287. {
  288. ++ref;
  289. return this;
  290. }
  291. FBalken *FBalken::release()
  292. {
  293. --ref;
  294. if( ref == 0 )
  295. delete this;
  296. return 0;
  297. }