Knopf.cpp 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778
  1. #include "Knopf.h"
  2. #include "AlphaFeld.h"
  3. #include "Bild.h"
  4. #include "Datei.h"
  5. #include "DateiSystem.h"
  6. #include "Globals.h"
  7. #include "MausEreignis.h"
  8. #include "Rahmen.h"
  9. #include "Schrift.h"
  10. #include "Scroll.h"
  11. #include "TastaturEreignis.h"
  12. #include "Text.h"
  13. #include "ToolTip.h"
  14. using namespace Framework;
  15. // Inhalt der Knopf Klasse aus Knopf.h
  16. // Konstruktor
  17. Knopf::Knopf()
  18. : TextFeld(),
  19. klickFarbe(0xFF000000),
  20. klickBild(0),
  21. klickBuffer(0),
  22. klickIndex(0)
  23. {
  24. style
  25. = Style::Erlaubt | Style::Buffered | Style::KlickBuffer | Style::Rahmen;
  26. this->setMausEreignis(_ret1ME);
  27. setSchriftFarbe(0xFFFFFFFF);
  28. setSchriftSize(12);
  29. setRahmenBreite(2);
  30. setRahmenFarbe(0xFF00FF00);
  31. setAlphaFeldFarbe(0x5500FF00);
  32. setAlphaFeldStrength(-5);
  33. setKBFarbe(0xFF000000);
  34. setKBStrength(20);
  35. addStyle(TextFeld::Style::Center);
  36. }
  37. // Destruktor
  38. Knopf::~Knopf()
  39. {
  40. if (klickBuffer) klickBuffer->release();
  41. if (klickBild) klickBild->release();
  42. }
  43. void Knopf::doMausEreignis(MausEreignis& me, bool userRet) // Maus Ereignis
  44. {
  45. if (hatStyleNicht(Style::Erlaubt) || !userRet) return;
  46. if (me.id == ME_Betritt)
  47. {
  48. klickIndex = MausStand[M_Links];
  49. if (klickIndex) rend = 1;
  50. }
  51. if (me.id == ME_RLinks || me.id == ME_Leaves)
  52. {
  53. if (klickIndex) rend = 1;
  54. klickIndex = 0;
  55. }
  56. if (!me.verarbeitet)
  57. {
  58. if (me.id == ME_PLinks)
  59. {
  60. klickIndex = 1;
  61. rend = 1;
  62. }
  63. me.verarbeitet = 1;
  64. }
  65. }
  66. // nicht constant
  67. void Knopf::setKlickFarbe(int fc) // setzt die Klick Farbe
  68. {
  69. klickFarbe = fc;
  70. rend = 1;
  71. }
  72. void Knopf::setKlickBild(Bild* bild) // setzt das Klick Bild
  73. {
  74. if (bild)
  75. {
  76. if (!klickBild) klickBild = new Bild();
  77. klickBild->neuBild(bild->getBreite(), bild->getHeight(), 0);
  78. int* buff1 = klickBild->getBuffer();
  79. int* buff2 = bild->getBuffer();
  80. for (int i = 0; i < bild->getBreite() * bild->getHeight(); ++i)
  81. buff1[i] = buff2[i];
  82. bild->release();
  83. rend = 1;
  84. }
  85. }
  86. void Knopf::setKlickBildZ(Bild* bild) // setzt einen Zeiger zum Klick Bild
  87. {
  88. if (klickBild) klickBild->release();
  89. klickBild = bild;
  90. rend = 1;
  91. }
  92. void Knopf::setKBZ(AlphaFeld* af)
  93. {
  94. if (klickBuffer) klickBuffer->release();
  95. klickBuffer = af;
  96. rend = 1;
  97. }
  98. void Knopf::setKBStrength(int st) // setzt die Stärke des Klick Buffers
  99. {
  100. if (!klickBuffer) klickBuffer = new AlphaFeld();
  101. klickBuffer->setStrength(st);
  102. rend = 1;
  103. }
  104. void Knopf::setKBFarbe(int fc) // setzt die Farbe des Klick Buffers
  105. {
  106. if (!klickBuffer) klickBuffer = new AlphaFeld();
  107. klickBuffer->setFarbe(fc);
  108. rend = 1;
  109. }
  110. // Verarbeitet Maus Nachrichten
  111. // te: Das Ereignis, was durch die Tastatur Eingabe ausgelößt wurde
  112. void Knopf::doTastaturEreignis(TastaturEreignis& te) {}
  113. void Knopf::render(Bild& zRObj) // zeichenet nach zRObj
  114. {
  115. if (!hatStyle(Style::Sichtbar)) return;
  116. addStyle(TextFeld::Style::Center);
  117. bool erlaubt = hatStyle(Style::Erlaubt);
  118. bool rA = 0;
  119. if (!hatStyle(Style::Erlaubt))
  120. {
  121. zRObj.setAlpha(0x20);
  122. rA = 1;
  123. }
  124. bool tmpRend = rend;
  125. removeStyle(Style::VScroll | Style::HScroll | Style::Erlaubt);
  126. TextFeld::render(zRObj);
  127. if (!zRObj.setDrawOptions(innenPosition, innenSize))
  128. {
  129. if (rA) zRObj.releaseAlpha();
  130. setStyle(Style::Erlaubt, erlaubt);
  131. return;
  132. }
  133. if (hatStyle(Style::Sichtbar) && klickIndex == 1)
  134. {
  135. if (hatStyle(Style::KlickFarbe))
  136. {
  137. if (hatStyle(Style::KlickAlpha))
  138. zRObj.alphaRegion(0, 0, innenSize.x, innenSize.y, klickFarbe);
  139. else
  140. zRObj.fillRegion(0, 0, innenSize.x, innenSize.y, klickFarbe);
  141. }
  142. if (hatStyle(Style::KlickBild) && klickBild)
  143. {
  144. if (hatStyle(Style::KlickAlpha))
  145. zRObj.alphaBild(0, 0, innenSize.x, innenSize.y, *klickBild);
  146. else
  147. zRObj.drawBild(0, 0, innenSize.x, innenSize.y, *klickBild);
  148. }
  149. if (hatStyle(Style::KlickBuffer) && klickBuffer)
  150. {
  151. klickBuffer->setSize(innenSize.x, innenSize.y);
  152. klickBuffer->render(zRObj);
  153. }
  154. }
  155. if (rA) zRObj.releaseAlpha();
  156. zRObj.releaseDrawOptions();
  157. setStyle(Style::Erlaubt, erlaubt);
  158. rend = tmpRend;
  159. }
  160. // constant
  161. int Knopf::getKlickFarbe() const // gibt getThis der Klick Farbe zurück
  162. {
  163. return klickFarbe;
  164. }
  165. Bild* Knopf::getKlickBild() const // gibt getThis des Klick Bildes zurück
  166. {
  167. if (!klickBild) return 0;
  168. return dynamic_cast<Bild*>(klickBild->getThis());
  169. }
  170. Bild* Knopf::zKlickBild() const // gibt einen Zeiger zum Klick Bild zurück
  171. {
  172. return klickBild;
  173. }
  174. AlphaFeld* Knopf::getKB() const // gibt getThis des Klick Buffers zurück
  175. {
  176. if (!klickBuffer) return 0;
  177. return dynamic_cast<AlphaFeld*>(klickBuffer->getThis());
  178. }
  179. AlphaFeld* Knopf::zKB() const // gibt den Klick Buffer zurück
  180. {
  181. return klickBuffer;
  182. }
  183. int Knopf::getKBFarbe() const // gibt getThis der Farbe des Klick Buffers zurück
  184. {
  185. if (!klickBuffer) return 0;
  186. return klickBuffer->getFarbe();
  187. }
  188. int Knopf::getKBStrength() const // gibt die Stärke des Klickbuffers zurück
  189. {
  190. if (!klickBuffer) return 0;
  191. return klickBuffer->getStrength();
  192. }
  193. Zeichnung* Knopf::dublizieren() const // Erzeugt eine Kopie des Zeichnungs
  194. {
  195. Knopf* obj = new Knopf();
  196. obj->setPosition(pos);
  197. obj->setSize(gr);
  198. obj->setMausEreignisParameter(makParam);
  199. obj->setTastaturEreignisParameter(takParam);
  200. obj->setMausEreignis(mak);
  201. obj->setTastaturEreignis(tak);
  202. if (toolTip) obj->setToolTipZ((ToolTip*)toolTip->dublizieren());
  203. obj->setStyle(style);
  204. obj->setSchriftSize(getSchriftSize());
  205. if (zSchrift()) obj->setSchriftZ(getSchrift());
  206. if (zText()) obj->setText(zText()->getText());
  207. obj->setHintergrundFarbe(hintergrundFarbe);
  208. obj->setSchriftFarbe(getSchriftFarbe());
  209. if (hintergrundFeld)
  210. obj->setAlphaFeldZ((AlphaFeld*)hintergrundFeld->dublizieren());
  211. if (rahmen) obj->setRahmenZ((Rahmen*)rahmen->dublizieren());
  212. if (hintergrundBild)
  213. obj->setHintergrundBild(
  214. dynamic_cast<Bild*>(hintergrundBild->getThis()));
  215. if (vertikalScrollBar)
  216. {
  217. obj->setVertikalKlickScroll(vertikalScrollBar->getKlickScroll());
  218. obj->setVertikalScrollPos(vertikalScrollBar->getScroll());
  219. obj->setVertikalScrollFarbe(
  220. vertikalScrollBar->getFarbe(), vertikalScrollBar->getBgFarbe());
  221. }
  222. if (horizontalScrollBar)
  223. {
  224. obj->setHorizontalKlickScroll(horizontalScrollBar->getKlickScroll());
  225. obj->setHorizontalScrollPos(horizontalScrollBar->getScroll());
  226. obj->setHorizontalScrollFarbe(
  227. horizontalScrollBar->getFarbe(), horizontalScrollBar->getBgFarbe());
  228. }
  229. obj->setSchowChar(getShowChar());
  230. // obj->setAuswahl( getSelectionPos(), getCursorPos() );
  231. obj->setKlickFarbe(klickFarbe);
  232. if (klickBild) obj->setKlickBild(dynamic_cast<Bild*>(klickBild->getThis()));
  233. if (klickBuffer) obj->setKBZ((AlphaFeld*)klickBuffer->dublizieren());
  234. return obj;
  235. }
  236. // Inhalt der KontrollKnopf Klasse aus Knopf.h
  237. // Konstruktor
  238. KontrollKnopf::KontrollKnopf()
  239. : ZeichnungHintergrund(),
  240. txt(0),
  241. sTxt(0),
  242. sBgF(0),
  243. kBgF(0),
  244. sBgB(0),
  245. kBgB(0),
  246. sAf(0),
  247. kAf(0),
  248. kasten(0),
  249. sKasten(0),
  250. textRd(0),
  251. sF(0xFFFFFFFF),
  252. sGr(12)
  253. {
  254. style = Style::Erlaubt | Style::KlickBuffer;
  255. setKAFFarbe(0x00007500);
  256. setKAFStrength(-30);
  257. }
  258. // Destruktor
  259. KontrollKnopf::~KontrollKnopf()
  260. {
  261. if (txt) txt->release();
  262. if (sTxt) sTxt->release();
  263. if (sBgB) sBgB->release();
  264. if (kBgB) kBgB->release();
  265. if (sAf) sAf->release();
  266. if (kAf) kAf->release();
  267. if (kasten) kasten->release();
  268. if (sKasten) sKasten->release();
  269. if (textRd) textRd->release();
  270. }
  271. void KontrollKnopf::doMausEreignis(
  272. MausEreignis& me, bool userRet) // Nachrichten verarbeitung
  273. {
  274. if (me.id == ME_Leaves || !userRet) style &= ~Style::MausKlick;
  275. if (hatStyleNicht(TextFeld::Style::Erlaubt) || !userRet) return;
  276. if (me.id == ME_Betritt && hatStyle(Style::MausKlick) != MausStand[M_Links])
  277. setStyle(Style::MausKlick, MausStand[M_Links]);
  278. if (me.id == ME_PLinks) addStyle(Style::MausKlick);
  279. if (me.id == ME_RLinks)
  280. {
  281. removeStyle(Style::MausKlick);
  282. setStyle(Style::Selected, !hatStyle(Style::Selected));
  283. }
  284. me.verarbeitet = 1;
  285. }
  286. // nicht constant
  287. void KontrollKnopf::setTextZ(Text* txt) // setzt den Text
  288. {
  289. if (this->txt) this->txt->release();
  290. this->txt = txt;
  291. rend = 1;
  292. }
  293. void KontrollKnopf::setText(Text* txt)
  294. {
  295. if (!this->txt) this->txt = new Text();
  296. this->txt->setText(txt->getText());
  297. txt->release();
  298. rend = 1;
  299. }
  300. void KontrollKnopf::setText(const char* txt)
  301. {
  302. if (!this->txt) this->txt = new Text();
  303. this->txt->setText(txt);
  304. rend = 1;
  305. }
  306. void KontrollKnopf::setSTextZ(Text* txt) // setzt den Text bei Selectiert
  307. {
  308. if (sTxt) sTxt->release();
  309. sTxt = txt;
  310. rend = 1;
  311. }
  312. void KontrollKnopf::setSText(Text* txt)
  313. {
  314. if (!sTxt) sTxt = new Text();
  315. sTxt->setText(txt->getText());
  316. txt->release();
  317. rend = 1;
  318. }
  319. void KontrollKnopf::setSText(const char* txt)
  320. {
  321. if (!sTxt) sTxt = new Text();
  322. sTxt->setText(txt);
  323. rend = 1;
  324. }
  325. void KontrollKnopf::setTextRendererZ(TextRenderer* textRd)
  326. {
  327. if (this->textRd) this->textRd->release();
  328. this->textRd = textRd;
  329. }
  330. void KontrollKnopf::setSchriftZ(Schrift* schrift) // setzt die Schrift
  331. {
  332. if (!this->textRd)
  333. textRd = new TextRenderer(schrift);
  334. else
  335. textRd->setSchriftZ(schrift);
  336. rend = 1;
  337. }
  338. void KontrollKnopf::setSFarbe(int f) // setzt die Schrift Farbe
  339. {
  340. sF = f;
  341. rend = 1;
  342. }
  343. void KontrollKnopf::setSSize(int gr) // setzt die Schrift Größe
  344. {
  345. sGr = gr;
  346. rend = 1;
  347. }
  348. void KontrollKnopf::setSBgFarbe(int f) // setzt die Select Hintergrundfarbe
  349. {
  350. sBgF = f;
  351. rend = 1;
  352. }
  353. void KontrollKnopf::setKBgFarbe(int f) // setzt die Klick Hintergrundfarbe
  354. {
  355. kBgF = f;
  356. rend = 1;
  357. }
  358. void KontrollKnopf::setSBgBildZ(Bild* b) // setzt das Select Hintergrundbild
  359. {
  360. if (sBgB) sBgB->release();
  361. sBgB = b;
  362. rend = 1;
  363. }
  364. void KontrollKnopf::setSBgBild(Bild* b)
  365. {
  366. if (!sBgB) sBgB = new Bild();
  367. sBgB->neuBild(b->getBreite(), b->getHeight(), 0);
  368. sBgB->drawBild(0, 0, b->getBreite(), b->getHeight(), *b);
  369. b->release();
  370. rend = 1;
  371. }
  372. void KontrollKnopf::setKBgBildZ(Bild* b) // setzt das Klick Hintergrundbild
  373. {
  374. if (kBgB) kBgB->release();
  375. kBgB = b;
  376. rend = 1;
  377. }
  378. void KontrollKnopf::setKBgBild(Bild* b)
  379. {
  380. if (!kBgB) kBgB = new Bild();
  381. kBgB->neuBild(b->getBreite(), b->getHeight(), 0);
  382. kBgB->drawBild(0, 0, b->getBreite(), b->getHeight(), *b);
  383. b->release();
  384. rend = 1;
  385. }
  386. void KontrollKnopf::setSAlphaFeldZ(AlphaFeld* af) // setzt das Select Alpha Feld
  387. {
  388. if (sAf) sAf->release();
  389. sAf = af;
  390. rend = 1;
  391. }
  392. void KontrollKnopf::setSAFFarbe(int f) // setzt die Select Alphafeld Farbe
  393. {
  394. if (!sAf) sAf = new AlphaFeld();
  395. sAf->setFarbe(f);
  396. rend = 1;
  397. }
  398. void KontrollKnopf::setSAFStrength(int st) // setzt die Select AlphaFeld Stärke
  399. {
  400. if (!sAf) sAf = new AlphaFeld();
  401. sAf->setStrength(st);
  402. rend = 1;
  403. }
  404. void KontrollKnopf::setKAlphaFeldZ(AlphaFeld* af) // setzt das Klick Alpha Feld
  405. {
  406. if (kAf) kAf->release();
  407. kAf = af;
  408. rend = 1;
  409. }
  410. void KontrollKnopf::setKAFFarbe(int f) // setzt die Klick Alphafeld Farbe
  411. {
  412. if (!kAf) kAf = new AlphaFeld();
  413. kAf->setFarbe(f);
  414. rend = 1;
  415. }
  416. void KontrollKnopf::setKAFStrength(int st) // setzt die Klick AlphaFeld Stärke
  417. {
  418. if (!kAf) kAf = new AlphaFeld();
  419. kAf->setStrength(st);
  420. rend = 1;
  421. }
  422. void KontrollKnopf::loadData(LTDBDatei* dat) // läht die Systembilder
  423. {
  424. if (DateiExistiert(new Text("data/normal.ltdb"))
  425. && (!dat || !dat->istOffen()))
  426. {
  427. LTDBDatei* dat = new LTDBDatei();
  428. dat->setDatei(new Text("data/normal.ltdb"));
  429. dat->leseDaten(0);
  430. kasten = dat->laden(0, new Text("kasten.gif"));
  431. sKasten = dat->laden(0, new Text("skasten.gif"));
  432. dat->release();
  433. }
  434. else
  435. {
  436. kasten = dat->laden(0, new Text("kasten.gif"));
  437. sKasten = dat->laden(0, new Text("skasten.gif"));
  438. }
  439. rend = 1;
  440. }
  441. void KontrollKnopf::loadData(const char* ltdb) // läht die Systembilder
  442. {
  443. if (DateiExistiert(new Text(ltdb)))
  444. {
  445. LTDBDatei* dat = new LTDBDatei();
  446. dat->setDatei(new Text(ltdb));
  447. dat->leseDaten(0);
  448. kasten = dat->laden(0, new Text("kasten.gif"));
  449. sKasten = dat->laden(0, new Text("skasten.gif"));
  450. dat->release();
  451. rend = 1;
  452. }
  453. }
  454. void KontrollKnopf::render(Bild& zRObj) // zeichnet nach zRObj
  455. {
  456. if (!hatStyle(Style::Sichtbar)) return;
  457. removeStyle(Style::VScroll | Style::HScroll);
  458. ZeichnungHintergrund::render(zRObj);
  459. lockZeichnung();
  460. if (!zRObj.setDrawOptions(innenPosition, innenSize))
  461. {
  462. unlockZeichnung();
  463. return;
  464. }
  465. if (hatStyle(Style::MausKlick))
  466. {
  467. if (hatStyle(Style::KlickFarbe))
  468. {
  469. if (hatStyle(Style::KlickAlpha))
  470. zRObj.alphaRegion(0, 0, innenSize.x, innenSize.y, kBgF);
  471. else
  472. zRObj.fillRegion(0, 0, innenSize.x, innenSize.y, kBgF);
  473. }
  474. if (hatStyle(Style::KlickBild) && kBgB)
  475. {
  476. if (hatStyle(Style::KlickAlpha))
  477. zRObj.alphaBild(0, 0, innenSize.x, innenSize.y, *kBgB);
  478. else
  479. zRObj.drawBild(0, 0, innenSize.x, innenSize.y, *kBgB);
  480. }
  481. if (hatStyle(Style::KlickBuffer) && kAf)
  482. {
  483. kAf->setSize(innenSize.x, innenSize.y);
  484. kAf->render(zRObj);
  485. }
  486. int kbr = 0;
  487. if (hatStyle(Style::Selected) && sKasten)
  488. {
  489. if (sTxt && textRd)
  490. zRObj.drawBild(0,
  491. (gr.y / 2 - sKasten->getHeight() / 2) < 0
  492. ? 0
  493. : (gr.y / 2 - sKasten->getHeight() / 2),
  494. innenSize.x,
  495. innenSize.y,
  496. *sKasten);
  497. else
  498. zRObj.drawBild(gr.x / 2 - sKasten->getBreite() / 2,
  499. (gr.y / 2 - sKasten->getHeight() / 2) < 0
  500. ? 0
  501. : (gr.y / 2 - sKasten->getHeight() / 2),
  502. innenSize.x,
  503. innenSize.y,
  504. *sKasten);
  505. kbr = sKasten->getBreite();
  506. if (sTxt && textRd)
  507. {
  508. textRd->setSchriftSize(sGr);
  509. textRd->renderText(kbr + 5,
  510. gr.y / 2 - textRd->getTextHeight(sTxt->getText()) / 2,
  511. sTxt->getText(),
  512. zRObj,
  513. sF);
  514. }
  515. }
  516. else if (kasten)
  517. {
  518. if (txt && textRd)
  519. zRObj.drawBild(0,
  520. (gr.y / 2 - kasten->getHeight() / 2) < 0
  521. ? 0
  522. : (gr.y / 2 - kasten->getHeight() / 2),
  523. innenSize.x,
  524. innenSize.y,
  525. *kasten);
  526. else
  527. zRObj.drawBild(gr.x / 2 - kasten->getBreite() / 2,
  528. (gr.y / 2 - kasten->getHeight() / 2) < 0
  529. ? 0
  530. : (gr.y / 2 - kasten->getHeight() / 2),
  531. innenSize.x,
  532. innenSize.y,
  533. *kasten);
  534. kbr = kasten->getBreite();
  535. if (txt && textRd)
  536. {
  537. textRd->setSchriftSize(sGr);
  538. textRd->renderText(kbr + 5,
  539. gr.y / 2 - textRd->getTextHeight(txt->getText()) / 2,
  540. txt->getText(),
  541. zRObj,
  542. sF);
  543. }
  544. }
  545. }
  546. else if (hatStyle(Style::Selected))
  547. {
  548. if (hatStyle(Style::SelectFarbe))
  549. {
  550. if (hatStyle(Style::SelectAlpha))
  551. zRObj.alphaRegion(0, 0, innenSize.x, innenSize.y, sBgF);
  552. else
  553. zRObj.fillRegion(0, 0, innenSize.x, innenSize.y, sBgF);
  554. }
  555. if (hatStyle(Style::SelectBild) && sBgB)
  556. {
  557. if (hatStyle(Style::SelectAlpha))
  558. zRObj.alphaBild(0, 0, innenSize.x, innenSize.y, *sBgB);
  559. else
  560. zRObj.drawBild(0, 0, innenSize.x, innenSize.y, *sBgB);
  561. }
  562. if (hatStyle(Style::SelectBuffer) && sAf)
  563. {
  564. sAf->setSize(innenSize.x, innenSize.y);
  565. sAf->render(zRObj);
  566. }
  567. int kbr = 0;
  568. if (sKasten)
  569. {
  570. if (sTxt && textRd)
  571. zRObj.drawBild(0,
  572. (gr.y / 2 - sKasten->getHeight() / 2) < 0
  573. ? 0
  574. : (gr.y / 2 - sKasten->getHeight() / 2),
  575. innenSize.x,
  576. innenSize.y,
  577. *sKasten);
  578. else
  579. zRObj.drawBild(gr.x / 2 - sKasten->getBreite() / 2,
  580. (gr.y / 2 - sKasten->getHeight() / 2) < 0
  581. ? 0
  582. : (gr.y / 2 - sKasten->getHeight() / 2),
  583. innenSize.x,
  584. innenSize.y,
  585. *sKasten);
  586. kbr = sKasten->getBreite();
  587. }
  588. if (sTxt && textRd)
  589. {
  590. textRd->setSchriftSize(sGr);
  591. textRd->renderText(kbr + 5,
  592. gr.y / 2 - textRd->getTextHeight(sTxt->getText()) / 2,
  593. sTxt->getText(),
  594. zRObj,
  595. sF);
  596. }
  597. }
  598. else
  599. {
  600. int kbr = 0;
  601. if (kasten)
  602. {
  603. if (txt && textRd)
  604. zRObj.drawBild(0,
  605. (gr.y / 2 - kasten->getHeight() / 2) < 0
  606. ? 0
  607. : (gr.y / 2 - kasten->getHeight() / 2),
  608. innenSize.x,
  609. innenSize.y,
  610. *kasten);
  611. else
  612. zRObj.drawBild(gr.x / 2 - kasten->getBreite() / 2,
  613. (gr.y / 2 - kasten->getHeight() / 2) < 0
  614. ? 0
  615. : (gr.y / 2 - kasten->getHeight() / 2),
  616. innenSize.x,
  617. innenSize.y,
  618. *kasten);
  619. kbr = kasten->getBreite();
  620. }
  621. if (txt && textRd)
  622. {
  623. textRd->setSchriftSize(sGr);
  624. textRd->renderText(kbr + 5,
  625. gr.y / 2 - textRd->getTextHeight(txt->getText()) / 2,
  626. txt->getText(),
  627. zRObj,
  628. sF);
  629. }
  630. }
  631. zRObj.releaseDrawOptions();
  632. unlockZeichnung();
  633. }
  634. // constant
  635. Text* KontrollKnopf::getText() const // gibt den Text zurück
  636. {
  637. return txt ? dynamic_cast<Text*>(txt->getThis()) : 0;
  638. }
  639. Text* KontrollKnopf::zText() const
  640. {
  641. return txt;
  642. }
  643. Text* KontrollKnopf::getSText() const // gibt den Select Text zurück
  644. {
  645. return sTxt ? dynamic_cast<Text*>(sTxt->getThis()) : 0;
  646. }
  647. Text* KontrollKnopf::zSText() const
  648. {
  649. return sTxt;
  650. }
  651. Schrift* KontrollKnopf::getSchrift() const // gibt die Schrift zurück
  652. {
  653. return textRd ? textRd->getSchrift() : 0;
  654. }
  655. Schrift* KontrollKnopf::zSchrift() const
  656. {
  657. return textRd ? textRd->zSchrift() : 0;
  658. }
  659. int KontrollKnopf::getSFarbe() const // gibt die Schrift Farbe zurück
  660. {
  661. return sF;
  662. }
  663. int KontrollKnopf::getSSize() const // gibt die Schrift Größe zurück
  664. {
  665. return sGr;
  666. }
  667. int KontrollKnopf::getSBgFarbe()
  668. const // gibt die Select Hintergrundfarbe zurück
  669. {
  670. return sBgF;
  671. }
  672. int KontrollKnopf::getKBgFarbe() const // gibt die Klick Hintergrundfarbe zurück
  673. {
  674. return kBgF;
  675. }
  676. Bild* KontrollKnopf::getSBgBild()
  677. const // gibt das Select Hintergrundbild zurück
  678. {
  679. return sBgB ? dynamic_cast<Bild*>(sBgB->getThis()) : 0;
  680. }
  681. Bild* KontrollKnopf::zSBgBild() const
  682. {
  683. return sBgB;
  684. }
  685. Bild* KontrollKnopf::getKBgBild() const // gibt das Klick Hintergrundbild zurück
  686. {
  687. return kBgB ? dynamic_cast<Bild*>(kBgB->getThis()) : 0;
  688. }
  689. Bild* KontrollKnopf::zKBgBild() const
  690. {
  691. return kBgB;
  692. }
  693. AlphaFeld*
  694. KontrollKnopf::getSAlphaFeld() const // gibt das Select AlphaFeld zurück
  695. {
  696. return sAf ? dynamic_cast<AlphaFeld*>(sAf->getThis()) : 0;
  697. }
  698. AlphaFeld* KontrollKnopf::zSAlphaFeld() const
  699. {
  700. return sAf;
  701. }
  702. AlphaFeld*
  703. KontrollKnopf::getKAlphaFeld() const // gibt das Klick AlphaFeld zurück
  704. {
  705. if (!kAf) return 0;
  706. return dynamic_cast<AlphaFeld*>(kAf->getThis());
  707. }
  708. AlphaFeld* KontrollKnopf::zKAlphaFeld() const
  709. {
  710. return kAf;
  711. }