TextFeld.cpp 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827
  1. #include "TextFeld.h"
  2. #include "Schrift.h"
  3. #include "Text.h"
  4. #include "Farbe.h"
  5. #include "Rahmen.h"
  6. #include "Bild.h"
  7. #include "Punkt.h"
  8. #include "TastaturEreignis.h"
  9. #include "MausEreignis.h"
  10. #include "Fenster.h"
  11. #include <math.h>
  12. #include "Globals.h"
  13. using namespace Framework;
  14. // Inhalt der TextFeld Klasse aus TextFeld.h
  15. // Konstruktor
  16. TextFeld::TextFeld()
  17. : Objekt()
  18. {
  19. this->setMausEreignis( _ret1ME );
  20. this->setTastaturEreignis( _ret1TE );
  21. style = 0;
  22. schriftGröße = 12;
  23. schrift = 0;
  24. buffer = 0;
  25. bgF = 0;
  26. sF = 0;
  27. bgBuff = 0;
  28. rahmen = 0;
  29. bgBild = 0;
  30. showChar = 0;
  31. begf = 0, cpos = 0;
  32. tickVal = 0;
  33. ref = 1;
  34. }
  35. // Destruktor
  36. TextFeld::~TextFeld()
  37. {
  38. if( schrift )
  39. schrift->release();
  40. if( buffer )
  41. buffer->release();
  42. if( bgF )
  43. bgF->release();
  44. if( sF )
  45. sF->release();
  46. if( rahmen )
  47. rahmen->release();
  48. if( bgBild )
  49. bgBild->release();
  50. }
  51. // nicht constant
  52. void TextFeld::update() // aktualisiert Position und größe
  53. {
  54. int rbr = 0;
  55. if( rahmen && hatStyle( TF_Style::Rahmen ) )
  56. {
  57. rbr = rahmen->getRBreite();
  58. rahmen->setPosition( pos->x, pos->y );
  59. rahmen->setGröße( gr->x, gr->y );
  60. }
  61. }
  62. void TextFeld::setText( Text *txt ) // setzt den angezeigten Text
  63. {
  64. if( !buffer )
  65. buffer = new Text();
  66. buffer->setText( txt );
  67. }
  68. void TextFeld::setTextZ( Text *txt ) // setzt einen Zeiger zum angezeigten Text
  69. {
  70. if( buffer )
  71. buffer->release();
  72. buffer = txt;
  73. }
  74. void TextFeld::setText( const char *txt ) // setzt den angezeigten Text
  75. {
  76. if( !buffer )
  77. buffer = new Text();
  78. buffer->setText( txt );
  79. }
  80. void TextFeld::setAuswahl( int pos1, int pos2 ) // setzt den Ausgewählten Text
  81. {
  82. cpos = pos1;
  83. begf = pos2;
  84. }
  85. void TextFeld::setAuswahl( Punkt *auswahl )
  86. {
  87. cpos = auswahl->x;
  88. begf = auswahl->y;
  89. auswahl->release();
  90. }
  91. void TextFeld::setHintergrundBild( Bild *bild ) // setzt das Hintergrund Bild
  92. {
  93. if( !bgBild )
  94. bgBild = new Bild();
  95. bgBild->neuBild( bild->getGröße(), new Farbe() );
  96. int *buff1 = bgBild->getBuffer();
  97. int *buff2 = bild->getBuffer();
  98. for( int i = 0; i < bild->getBreite() * bild->getHöhe(); i++ )
  99. buff1[ i ] = buff2[ i ];
  100. bild->release();
  101. }
  102. void TextFeld::setHintergrundBildZ( Bild *bild ) // setzt einen Zeiger zum Hintergrund Bild
  103. {
  104. if( bgBild )
  105. bgBild->release();
  106. bgBild = bild;
  107. }
  108. void TextFeld::setHintergrundFarbe( int fc ) // setzt die Hintergrundfarbe
  109. {
  110. if( !bgF )
  111. bgF = new Farbe();
  112. bgF->setFarbe( fc );
  113. }
  114. void TextFeld::setHintergrundFarbe( Farbe *f )
  115. {
  116. if( !bgF )
  117. bgF = new Farbe();
  118. bgF->setFarbe( f->getFarbe() );
  119. f->release();
  120. }
  121. void TextFeld::setHintergrundFarbeZ( Farbe *f ) // setzt einen Zeiger zur Hintergrundfarbe
  122. {
  123. if( bgF )
  124. bgF->release();
  125. bgF = f;
  126. }
  127. void TextFeld::setSchriftZ( Schrift *schrift ) // setzt einen Zeiger zur Schrift
  128. {
  129. if( this->schrift )
  130. this->schrift->release();
  131. this->schrift = schrift;
  132. }
  133. void TextFeld::setSchriftGröße( unsigned char gr ) // setzt die Schriftgröße
  134. {
  135. schriftGröße = gr;
  136. }
  137. void TextFeld::setSchriftFarbe( int fc ) // setzt die Schrift Farbe
  138. {
  139. if( !sF )
  140. sF = new Farbe();
  141. sF->setFarbe( fc );
  142. }
  143. void TextFeld::setSchriftFarbe( Farbe *f )
  144. {
  145. if( !sF )
  146. sF = new Farbe();
  147. sF->setFarbe( f->getFarbe() );
  148. f->release();
  149. }
  150. void TextFeld::setSchriftFarbeZ( Farbe *f ) // setze einen Zeiger zur Schriftfarbe
  151. {
  152. if( sF )
  153. sF->release();
  154. sF = f;
  155. }
  156. void TextFeld::setLRZ( LRahmen *ram ) // setzt einen Zeiger zum Rahmen
  157. {
  158. if( rahmen )
  159. rahmen->release();
  160. rahmen = ram;
  161. }
  162. void TextFeld::setLRBreite( int br ) // setzt die Breite des Rahmens
  163. {
  164. if( !rahmen )
  165. rahmen = new LRahmen();
  166. rahmen->setRamenBreite( br );
  167. }
  168. void TextFeld::setLRFarbe( int fc ) // setzt die Farbe des Rahmens
  169. {
  170. if( !rahmen )
  171. rahmen = new LRahmen();
  172. rahmen->setFarbe( fc );
  173. }
  174. void TextFeld::setLRFarbe( Farbe *f )
  175. {
  176. if( !rahmen )
  177. rahmen = new LRahmen();
  178. rahmen->setFarbe( f->getFarbe() );
  179. f->release();
  180. }
  181. void TextFeld::setLRFarbeZ( Farbe *f ) // setzt einen Zeiger zur Farbe des Rahmens
  182. {
  183. if( !rahmen )
  184. rahmen = new LRahmen();
  185. rahmen->setFarbeZ( f );
  186. }
  187. void TextFeld::setSchowChar( unsigned char c ) // bei Passwortfeld *
  188. {
  189. showChar = c;
  190. }
  191. void TextFeld::setStyle( int style ) // setzt den Style des Text Feldes
  192. {
  193. this->style = style;
  194. }
  195. void TextFeld::setStyle( int style, bool add_löschen )
  196. {
  197. if( add_löschen )
  198. this->style |= style;
  199. else
  200. this->style &= ~style;
  201. }
  202. void TextFeld::addStyle( int style )
  203. {
  204. this->style |= style;
  205. }
  206. void TextFeld::löscheStyle( int style )
  207. {
  208. this->style &= ~style;
  209. }
  210. void TextFeld::tick( double tickval ) // tick
  211. {
  212. tickVal += tickval;
  213. if( tickVal >= 1 )
  214. tickVal -= 1;
  215. }
  216. void TextFeld::doMausEreignis( MausEreignis *me ) // Maus Ereignis
  217. {
  218. if( hatStyleNicht( TF_Style::Erlaubt ) || hatStyleNicht( TF_Style::Sichtbar ) )
  219. return;
  220. bool removeFokus = 0;
  221. if( me->verarbeitet || !( me->mx >= pos->x && me->mx <= pos->x + gr->x && me->my >= pos->y && me->my <= pos->y + gr->y ) )
  222. {
  223. if( mausIn )
  224. {
  225. mausIn = 0;
  226. MausEreignis me2;
  227. me2.id = ME_Verlässt;
  228. me2.mx = me->mx;
  229. me2.my = me->my;
  230. me2.verarbeitet = 0;
  231. doMausEreignis( &me2 );
  232. return;
  233. }
  234. removeFokus = 1;
  235. }
  236. if( !( me->mx >= pos->x && me->mx <= pos->x + gr->x && me->my >= pos->y && me->my <= pos->y + gr->y ) && me->id != ME_Verlässt )
  237. {
  238. if( removeFokus && me->id == ME_RLinks )
  239. if( Mak && ( me->verarbeitet || Mak( this, *me ) ) )
  240. löscheStyle( TF_Style::Fokus );
  241. return;
  242. }
  243. if( !mausIn && me->id != ME_Verlässt )
  244. {
  245. mausIn = 1;
  246. MausEreignis me2;
  247. me2.id = ME_Betritt;
  248. me2.mx = me->mx;
  249. me2.my = me->my;
  250. me2.verarbeitet = 0;
  251. doMausEreignis( &me2 );
  252. }
  253. me->mx -= pos->x, me->my -= pos->y;
  254. if( Mak && ( me->verarbeitet || Mak( this, *me ) ) )
  255. {
  256. if( removeFokus && me->id == ME_RLinks )
  257. löscheStyle( TF_Style::Fokus );
  258. if( !me->verarbeitet )
  259. {
  260. if( hatStyleNicht( TF_Style::Fokus ) )
  261. {
  262. if( me->id == Framework::ME_PLinks )
  263. {
  264. addStyle( TF_Style::Fokus );
  265. }
  266. }
  267. if( schrift )
  268. {
  269. schrift->setSchriftGröße( schriftGröße );
  270. bool shift = TastenStand[ T_Shift ];
  271. if( me->id == Framework::ME_PLinks )
  272. {
  273. int rbr = 0;
  274. if( rahmen )
  275. rbr = rahmen->getRBreite();
  276. int tbr = schrift->getTextBreite( buffer->getThis() );
  277. int thö = schrift->getTextHöhe( buffer->getThis() );
  278. int xxx = me->mx - rbr;
  279. int yyy = me->my - rbr;
  280. if( hatStyle( TF_Style::HCenter ) )
  281. xxx -= ( ( gr->x / 2 ) - tbr / 2 ) - rbr;
  282. if( hatStyle( TF_Style::VCenter ) )
  283. yyy -= ( ( gr->y / 2 ) - thö / 2 ) - rbr;
  284. int pos = schrift->textPos( buffer->getThis(), xxx, yyy );
  285. if( pos != -1 )
  286. {
  287. if( shift )
  288. begf = pos;
  289. else
  290. {
  291. cpos = pos;
  292. begf = pos;
  293. }
  294. }
  295. }
  296. if( me->id == ME_RLinks )
  297. {
  298. if( !shift )
  299. {
  300. int rbr = 0;
  301. if( rahmen )
  302. rbr = rahmen->getRBreite();
  303. int tbr = schrift->getTextBreite( buffer->getThis() );
  304. int thö = schrift->getTextHöhe( buffer->getThis() );
  305. int xxx = me->mx - rbr;
  306. int yyy = me->my - rbr;
  307. if( hatStyle( TF_Style::HCenter ) )
  308. xxx -= ( ( gr->x / 2 ) - tbr / 2 ) - rbr;
  309. if( hatStyle( TF_Style::VCenter ) )
  310. yyy -= ( ( gr->y / 2 ) - thö / 2 ) - rbr;
  311. int pos = schrift->textPos( buffer->getThis(), xxx, yyy );
  312. if( pos != -1 )
  313. begf = pos;
  314. }
  315. }
  316. }
  317. }
  318. me->verarbeitet = 1;
  319. }
  320. me->mx += pos->x, me->my += pos->y;
  321. }
  322. void TextFeld::doTastaturEreignis( TastaturEreignis *te )
  323. {
  324. if( te->verarbeitet || hatStyleNicht( TF_Style::Fokus ) )
  325. return;
  326. if( !Tak )
  327. return;
  328. if( Tak( this, *te ) )
  329. {
  330. if( hatStyleNicht( TF_Style::Erlaubt ) )
  331. return;
  332. if( te->id == TE_Press )
  333. {
  334. bool shift = TastenStand[ T_Shift ];
  335. bool strg = TastenStand[ T_Strg ];
  336. switch( te->taste )
  337. {
  338. case T_Entf:
  339. if( cpos != begf )
  340. buffer->löschen( cpos, begf );
  341. else
  342. buffer->löschen( cpos, cpos + 1 );
  343. begf = cpos;
  344. break;
  345. case T_BackSpace:
  346. if( cpos != begf )
  347. {
  348. buffer->löschen( cpos, begf );
  349. cpos -= abs( cpos - begf );
  350. }
  351. else
  352. {
  353. buffer->löschen( cpos - 1, cpos );
  354. cpos--;
  355. }
  356. begf = cpos;
  357. break;
  358. case T_Enter:
  359. if( cpos != begf )
  360. {
  361. buffer->löschen( begf, cpos );
  362. cpos -= abs( cpos - begf );
  363. }
  364. buffer->einfügen( cpos, '\n' );
  365. cpos++;
  366. begf = cpos;
  367. break;
  368. case T_Links:
  369. if( shift )
  370. {
  371. if( strg )
  372. begf = buffer->getLKick( begf );
  373. else
  374. begf--;
  375. }
  376. else
  377. {
  378. if( strg )
  379. cpos = buffer->getLKick( cpos );
  380. else
  381. cpos--;
  382. begf = cpos;
  383. }
  384. break;
  385. case T_Oben:
  386. if( shift )
  387. {
  388. begf = buffer->getOKick( begf );
  389. }
  390. else
  391. {
  392. cpos = buffer->getOKick( cpos );
  393. begf = cpos;
  394. }
  395. break;
  396. case T_Rechts:
  397. if( shift )
  398. {
  399. if( strg )
  400. begf = buffer->getRKick( begf );
  401. else
  402. begf++;
  403. }
  404. else
  405. {
  406. if( strg )
  407. cpos = buffer->getRKick( cpos );
  408. else
  409. cpos++;
  410. begf = cpos;
  411. }
  412. break;
  413. case T_Unten:
  414. if( shift )
  415. {
  416. begf = buffer->getUKick( begf );
  417. }
  418. else
  419. {
  420. cpos = buffer->getUKick( cpos );
  421. begf = cpos;
  422. }
  423. break;
  424. default:
  425. if( istSchreibbar( te->taste ) )
  426. {
  427. if( begf != cpos )
  428. {
  429. buffer->löschen( begf, cpos );
  430. if( cpos > begf )
  431. cpos = begf;
  432. }
  433. buffer->einfügen( cpos, (char)te->taste );
  434. cpos++;
  435. begf = cpos;
  436. }
  437. break;
  438. }
  439. }
  440. if( cpos < 0 )
  441. cpos = 0;
  442. if( cpos > buffer->getLänge() )
  443. cpos = buffer->getLänge();
  444. if( begf < 0 )
  445. begf = 0;
  446. if( begf > buffer->getLänge() )
  447. begf = buffer->getLänge();
  448. te->verarbeitet = 1;
  449. }
  450. }
  451. void TextFeld::render( Bild *rObj ) // zeichenet nach rObj
  452. {
  453. if( hatStyleNicht( TF_Style::Sichtbar ) )
  454. return;
  455. lockObjekt();
  456. int x = pos->x;
  457. int y = pos->y;
  458. int br = gr->x;
  459. int hö = gr->y;
  460. rObj->setDrawOptions( x, y, x + br, y + hö );
  461. if( hatStyle( TF_Style::Hintergrund ) )
  462. {
  463. if( bgF )
  464. if( hatStyle( TF_Style::HAlpha ) )
  465. rObj->alphaRegion( x, y, br, hö, bgF->getFarbe() );
  466. else
  467. rObj->füllRegion( x, y, br, hö, bgF->getFarbe() );
  468. if( hatStyle( TF_Style::HBild ) && bgBild )
  469. if( hatStyle( TF_Style::HAlpha ) )
  470. rObj->alphaBild( x, y, br, hö, bgBild );
  471. else
  472. rObj->drawBild( x, y, br, hö, bgBild );
  473. }
  474. if( hatStyle( TF_Style::Rahmen ) && rahmen )
  475. rahmen->render( rObj );
  476. if( !buffer || !sF || !schrift )
  477. {
  478. rObj->setDrawOptions( -1, -1, -1, -1 );
  479. unlockObjekt();
  480. return;
  481. }
  482. if( hatStyleNicht( TF_Style::Mehrzeilig ) )
  483. buffer->löschen( '\n' );
  484. if( hatStyleNicht( TF_Style::Mehrfarbig ) )
  485. while( buffer->hat( '\r' ) )
  486. buffer->löschen( buffer->positionVon( '\r' ), buffer->positionVon( '\r' ) + 11 );
  487. schrift->lockSchrift();
  488. schrift->setFarbe( sF->getFarbe() );
  489. schrift->setSchriftGröße( schriftGröße );
  490. int rbr = 0;
  491. if( rahmen && hatStyle( TF_Style::Rahmen ) )
  492. rbr = rahmen->getRBreite();
  493. int tbr = schrift->getTextBreite( buffer->getThis() );
  494. int thö = schrift->getTextHöhe( buffer->getThis() );
  495. int xxx = pos->x + rbr;
  496. int yyy = pos->y + rbr;
  497. if( hatStyle( TF_Style::HCenter ) )
  498. xxx = ( pos->x + gr->x / 2 ) - tbr / 2;
  499. if( hatStyle( TF_Style::VCenter ) )
  500. yyy = ( pos->y + gr->y / 2 ) - thö / 2;
  501. schrift->setDrawPosition( xxx, yyy );
  502. if( hatStyle( TF_Style::Fokus ) && hatStyle( TF_Style::Erlaubt ) )
  503. {
  504. if( istSchreibbar( showChar ) )
  505. {
  506. Text *rt = new Text();
  507. int län = buffer->getLänge() - buffer->anzahlVon( '\n' ) - buffer->anzahlVon( '\r' ) * 11;
  508. rt->füllText( showChar, län );
  509. if( tickVal <= 0.5 )
  510. schrift->renderText( rt, rObj, cpos, 0xFFFF5555, begf, 0xFF0000FF );
  511. else
  512. schrift->renderText( rt, rObj, cpos, 0x00000000, begf, 0xFF0000FF );
  513. }
  514. else
  515. {
  516. if( tickVal <= 0.5 )
  517. schrift->renderText( buffer->getThis(), rObj, cpos, 0xFFFF5555, begf, 0xFF0000FF );
  518. else
  519. schrift->renderText( buffer->getThis(), rObj, cpos, 0x00000000, begf, 0xFF0000FF );
  520. }
  521. }
  522. else
  523. {
  524. if( istSchreibbar( showChar ) )
  525. {
  526. Text *rt = new Text();
  527. int län = buffer->getLänge() - buffer->anzahlVon( '\n' ) - buffer->anzahlVon( '\r' ) * 11;
  528. rt->füllText( showChar, län );
  529. schrift->renderText( rt, rObj );
  530. }
  531. else
  532. schrift->renderText( buffer->getThis(), rObj );
  533. }
  534. schrift->unlockSchrift();
  535. rObj->setDrawOptions( -1, -1, -1, -1 );
  536. unlockObjekt();
  537. }
  538. void TextFeld::render( int xOff, int yOff, int bOff, int hOff, Bild *zrObj )
  539. {
  540. if( hatStyleNicht( TF_Style::Sichtbar ) )
  541. return;
  542. lockObjekt();
  543. int x = pos->x + xOff;
  544. int y = pos->y + yOff;
  545. int br = gr->x;
  546. int hö = gr->y;
  547. int xx = x < ( xOff + bOff ) ? x : ( xOff + bOff );
  548. xx = xx >= xOff ? xx : xOff;
  549. int yy = y < ( yOff + hOff ) ? y : ( yOff + hOff );
  550. yy = yy >= yOff ? yy : yOff;
  551. int xb = ( x + br ) < ( xOff + bOff ) ? ( x + br ) : ( xOff + bOff );
  552. xb = xb >= xOff ? xb : ( xOff - 1 );
  553. int yh = ( y + hö ) < ( yOff + hOff ) ? ( y + hö ) : ( yOff + hOff );
  554. yh = yh >= yOff ? yh : ( yOff - 1 );
  555. if( xx == xOff + bOff || yy == yOff + hOff || xb == xOff - 1 || yh == yOff - 1 )
  556. {
  557. unlockObjekt();
  558. return;
  559. }
  560. zrObj->setDrawOptions( xx, yy, xb, yh );
  561. if( hatStyle( TF_Style::Hintergrund ) )
  562. {
  563. if( bgF )
  564. if( hatStyle( TF_Style::HAlpha ) )
  565. zrObj->alphaRegion( x, y, br, hö, bgF->getFarbe() );
  566. else
  567. zrObj->füllRegion( x, y, br, hö, bgF->getFarbe() );
  568. if( hatStyle( TF_Style::HBild ) && bgBild )
  569. if( hatStyle( TF_Style::HAlpha ) )
  570. zrObj->alphaBild( x, y, br, hö, bgBild );
  571. else
  572. zrObj->drawBild( x, y, br, hö, bgBild );
  573. }
  574. int rbr = 0;
  575. if( hatStyle( TF_Style::Rahmen ) && rahmen )
  576. {
  577. rahmen->setPosition( x, y );
  578. rahmen->setGröße( br, hö );
  579. rahmen->render( zrObj );
  580. rbr = rahmen->getRBreite();
  581. }
  582. if( !buffer || !sF || !schrift )
  583. {
  584. zrObj->setDrawOptions( -1, -1, -1, -1 );
  585. unlockObjekt();
  586. return;
  587. }
  588. if( hatStyleNicht( TF_Style::Mehrzeilig ) )
  589. buffer->löschen( '\n' );
  590. if( hatStyleNicht( TF_Style::Mehrfarbig ) )
  591. while( buffer->hat( '\r' ) )
  592. buffer->löschen( buffer->positionVon( '\r' ), buffer->positionVon( '\r' ) + 11 );
  593. schrift->lockSchrift();
  594. schrift->setFarbe( sF->getFarbe() );
  595. schrift->setSchriftGröße( schriftGröße );
  596. int tbr = schrift->getTextBreite( buffer->getThis() );
  597. int thö = schrift->getTextHöhe( buffer->getThis() );
  598. int xxx = x + rbr;
  599. int yyy = y + rbr;
  600. if( hatStyle( TF_Style::HCenter ) )
  601. xxx = ( x + gr->x / 2 ) - tbr / 2;
  602. if( hatStyle( TF_Style::VCenter ) )
  603. yyy = ( y + gr->y / 2 ) - thö / 2;
  604. schrift->setDrawPosition( xxx, yyy );
  605. if( hatStyle( TF_Style::Fokus ) && hatStyle( TF_Style::Erlaubt ) )
  606. {
  607. if( istSchreibbar( showChar ) )
  608. {
  609. Text *rt = new Text();
  610. int län = buffer->getLänge() - buffer->anzahlVon( '\n' ) - buffer->anzahlVon( '\r' ) * 11;
  611. rt->füllText( showChar, län );
  612. if( tickVal <= 0.5 )
  613. schrift->renderText( rt, zrObj, cpos, 0xFFFF5555, begf, 0xFF0000FF );
  614. else
  615. schrift->renderText( rt, zrObj, cpos, 0x00000000, begf, 0xFF0000FF );
  616. }
  617. else
  618. {
  619. if( tickVal <= 0.5 )
  620. schrift->renderText( buffer->getThis(), zrObj, cpos, 0xFFFF5555, begf, 0xFF0000FF );
  621. else
  622. schrift->renderText( buffer->getThis(), zrObj, cpos, 0x00000000, begf, 0xFF0000FF );
  623. }
  624. }
  625. else
  626. {
  627. if( istSchreibbar( showChar ) )
  628. {
  629. Text *rt = new Text();
  630. int län = buffer->getLänge() - buffer->anzahlVon( '\n' ) - buffer->anzahlVon( '\r' ) * 11;
  631. rt->füllText( showChar, län );
  632. schrift->renderText( rt, zrObj );
  633. }
  634. else
  635. schrift->renderText( buffer->getThis(), zrObj );
  636. }
  637. schrift->unlockSchrift();
  638. zrObj->setDrawOptions( -1, -1, -1, -1 );
  639. unlockObjekt();
  640. }
  641. // Konstant
  642. Text *TextFeld::getText() const // gibt vom Text zurück
  643. {
  644. if( !buffer )
  645. return 0;
  646. return buffer->getThis();
  647. }
  648. Text *TextFeld::zText() const // gibt den Text zurück
  649. {
  650. return buffer;
  651. }
  652. Bild *TextFeld::getHintergrundBild() const // gibt getThis vom Hintergrund Bild zurück
  653. {
  654. if( !bgBild )
  655. return 0;
  656. return bgBild->getThis();
  657. }
  658. Bild *TextFeld::zHintergrundBild() const // gibt das Hintergrund Bild zurück
  659. {
  660. return bgBild;
  661. }
  662. Farbe *TextFeld::getHintergrundFarbe() const // giebt getThis der Hintergrundfarbe zurück
  663. {
  664. if( !bgF )
  665. return 0;
  666. return bgF->getThis();
  667. }
  668. Farbe *TextFeld::zHintergrundFarbe() const // gibt die Hintergrundfarbe zurück
  669. {
  670. return bgF;
  671. }
  672. int TextFeld::getHintergrundFarbeCode() const
  673. {
  674. if( !bgF )
  675. return 0;
  676. return bgF->getFarbe();
  677. }
  678. Schrift *TextFeld::getSchrift() const// gint getThis der Schrift Zurück
  679. {
  680. if( !schrift )
  681. return 0;
  682. return schrift->getThis();
  683. }
  684. Schrift *TextFeld::zSchrift() const// gibt die Schrift zurück
  685. {
  686. return schrift;
  687. }
  688. unsigned char TextFeld::getSchriftGröße() const // gibt die Schriftgröße zurück
  689. {
  690. return schriftGröße;
  691. }
  692. Farbe *TextFeld::getSchriftFarbe() const// gibt getThis der Schriftfarbe zurück
  693. {
  694. if( !sF )
  695. return 0;
  696. return sF->getThis();
  697. }
  698. Farbe *TextFeld::zSchriftFarbe() const // gibt die Schriftfarbe zurück
  699. {
  700. return sF;
  701. }
  702. int TextFeld::getSchriftFarbeCode() const
  703. {
  704. if( !sF )
  705. return 0;
  706. return sF->getFarbe();
  707. }
  708. LRahmen *TextFeld::getLR() const // gibt getThis des Rahmens zurück
  709. {
  710. if( !rahmen )
  711. return 0;
  712. return rahmen->getThis();
  713. }
  714. LRahmen *TextFeld::zLR() const // gibt den Rahmen zurück
  715. {
  716. return rahmen;
  717. }
  718. int TextFeld::getLRBreite() const // gibt die Breite des Rahmens zurück
  719. {
  720. if( !rahmen )
  721. return 0;
  722. return rahmen->getRBreite();
  723. }
  724. Farbe *TextFeld::getLRFarbe() const // gibt getThis der Farbe des Rahmens zurück
  725. {
  726. if( !rahmen )
  727. return 0;
  728. return rahmen->getFarbe();
  729. }
  730. Farbe *TextFeld::zLRFarbe() const // gibt die Farbe des Rahmens zurück
  731. {
  732. return rahmen->zFarbe();
  733. }
  734. int TextFeld::getLRFarbeCode() const
  735. {
  736. if( !rahmen )
  737. return 0;
  738. return rahmen->getFarbeCode();
  739. }
  740. unsigned char TextFeld::getShowChar() const // gibt den Anzeige Char zurück
  741. {
  742. return showChar;
  743. }
  744. bool TextFeld::hatStyle( int style ) const // prüft, ob style vorhanden
  745. {
  746. return ( this->style | style ) == this->style;
  747. }
  748. bool TextFeld::hatStyleNicht( int style ) const // prüft, ob style nicht vorhanden
  749. {
  750. return ( this->style | style ) != this->style;
  751. }
  752. int TextFeld::getMarkierungLänge() const // gibt die Länge der Markierung zurück
  753. {
  754. return abs( cpos - begf );
  755. }
  756. // Reference Counting
  757. TextFeld *TextFeld::getThis()
  758. {
  759. ref++;
  760. return this;
  761. }
  762. TextFeld *TextFeld::release()
  763. {
  764. ref--;
  765. if( ref == 0 )
  766. delete this;
  767. return 0;
  768. }