Fortschritt.cpp 7.7 KB

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