Zeichnung.cpp 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884
  1. #include "Zeichnung.h"
  2. #include "MausEreignis.h"
  3. #include "TastaturEreignis.h"
  4. #include "Globals.h"
  5. #include "ToolTip.h"
  6. #include "Scroll.h"
  7. #include "Text.h"
  8. #include "Rahmen.h"
  9. #include "AlphaFeld.h"
  10. #include "Bild.h"
  11. #include "TextFeld.h"
  12. #include "UIInitialization.h"
  13. #include "Schrift.h"
  14. #ifdef WIN32
  15. #include <Windows.h>
  16. #endif
  17. using namespace Framework;
  18. // Inhalt der Zeichnung Klasse aus Zeichnung.h
  19. // Konstruktor
  20. Zeichnung::Zeichnung()
  21. : pos( 0, 0 ),
  22. gr( 0, 0 ),
  23. makParam( 0 ),
  24. takParam( 0 ),
  25. mak( 0 ),
  26. tak( 0 ),
  27. nmakParam( 0 ),
  28. ntakParam( 0 ),
  29. nMak( 0 ),
  30. nTak( 0 ),
  31. mausIn( 0 ),
  32. toolTip( 0 ),
  33. style( 0 ),
  34. rend( 0 ),
  35. ref( 1 )
  36. {}
  37. // Destruktor
  38. Zeichnung::~Zeichnung()
  39. {
  40. if( toolTip )
  41. toolTip->release();
  42. }
  43. // Übergibt einen Void Funktionspointer auf eine Aktion die einmalig vom Hauptthread ausgeführt werden soll. (Passiert nach dem Tick)
  44. void Zeichnung::postAction( std::function< void() > action )
  45. {
  46. actions.push( action );
  47. }
  48. // nicht constant
  49. void Zeichnung::setRender()
  50. {
  51. rend = 1;
  52. }
  53. void Zeichnung::setToolTipText( const char *txt, Bildschirm *zScreen, Schrift *zSchrift )
  54. {
  55. if( !txt )
  56. toolTip = (ToolTip*)toolTip->release();
  57. else
  58. {
  59. if( !toolTip )
  60. toolTip = new ToolTip( zScreen );
  61. UIInit init = defaultUI( zSchrift, zScreen );
  62. TextFeld *t = init.createTextFeld( init.initParam );
  63. t->setText( txt );
  64. t->setSize( t->zTextRenderer()->getTextBreite( txt ), t->zTextRenderer()->getTextHeight( txt ) );
  65. toolTip->addMember( t );
  66. }
  67. }
  68. // legt den tooltip fest
  69. // tt: der tooltip
  70. void Zeichnung::setToolTipZ( ToolTip *tt )
  71. {
  72. if( toolTip )
  73. toolTip->release();
  74. toolTip = tt;
  75. }
  76. void Zeichnung::lockZeichnung()
  77. {
  78. cs.lock();
  79. }
  80. void Zeichnung::unlockZeichnung()
  81. {
  82. cs.unlock();
  83. }
  84. void Zeichnung::setMausEreignisParameter( void *p ) // setzt den Parameter vom Maus Ereignis
  85. {
  86. makParam = p;
  87. }
  88. void Zeichnung::setTastaturEreignisParameter( void *p ) // setzt den Parameter vom Tastatur Ereignis
  89. {
  90. takParam = p;
  91. }
  92. void Zeichnung::setMausEreignis( MausAktion ak ) // setzt das Maus Ereignis
  93. {
  94. mak = ak;
  95. }
  96. void Zeichnung::setTastaturEreignis( TastaturAktion ak ) // setzt das TastaturEreignis
  97. {
  98. tak = ak;
  99. }
  100. void Zeichnung::setNMausEreignisParameter( void *p ) // setzt den Parameter vom Maus Ereignis
  101. {
  102. nmakParam = p;
  103. }
  104. void Zeichnung::setNTastaturEreignisParameter( void *p ) // setzt den Parameter vom Tastatur Ereignis
  105. {
  106. ntakParam = p;
  107. }
  108. void Zeichnung::setNMausEreignis( MausAktion ak ) // setzt das Maus Ereignis
  109. {
  110. nMak = ak;
  111. }
  112. void Zeichnung::setNTastaturEreignis( TastaturAktion ak ) // setzt das TastaturEreignis
  113. {
  114. nTak = ak;
  115. }
  116. void Zeichnung::doMausEreignis( MausEreignis &me ) // ruft Mak auf
  117. {
  118. 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 ) )
  119. {
  120. if( mausIn )
  121. {
  122. mausIn = 0;
  123. if( toolTip )
  124. toolTip->setMausIn( 0 );
  125. MausEreignis me2;
  126. me2.id = ME_Leaves;
  127. me2.mx = me.mx;
  128. me2.my = me.my;
  129. me2.verarbeitet = 0;
  130. doMausEreignis( me2 );
  131. }
  132. return;
  133. }
  134. if( !mausIn && me.id != ME_Leaves )
  135. {
  136. mausIn = 1;
  137. if( toolTip )
  138. toolTip->setMausIn( 1 );
  139. MausEreignis me2;
  140. me2.id = ME_Betritt;
  141. me2.mx = me.mx;
  142. me2.my = me.my;
  143. me2.verarbeitet = 0;
  144. doMausEreignis( me2 );
  145. }
  146. me.mx -= pos.x, me.my -= pos.y;
  147. if( mak )
  148. me.verarbeitet |= mak( makParam, this, me );
  149. if( nMak && me.verarbeitet )
  150. me.verarbeitet = nMak( nmakParam, this, me );
  151. me.mx += pos.x, me.my += pos.y;
  152. }
  153. void Zeichnung::doTastaturEreignis( TastaturEreignis &te ) // ruft Tak auf
  154. {
  155. if( te.verarbeitet )
  156. return;
  157. if( tak )
  158. te.verarbeitet |= tak( takParam, this, te );
  159. if( nTak && te.verarbeitet )
  160. te.verarbeitet = nTak( ntakParam, this, te );
  161. }
  162. void Zeichnung::setPosition( const Punkt &pos ) // setzt die position
  163. {
  164. lockZeichnung();
  165. if( this->pos != pos )
  166. rend = 1;
  167. this->pos = pos;
  168. unlockZeichnung();
  169. }
  170. void Zeichnung::setX( int xPos )
  171. {
  172. lockZeichnung();
  173. if( pos.x != xPos )
  174. {
  175. rend = 1;
  176. pos.x = xPos;
  177. }
  178. unlockZeichnung();
  179. }
  180. void Zeichnung::setY( int yPos )
  181. {
  182. lockZeichnung();
  183. if( pos.y != yPos )
  184. {
  185. rend = 1;
  186. pos.y = yPos;
  187. }
  188. unlockZeichnung();
  189. }
  190. void Zeichnung::setSize( const Punkt &gr ) // setzt die Größe
  191. {
  192. lockZeichnung();
  193. if( this->gr != gr )
  194. rend = 1;
  195. this->gr = gr;
  196. unlockZeichnung();
  197. }
  198. void Zeichnung::setPosition( int x, int y ) // setzt die position
  199. {
  200. setPosition( Punkt( x, y ) );
  201. }
  202. void Zeichnung::setSize( int x, int y ) // setzt die Größe
  203. {
  204. setSize( Punkt( x, y ) );
  205. }
  206. bool Zeichnung::tick( double tickval )
  207. {
  208. while( !actions.empty() )
  209. {
  210. actions.front()();
  211. actions.pop();
  212. }
  213. bool r = rend;
  214. rend = 0;
  215. return r;
  216. }
  217. void Zeichnung::setStyle( __int64 style ) // setzt den Style des Text Feldes
  218. {
  219. if( this->style != style )
  220. {
  221. this->style = style;
  222. rend = 1;
  223. }
  224. }
  225. void Zeichnung::setStyle( __int64 style, bool add_remove )
  226. {
  227. if( add_remove && ( this->style | style ) != this->style )
  228. {
  229. this->style |= style;
  230. rend = 1;
  231. }
  232. else if( !add_remove && ( this->style & ~style ) != this->style )
  233. {
  234. if( toolTip && ( style | Style::Sichtbar ) == style )
  235. toolTip->setMausIn( 0 );
  236. this->style &= ~style;
  237. rend = 1;
  238. }
  239. }
  240. void Zeichnung::addStyle( __int64 style )
  241. {
  242. if( ( this->style | style ) != this->style )
  243. {
  244. this->style |= style;
  245. rend = 1;
  246. }
  247. }
  248. void Zeichnung::removeStyle( __int64 style )
  249. {
  250. if( ( this->style & ~style ) != this->style )
  251. {
  252. if( toolTip && ( style | Style::Sichtbar ) == style )
  253. toolTip->setMausIn( 0 );
  254. this->style &= ~style;
  255. rend = 1;
  256. }
  257. }
  258. void Zeichnung::render( Bild &zRObj )
  259. {
  260. if( toolTip && ( style | Style::Sichtbar ) == style )
  261. toolTip->setZeichnen();
  262. }
  263. // constant
  264. bool Zeichnung::hatMausEreignis() const // prüft, ob Mak gesetzt ist
  265. {
  266. return mak != 0;
  267. }
  268. bool Zeichnung::hatTastaturEreignis() const // prüft, ob Tak gesetzt ist
  269. {
  270. return tak != 0;
  271. }
  272. const Punkt &Zeichnung::getPosition() const // gibt die Position zurück
  273. {
  274. return pos;
  275. }
  276. const Punkt &Zeichnung::getSize() const // gibt die Größe zurück
  277. {
  278. return gr;
  279. }
  280. int Zeichnung::getBreite() const // gibt die Breite zurück
  281. {
  282. return gr.x;
  283. }
  284. int Zeichnung::getHeight() const // gibt die Höhe zurück
  285. {
  286. return gr.y;
  287. }
  288. // Gibt die Breite des Innenraumes in der Zeichnung in Pixeln zurück
  289. int Zeichnung::getInnenBreite() const
  290. {
  291. return gr.x;
  292. }
  293. // Gibt die Höhe des Innenraumes in der Zeichnung in Pixeln zurück
  294. int Zeichnung::getInnenHeight() const
  295. {
  296. return gr.y;
  297. }
  298. int Zeichnung::getX() const // gibt X zurück
  299. {
  300. return pos.x;
  301. }
  302. int Zeichnung::getY() const // gibt Y zurück
  303. {
  304. return pos.y;
  305. }
  306. ToolTip *Zeichnung::getToolTip() const // gibt den ToolTip Text
  307. {
  308. return ( ToolTip*)toolTip->getThis();
  309. }
  310. ToolTip *Zeichnung::zToolTip() const
  311. {
  312. return toolTip;
  313. }
  314. bool Zeichnung::hatStyle( __int64 style ) const // prüft, ob style vorhanden
  315. {
  316. return ( this->style | style ) == this->style;
  317. }
  318. bool Zeichnung::hatStyleNicht( __int64 style ) const // prüft, ob style nicht vorhanden
  319. {
  320. return ( this->style | style ) != this->style;
  321. }
  322. Zeichnung *Zeichnung::dublizieren() const // Erzeugt eine Kopie des Zeichnungs
  323. {
  324. Zeichnung *obj = new Zeichnung();
  325. obj->setPosition( pos );
  326. obj->setSize( gr );
  327. obj->setMausEreignisParameter( makParam );
  328. obj->setTastaturEreignisParameter( takParam );
  329. obj->setMausEreignis( mak );
  330. obj->setTastaturEreignis( tak );
  331. if( toolTip )
  332. obj->setToolTipZ( (ToolTip*)toolTip->dublizieren() );
  333. return obj;
  334. }
  335. Zeichnung *Zeichnung::getThis()
  336. {
  337. ref++;
  338. return this;
  339. }
  340. Zeichnung *Zeichnung::release()
  341. {
  342. if( !--ref )
  343. delete this;
  344. return 0;
  345. }
  346. // Inhalt der ZeichnungHintergrund Klasse aus Zeichnung.h
  347. // Konstruktor
  348. ZeichnungHintergrund::ZeichnungHintergrund()
  349. : Zeichnung()
  350. {
  351. hintergrundFarbe = 0xFF000000;
  352. rahmen = 0;
  353. hintergrundBild = 0;
  354. hintergrundFeld = 0;
  355. horizontalScrollBar = 0;
  356. vertikalScrollBar = 0;
  357. innenPosition.x = 0;
  358. innenPosition.y = 0;
  359. innenSize.x = 0;
  360. innenSize.y = 0;
  361. }
  362. // Destruktor
  363. ZeichnungHintergrund::~ZeichnungHintergrund()
  364. {
  365. if( rahmen )
  366. rahmen->release();
  367. if( hintergrundBild )
  368. hintergrundBild->release();
  369. if( hintergrundFeld )
  370. hintergrundFeld->release();
  371. if( horizontalScrollBar )
  372. horizontalScrollBar->release();
  373. if( vertikalScrollBar )
  374. vertikalScrollBar->release();
  375. }
  376. void ZeichnungHintergrund::setHintergrundBild( Bild *bild ) // setzt das Hintergrund Bild
  377. {
  378. if( !hintergrundBild )
  379. hintergrundBild = new Bild();
  380. hintergrundBild->neuBild( bild->getBreite(), bild->getHeight(), 0 );
  381. int *buff1 = hintergrundBild->getBuffer();
  382. int *buff2 = bild->getBuffer();
  383. for( int i = 0; i < bild->getBreite() * bild->getHeight(); ++i )
  384. buff1[ i ] = buff2[ i ];
  385. bild->release();
  386. rend = 1;
  387. }
  388. void ZeichnungHintergrund::setHintergrundBildZ( Bild *bild ) // setzt einen Zeiger zum Hintergrund Bild
  389. {
  390. if( hintergrundBild != bild )
  391. {
  392. if( hintergrundBild )
  393. hintergrundBild->release();
  394. hintergrundBild = bild;
  395. rend = 1;
  396. }
  397. }
  398. void ZeichnungHintergrund::setHintergrundFarbe( int fc ) // setzt die Hintergrundfarbe
  399. {
  400. if( hintergrundFarbe != fc )
  401. {
  402. hintergrundFarbe = fc;
  403. rend = 1;
  404. }
  405. }
  406. void ZeichnungHintergrund::setAlphaFeldZ( AlphaFeld *buff ) // setzt einen Zeiger zum Hintergrund Buffer
  407. {
  408. if( hintergrundFeld != buff )
  409. {
  410. if( hintergrundFeld )
  411. hintergrundFeld->release();
  412. hintergrundFeld = buff;
  413. rend = 1;
  414. }
  415. }
  416. void ZeichnungHintergrund::setAlphaFeldStrength( int st ) // setzt die Stärke des Hintergrund Buffers
  417. {
  418. if( !hintergrundFeld )
  419. {
  420. hintergrundFeld = new AlphaFeld();
  421. rend = 1;
  422. }
  423. if( hintergrundFeld->getStrength() != st )
  424. {
  425. hintergrundFeld->setStrength( st );
  426. rend = 1;
  427. }
  428. }
  429. void ZeichnungHintergrund::setAlphaFeldFarbe( int fc ) // setzt die Farbe des Hintergrund Buffers
  430. {
  431. if( !hintergrundFeld )
  432. {
  433. hintergrundFeld = new AlphaFeld();
  434. rend = 1;
  435. }
  436. if( hintergrundFeld->getFarbe() != fc )
  437. {
  438. hintergrundFeld->setFarbe( fc );
  439. rend = 1;
  440. }
  441. }
  442. void ZeichnungHintergrund::setRahmenZ( Rahmen *ram ) // setzt einen Zeiger zum Rahmen
  443. {
  444. if( rahmen != ram )
  445. {
  446. if( rahmen )
  447. rahmen->release();
  448. rahmen = ram;
  449. rend = 1;
  450. }
  451. }
  452. void ZeichnungHintergrund::setRahmenBreite( int br ) // setzt die Breite des Rahmens
  453. {
  454. if( !rahmen )
  455. {
  456. rahmen = new LRahmen();
  457. rend = 1;
  458. }
  459. if( rahmen->getRBreite() != br )
  460. {
  461. rahmen->setRamenBreite( br );
  462. rend = 1;
  463. }
  464. }
  465. void ZeichnungHintergrund::setRahmenFarbe( int fc ) // setzt die Farbe des Rahmens
  466. {
  467. if( !rahmen )
  468. {
  469. rahmen = new LRahmen();
  470. rend = 1;
  471. }
  472. if( rahmen->getFarbe() != fc )
  473. {
  474. rahmen->setFarbe( fc );
  475. rend = 1;
  476. }
  477. }
  478. void ZeichnungHintergrund::setVertikalKlickScroll( int ks ) // setzt die vertikale Scroll geschwindigkeit
  479. {
  480. if( !vertikalScrollBar )
  481. {
  482. vertikalScrollBar = new VScrollBar();
  483. rend = 1;
  484. }
  485. if( vertikalScrollBar->getKlickScroll() != ks )
  486. {
  487. vertikalScrollBar->setKlickScroll( ks );
  488. rend = 1;
  489. }
  490. }
  491. void ZeichnungHintergrund::setVertikalScrollPos( int pos ) // setzt die vertikale Scroll Position
  492. {
  493. if( !vertikalScrollBar )
  494. {
  495. vertikalScrollBar = new VScrollBar();
  496. rend = 1;
  497. }
  498. if( vertikalScrollBar && vertikalScrollBar->getScroll() != pos )
  499. {
  500. vertikalScrollBar->scroll( pos );
  501. rend = 1;
  502. }
  503. }
  504. void ZeichnungHintergrund::setVertikalScrollFarbe( int f, int bgF ) // setzt die scroll Farbe
  505. {
  506. if( !vertikalScrollBar )
  507. {
  508. vertikalScrollBar = new VScrollBar();
  509. rend = 1;
  510. }
  511. if( vertikalScrollBar && ( vertikalScrollBar->getFarbe() != f || vertikalScrollBar->getBgFarbe() != bgF ) )
  512. {
  513. vertikalScrollBar->setFarbe( f );
  514. vertikalScrollBar->setBgFarbe( bgF, bgF != 0 );
  515. rend = 1;
  516. }
  517. }
  518. void ZeichnungHintergrund::setHorizontalKlickScroll( int ks ) // setzt die horizontale Scroll geschwindigkeit
  519. {
  520. if( !horizontalScrollBar )
  521. {
  522. horizontalScrollBar = new HScrollBar();
  523. rend = 1;
  524. }
  525. if( horizontalScrollBar && horizontalScrollBar->getKlickScroll() != ks )
  526. {
  527. horizontalScrollBar->setKlickScroll( ks );
  528. rend = 1;
  529. }
  530. }
  531. void ZeichnungHintergrund::setHorizontalScrollPos( int pos ) // setzt die horizontale Scroll Position
  532. {
  533. if( !horizontalScrollBar )
  534. {
  535. horizontalScrollBar = new HScrollBar();
  536. rend = 1;
  537. }
  538. if( horizontalScrollBar && horizontalScrollBar->getScroll() != pos )
  539. {
  540. horizontalScrollBar->scroll( pos );
  541. rend = 1;
  542. }
  543. }
  544. void ZeichnungHintergrund::setHorizontalScrollFarbe( int f, int bgF ) // setzt die scroll Farbe
  545. {
  546. if( !horizontalScrollBar )
  547. {
  548. horizontalScrollBar = new HScrollBar();
  549. rend = 1;
  550. }
  551. if( horizontalScrollBar && ( horizontalScrollBar->getFarbe() != f || horizontalScrollBar->getBgFarbe() != bgF ) )
  552. {
  553. horizontalScrollBar->setFarbe( f );
  554. horizontalScrollBar->setBgFarbe( bgF, bgF != 0 );
  555. rend = 1;
  556. }
  557. }
  558. bool ZeichnungHintergrund::tick( double tickVal )
  559. {
  560. if( vertikalScrollBar && hatStyle( Style::VScroll ) )
  561. rend |= vertikalScrollBar->getRend();
  562. if( horizontalScrollBar && hatStyle( Style::HScroll ) )
  563. rend |= horizontalScrollBar->getRend();
  564. return Zeichnung::tick( tickVal );
  565. }
  566. void ZeichnungHintergrund::render( Bild &rObj )
  567. {
  568. innenPosition.x = pos.x;
  569. innenPosition.y = pos.y;
  570. innenSize.x = gr.x;
  571. innenSize.y = gr.y;
  572. if( hatStyleNicht( Style::Sichtbar ) )
  573. return;
  574. lockZeichnung();
  575. if( !rObj.setDrawOptions( pos.x, pos.y, gr.x, gr.y ) )
  576. {
  577. unlockZeichnung();
  578. return;
  579. }
  580. Zeichnung::render( rObj );
  581. int rbr = 0;
  582. if( hatStyle( Style::Rahmen ) && rahmen )
  583. {
  584. rahmen->setSize( gr );
  585. rahmen->render( rObj );
  586. rbr = rahmen->getRBreite();
  587. }
  588. innenPosition.x += rbr;
  589. innenPosition.y += rbr;
  590. innenSize.x -= rbr * 2;
  591. innenSize.y -= rbr * 2;
  592. if( !rObj.setDrawOptions( rbr, rbr, gr.x - rbr * 2, gr.y - rbr * 2 ) )
  593. {
  594. rObj.releaseDrawOptions();
  595. unlockZeichnung();
  596. return;
  597. }
  598. bool vs = vertikalScrollBar && hatStyle( Style::VScroll );
  599. bool hs = horizontalScrollBar && hatStyle( Style::HScroll );
  600. if( vs )
  601. {
  602. vertikalScrollBar->render( gr.x - rbr * 2 - 15, 0, 15, gr.y - rbr * 2, rObj );
  603. innenSize.x -= 15;
  604. if( hs )
  605. {
  606. horizontalScrollBar->render( 0, gr.y - rbr * 2 - 15, gr.x - rbr * 2 - 15, 15, rObj );
  607. innenSize.y -= 15;
  608. if( !rObj.setDrawOptions( 0, 0, gr.x - rbr * 2 - 15, gr.y - rbr * 2 - 15 ) )
  609. {
  610. rObj.releaseDrawOptions();
  611. rObj.releaseDrawOptions();
  612. unlockZeichnung();
  613. return;
  614. }
  615. horizontalScrollBar->update( horizontalScrollBar->getScrollData()->max, innenSize.x );
  616. }
  617. else
  618. {
  619. if( !rObj.setDrawOptions( 0, 0, gr.x - rbr * 2 - 15, gr.y - rbr * 2 ) )
  620. {
  621. rObj.releaseDrawOptions();
  622. rObj.releaseDrawOptions();
  623. unlockZeichnung();
  624. return;
  625. }
  626. }
  627. vertikalScrollBar->update( vertikalScrollBar->getScrollData()->max, innenSize.y );
  628. }
  629. else if( hs )
  630. {
  631. horizontalScrollBar->render( rbr, gr.y - rbr * 2 - 15, gr.x - rbr * 2, 15, rObj );
  632. innenSize.y -= 15;
  633. if( !rObj.setDrawOptions( 0, 0, gr.x - rbr * 2, gr.y - rbr * 2 - 15 ) )
  634. {
  635. rObj.releaseDrawOptions();
  636. rObj.releaseDrawOptions();
  637. unlockZeichnung();
  638. return;
  639. }
  640. }
  641. if( hatStyle( Style::Hintergrund ) )
  642. {
  643. if( hatStyle( Style::HAlpha ) )
  644. rObj.alphaRegion( 0, 0, gr.x - rbr * 2, gr.y - rbr * 2, hintergrundFarbe );
  645. else
  646. rObj.fillRegion( 0, 0, gr.x - rbr * 2, gr.y - rbr * 2, hintergrundFarbe );
  647. if( hatStyle( Style::HBild ) && hintergrundBild )
  648. {
  649. if( hatStyle( Style::HAlpha ) )
  650. rObj.alphaBildSkall( 0, 0, gr.x - rbr * 2, gr.y - rbr * 2, *hintergrundBild );
  651. else
  652. rObj.drawBildSkall( 0, 0, gr.x - rbr * 2, gr.y - rbr * 2, *hintergrundBild );
  653. }
  654. }
  655. if( hatStyle( Style::Buffered ) && hintergrundFeld )
  656. {
  657. hintergrundFeld->setSize( gr.x - rbr * 2, gr.y - rbr * 2 );
  658. hintergrundFeld->render( rObj );
  659. }
  660. if( vs || hs )
  661. rObj.releaseDrawOptions();
  662. rObj.releaseDrawOptions();
  663. rObj.releaseDrawOptions();
  664. unlockZeichnung();
  665. }
  666. // Gibt die Breite des Innenraumes in der Zeichnung in Pixeln zurück
  667. int ZeichnungHintergrund::getInnenBreite() const
  668. {
  669. return getBreite() - 2 * getRahmenBreite();
  670. }
  671. // Gibt die Höhe des Innenraumes in der Zeichnung in Pixeln zurück
  672. int ZeichnungHintergrund::getInnenHeight() const
  673. {
  674. return getHeight() - 2 * getRahmenBreite();
  675. }
  676. Bild *ZeichnungHintergrund::getHintergrundBild() const // gibt getThis vom Hintergrund Bild zurück
  677. {
  678. if( !hintergrundBild )
  679. return 0;
  680. return hintergrundBild->getThis();
  681. }
  682. Bild *ZeichnungHintergrund::zHintergrundBild() const // gibt das Hintergrund Bild zurück
  683. {
  684. return hintergrundBild;
  685. }
  686. int ZeichnungHintergrund::getHintergrundFarbe() const // giebt getThis der Hintergrundfarbe zurück
  687. {
  688. return hintergrundFarbe;
  689. }
  690. AlphaFeld *ZeichnungHintergrund::getAlphaFeld() const // gibt getThir vom Hintergrund Buffer zurück
  691. {
  692. if( !hintergrundFeld )
  693. return 0;
  694. return (AlphaFeld*)hintergrundFeld->getThis();
  695. }
  696. AlphaFeld *ZeichnungHintergrund::zAlphaFeld() const // gibt den Hintergrund Buffer zurück
  697. {
  698. return hintergrundFeld;
  699. }
  700. int ZeichnungHintergrund::getAlphaFeldStrength() const // gibt die Stärke des Hintergrund Buffers zurück
  701. {
  702. if( !hintergrundFeld )
  703. return 0;
  704. return hintergrundFeld->getStrength();
  705. }
  706. int ZeichnungHintergrund::getAlphaFeldFarbe() const // gibt getThis von der Farbe des Hintergrund Buffers zurück
  707. {
  708. return hintergrundFeld->getFarbe();
  709. }
  710. Rahmen *ZeichnungHintergrund::getRahmen() const // gibt getThis des Rahmens zurück
  711. {
  712. if( !rahmen )
  713. return 0;
  714. return (Rahmen*)rahmen->getThis();
  715. }
  716. Rahmen *ZeichnungHintergrund::zRahmen() const // gibt den Rahmen zurück
  717. {
  718. return rahmen;
  719. }
  720. int ZeichnungHintergrund::getRahmenBreite() const // gibt die Breite des Rahmens zurück
  721. {
  722. if( !rahmen || hatStyleNicht( Style::Rahmen ) )
  723. return 0;
  724. return rahmen->getRBreite();
  725. }
  726. int ZeichnungHintergrund::getRahmenFarbe() const // gibt getThis der Farbe des Rahmens zurück
  727. {
  728. return rahmen->getFarbe();
  729. }
  730. int ZeichnungHintergrund::getVertikalKlickScroll() const
  731. {
  732. return vertikalScrollBar ? vertikalScrollBar->getKlickScroll() : 0;
  733. }
  734. int ZeichnungHintergrund::getVertikalScrollPos() const
  735. {
  736. return vertikalScrollBar ? vertikalScrollBar->getScroll() : 0;
  737. }
  738. int ZeichnungHintergrund::getVertikalScrollFarbe() const
  739. {
  740. return vertikalScrollBar ? vertikalScrollBar->getFarbe() : 0;
  741. }
  742. int ZeichnungHintergrund::getVertikalScrollHintergrund() const
  743. {
  744. return vertikalScrollBar ? vertikalScrollBar->getBgFarbe() : 0;
  745. }
  746. int ZeichnungHintergrund::getHorizontalKlickScroll() const
  747. {
  748. return horizontalScrollBar ? horizontalScrollBar->getKlickScroll() : 0;
  749. }
  750. int ZeichnungHintergrund::getHorizontalScrollPos() const
  751. {
  752. return horizontalScrollBar ? horizontalScrollBar->getScroll() : 0;
  753. }
  754. int ZeichnungHintergrund::getHorizontalScrollFarbe() const
  755. {
  756. return horizontalScrollBar ? horizontalScrollBar->getFarbe() : 0;
  757. }
  758. int ZeichnungHintergrund::getHorizontalScrollHintergrund() const
  759. {
  760. return horizontalScrollBar ? horizontalScrollBar->getBgFarbe() : 0;
  761. }
  762. Zeichnung *ZeichnungHintergrund::dublizieren() const // Erzeugt eine Kopie des Zeichnungs
  763. {
  764. ZeichnungHintergrund *obj = new ZeichnungHintergrund();
  765. obj->setPosition( pos );
  766. obj->setSize( gr );
  767. obj->setMausEreignisParameter( makParam );
  768. obj->setTastaturEreignisParameter( takParam );
  769. obj->setMausEreignis( mak );
  770. obj->setTastaturEreignis( tak );
  771. if( toolTip )
  772. obj->setToolTipZ( (ToolTip*)toolTip->dublizieren() );
  773. obj->setStyle( style );
  774. obj->setHintergrundFarbe( hintergrundFarbe );
  775. if( hintergrundFeld )
  776. obj->setAlphaFeldZ( (AlphaFeld*)hintergrundFeld->dublizieren() );
  777. if( rahmen )
  778. obj->setRahmenZ( (Rahmen*)rahmen->dublizieren() );
  779. if( hintergrundBild )
  780. obj->setHintergrundBild( hintergrundBild->getThis() );
  781. if( vertikalScrollBar )
  782. {
  783. obj->setVertikalKlickScroll( vertikalScrollBar->getKlickScroll() );
  784. obj->setVertikalScrollPos( vertikalScrollBar->getScroll() );
  785. obj->setVertikalScrollFarbe( vertikalScrollBar->getFarbe(), vertikalScrollBar->getBgFarbe() );
  786. }
  787. if( horizontalScrollBar )
  788. {
  789. obj->setHorizontalKlickScroll( horizontalScrollBar->getKlickScroll() );
  790. obj->setHorizontalScrollPos( horizontalScrollBar->getScroll() );
  791. obj->setHorizontalScrollFarbe( horizontalScrollBar->getFarbe(), horizontalScrollBar->getBgFarbe() );
  792. }
  793. return obj;
  794. }