Editor.cpp 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682
  1. #include "Editor.h"
  2. #include <Schrift.h>
  3. #include "Parser\ColorParser.h"
  4. #include <Bild.h>
  5. #include <Scroll.h>
  6. #include <Globals.h>
  7. #include <Rahmen.h>
  8. #include <ToolTip.h>
  9. using namespace KSGScript;
  10. // Inhalt der Editor Klasse
  11. // Konstructor
  12. Editor::Editor()
  13. : ZeichnungHintergrund(),
  14. begF( 0 ),
  15. cPos( 0 ),
  16. tickVal( 0 ),
  17. mausKlick( 0 )
  18. {
  19. ref = 1;
  20. schrift = 0;
  21. script = 0;
  22. errorDetection = 1;
  23. warningDetection = 1;
  24. setTextColor( 0xFFFFFFFF, ColorType::NORMAL_TEXT );
  25. setTextColor( 0xFF4040FF, ColorType::KEYWORD );
  26. setTextColor( 0xFFA0A040, ColorType::PARAMETER_VARIABLE );
  27. setTextColor( 0xFFA0A0A0, ColorType::INSTANCE_VARIABLE );
  28. setTextColor( 0xFF40FF70, ColorType::TYPENAME );
  29. setTextColor( 0xFFFFA000, ColorType::STRING );
  30. setTextColor( 0xFFFF4040, ColorType::ERROR_UNDERLINE );
  31. parser = 0;
  32. reloadCounter = 10;
  33. }
  34. // Destructor
  35. Editor::~Editor()
  36. {
  37. if( schrift )
  38. schrift->release();
  39. if( script )
  40. script->release();
  41. if( parser )
  42. parser->release();
  43. }
  44. void Editor::updateHScroll( int pos )
  45. {
  46. if( pos == -1 )
  47. pos = cPos;
  48. if( horizontalScrollBar && script && schrift )
  49. {
  50. schrift->lock();
  51. schrift->setSchriftSize( 12 );
  52. int br = gr.x;
  53. if( hatStyle( Style::Rahmen ) && rahmen )
  54. br -= rahmen->getRBreite() * 2;
  55. if( hatStyle( Style::VScroll ) && vertikalScrollBar )
  56. br -= 15;
  57. int maxBr = schrift->getTextBreite( script ) + 12;
  58. horizontalScrollBar->update( maxBr, br );
  59. if( hatStyle( Style::Erlaubt ) && maxBr > br && pos > 0 && pos < script->getLength() )
  60. {
  61. int p1 = 0;
  62. char *tmp = script->getText();
  63. for( int i = 0; i < pos; i++, tmp++ )
  64. {
  65. if( *tmp == '\n' )
  66. p1 = i + 1;
  67. }
  68. Text *t = script->getTeilText( p1, pos );
  69. int cbr = schrift->getTextBreite( t );
  70. t->release();
  71. if( cbr + 12 > horizontalScrollBar->getScroll() + horizontalScrollBar->getScrollData()->anzeige )
  72. horizontalScrollBar->scroll( cbr + 12 - br );
  73. if( cbr - 12 < horizontalScrollBar->getScroll() )
  74. horizontalScrollBar->scroll( cbr - 12 );
  75. }
  76. schrift->unlock();
  77. }
  78. }
  79. void Editor::updateVScroll( int pos )
  80. {
  81. if( pos == -1 )
  82. pos = cPos;
  83. if( vertikalScrollBar )
  84. {
  85. int sPos = 0;
  86. int hi = 0;
  87. if( script && schrift )
  88. {
  89. schrift->setSchriftSize( 12 );
  90. hi = gr.y;
  91. if( hatStyle( Style::Rahmen ) && rahmen )
  92. hi -= rahmen->getRBreite() * 2;
  93. if( hatStyle( Style::HScroll ) && horizontalScrollBar )
  94. hi -= 15;
  95. vertikalScrollBar->update( schrift->getTextHeight( script ) + 12 + schrift->getTextHeight( Text( "a" ).getThis() ), hi );
  96. Text t;
  97. int zh = schrift->getTextHeight( &t ) + schrift->getZeilenabstand();
  98. int l = script->getLength();
  99. for( int i = 0; i < l && ( i < pos || hatStyleNicht( Style::Erlaubt ) ); ++i )
  100. {
  101. if( script->getText()[ i ] == '\n' )
  102. sPos += zh;
  103. }
  104. }
  105. if( schrift )
  106. {
  107. if( sPos - schrift->getZeilenabstand() - schrift->getTextHeight( Text( "a" ).getThis() ) < vertikalScrollBar->getScroll() )
  108. vertikalScrollBar->scroll( sPos - schrift->getZeilenabstand() - schrift->getTextHeight( Text( "a" ).getThis() ) );
  109. if( sPos + schrift->getZeilenabstand() + schrift->getTextHeight( Text( "a" ).getThis() ) > vertikalScrollBar->getScroll() + vertikalScrollBar->getScrollData()->anzeige )
  110. vertikalScrollBar->scroll( sPos + ( schrift->getZeilenabstand() + schrift->getTextHeight( Text( "a" ).getThis() ) ) * 2 - hi );
  111. }
  112. rend = 1;
  113. }
  114. }
  115. // Setzt die zu verwendende Schrift
  116. // s: Die Schrift
  117. void Editor::setSchriftZ( Schrift *s )
  118. {
  119. if( schrift )
  120. schrift->release();
  121. schrift = s;
  122. }
  123. // Setzt den Text (das Script was verändert werden soll)
  124. // txt: Der Text
  125. void Editor::setText( Text *txt )
  126. {
  127. if( script )
  128. script->release();
  129. if( parser )
  130. parser->release();
  131. script = new Text( txt->getText() );
  132. parser = new ColorParser( script );
  133. txt->release();
  134. updateHScroll( -1 );
  135. updateVScroll( -1 );
  136. }
  137. // Gibt den aktuellen Text zurück
  138. Text *Editor::zText() const
  139. {
  140. return script;
  141. }
  142. // Schaltet die Fehlererkennung ein oder aus
  143. // on: 1, um die Fehlererkennung einzuschalten, 0 um sie auszuschalten
  144. void Editor::setErrorDetection( bool on )
  145. {
  146. errorDetection = on;
  147. }
  148. // Schaltet die Warnungserkennung ein oder aus
  149. // on: 1, um die Warnungserkennung einzuschalten, 0 um sie auszuschalten
  150. void Editor::setWarningDetection( bool on )
  151. {
  152. warningDetection = on;
  153. }
  154. // gibt 1 zurück, wenn die Fehlererkennung eingeschaltet ist
  155. bool Editor::getErrorDetection() const
  156. {
  157. return errorDetection;
  158. }
  159. // gibt 1 zurück, wenn die Warnungserkennung eingeschaltet ist
  160. bool Editor::getWarningDetection() const
  161. {
  162. return warningDetection;
  163. }
  164. // Verarbeitet ein Maus Ereignis. Wird vom Framework automatisch aufgerufen.
  165. // me: Das Ereignis
  166. void Editor::doMausEreignis( MausEreignis &me )
  167. {
  168. bool nmakc = !me.verarbeitet;
  169. if( hatStyleNicht( Style::Erlaubt ) || hatStyleNicht( Style::Sichtbar ) )
  170. {
  171. if( toolTip )
  172. toolTip->setMausIn( 0 );
  173. me.mx -= pos.x, me.my -= pos.y;
  174. int rbr = 0;
  175. if( rahmen )
  176. rbr = rahmen->getRBreite();
  177. if( ( ( vertikalScrollBar && hatStyle( Style::VScroll ) ) ||
  178. ( horizontalScrollBar && hatStyle( Style::HScroll ) ) ) &&
  179. me.mx > rbr && me.mx < gr.x - rbr &&
  180. me.my > rbr && me.my < gr.y - rbr )
  181. {
  182. vertikalScrollBar->doMausMessage( gr.x - rbr - 15, rbr, 15, gr.y - rbr * 2, me );
  183. horizontalScrollBar->doMausMessage( rbr, gr.y - rbr * 2 - 15, gr.x - rbr * 2 - ( ( vertikalScrollBar && hatStyle( Style::VScroll ) ) ? 15 : 0 ), 15, me );
  184. me.verarbeitet = 1;
  185. }
  186. me.mx += pos.x, me.my += pos.y;
  187. mausKlick = 0;
  188. return;
  189. }
  190. bool removeFokus = 0;
  191. if( me.verarbeitet || !( me.mx >= pos.x && me.mx <= pos.x + gr.x && me.my >= pos.y && me.my <= pos.y + gr.y ) )
  192. {
  193. if( mausIn )
  194. {
  195. mausIn = 0;
  196. if( toolTip )
  197. toolTip->setMausIn( 0 );
  198. MausEreignis me2;
  199. me2.id = ME_Leaves;
  200. me2.mx = me.mx;
  201. me2.my = me.my;
  202. me2.verarbeitet = 0;
  203. doMausEreignis( me2 );
  204. return;
  205. }
  206. removeFokus = 1;
  207. }
  208. if( !( me.mx >= pos.x && me.mx <= pos.x + gr.x && me.my >= pos.y && me.my <= pos.y + gr.y ) && me.id != ME_Leaves )
  209. {
  210. if( removeFokus && me.id == ME_RLinks )
  211. {
  212. me.mx -= pos.x, me.my -= pos.y;
  213. if( hatStyle( Style::Fokus ) && mak && ( me.verarbeitet || mak( makParam, this, me ) ) )
  214. removeStyle( Style::Fokus );
  215. if( nmakc && me.verarbeitet && nMak )
  216. me.verarbeitet = nMak( nmakParam, this, me );
  217. me.mx += pos.x, me.my += pos.y;
  218. }
  219. if( toolTip )
  220. toolTip->setMausIn( 0 );
  221. return;
  222. }
  223. if( !mausIn && me.id != ME_Leaves )
  224. {
  225. mausIn = 1;
  226. if( toolTip )
  227. toolTip->setMausIn( 1 );
  228. MausEreignis me2;
  229. me2.id = ME_Betritt;
  230. me2.mx = me.mx;
  231. me2.my = me.my;
  232. me2.verarbeitet = 0;
  233. doMausEreignis( me2 );
  234. }
  235. me.mx -= pos.x, me.my -= pos.y;
  236. if( mak && ( me.verarbeitet || mak( makParam, this, me ) ) )
  237. {
  238. if( removeFokus && me.id == ME_RLinks )
  239. removeStyle( Style::Fokus );
  240. if( !me.verarbeitet )
  241. {
  242. if( hatStyleNicht( Style::Fokus ) )
  243. {
  244. mausKlick = 0;
  245. if( me.id == Framework::ME_PLinks )
  246. addStyle( Style::Fokus );
  247. }
  248. int rbr = 0;
  249. if( rahmen )
  250. rbr = rahmen->getRBreite();
  251. if( vertikalScrollBar && hatStyle( Style::VScroll ) )
  252. {
  253. if( vertikalScrollBar->doMausMessage( gr.x - rbr - 15, rbr, 15, gr.y - rbr * 2, me ) )
  254. {
  255. if( nmakc && me.verarbeitet && nMak )
  256. me.verarbeitet = nMak( nmakParam, this, me );
  257. me.mx += pos.x, me.my += pos.y;
  258. return;
  259. }
  260. }
  261. if( horizontalScrollBar && hatStyle( Style::HScroll ) )
  262. {
  263. if( horizontalScrollBar->doMausMessage( rbr, gr.y - rbr - 15, gr.x - rbr * 2 - ( ( vertikalScrollBar && hatStyle( Style::VScroll ) ) ? 15 : 0 ), 15, me ) )
  264. {
  265. if( nmakc && me.verarbeitet && nMak )
  266. me.verarbeitet = nMak( nmakParam, this, me );
  267. me.mx += pos.x, me.my += pos.y;
  268. return;
  269. }
  270. }
  271. if( me.mx < gr.x - rbr - 15 )
  272. {
  273. if( schrift )
  274. {
  275. schrift->setSchriftSize( 12 );
  276. bool shift = getTastenStand( T_Shift );
  277. if( me.id == Framework::ME_PLinks )
  278. {
  279. int tbr = schrift->getTextBreite( script );
  280. int thi = schrift->getTextHeight( script );
  281. int scrollHi = ( vertikalScrollBar && hatStyle( Style::VScroll ) ) ? vertikalScrollBar->getScroll() : 0;
  282. int scrollBr = ( horizontalScrollBar && hatStyle( Style::HScroll ) ) ? horizontalScrollBar->getScroll() : 0;
  283. int xxx = me.mx - rbr + scrollBr;
  284. int yyy = me.my - rbr + scrollHi;
  285. int scrollBreite = ( vertikalScrollBar && hatStyle( Style::VScroll ) ) * 15;
  286. int pos = schrift->textPos( script, xxx, yyy );
  287. if( pos != -1 )
  288. {
  289. if( shift )
  290. begF = pos;
  291. else
  292. {
  293. cPos = pos;
  294. begF = pos;
  295. }
  296. rend = 1;
  297. if( vertikalScrollBar && hatStyle( Style::VScroll ) )
  298. updateVScroll( begF );
  299. if( horizontalScrollBar && hatStyle( Style::HScroll ) )
  300. updateHScroll( begF );
  301. }
  302. mausKlick = 1;
  303. }
  304. if( me.id == ME_Bewegung && mausKlick )
  305. {
  306. int tbr = schrift->getTextBreite( script );
  307. int thi = schrift->getTextHeight( script );
  308. int scrollHi = ( vertikalScrollBar && hatStyle( Style::VScroll ) ) ? vertikalScrollBar->getScroll() : 0;
  309. int scrollBr = ( horizontalScrollBar && hatStyle( Style::HScroll ) ) ? horizontalScrollBar->getScroll() : 0;
  310. int xxx = me.mx - rbr + scrollBr;
  311. int yyy = me.my - rbr + scrollHi;
  312. int scrollBreite = ( vertikalScrollBar && hatStyle( Style::VScroll ) ) * 15;
  313. int scrollHeight = ( horizontalScrollBar && hatStyle( Style::HScroll ) ) * 15;
  314. int pos = schrift->textPos( script, xxx, yyy );
  315. if( pos != -1 )
  316. {
  317. if( begF != pos )
  318. rend = 1;
  319. begF = pos;
  320. if( vertikalScrollBar && hatStyle( Style::VScroll ) )
  321. updateVScroll( begF );
  322. if( horizontalScrollBar && hatStyle( Style::HScroll ) )
  323. updateHScroll( begF );
  324. }
  325. }
  326. if( me.id == ME_RLinks )
  327. {
  328. if( !shift )
  329. {
  330. int tbr = schrift->getTextBreite( script );
  331. int thi = schrift->getTextHeight( script );
  332. int scrollHi = ( vertikalScrollBar && hatStyle( Style::VScroll ) ) ? vertikalScrollBar->getScroll() : 0;
  333. int scrollBr = ( horizontalScrollBar && hatStyle( Style::HScroll ) ) ? horizontalScrollBar->getScroll() : 0;
  334. int xxx = me.mx - rbr + scrollBr;
  335. int yyy = me.my - rbr + scrollHi;
  336. int scrollBreite = ( vertikalScrollBar && hatStyle( Style::VScroll ) ) * 15;
  337. int scrollHeight = ( horizontalScrollBar && hatStyle( Style::HScroll ) ) * 15;
  338. int pos = schrift->textPos( script, xxx, yyy );
  339. if( pos != -1 )
  340. {
  341. begF = pos;
  342. if( vertikalScrollBar && hatStyle( Style::VScroll ) )
  343. updateVScroll( begF );
  344. if( horizontalScrollBar && hatStyle( Style::HScroll ) )
  345. updateHScroll( begF );
  346. }
  347. rend = 1;
  348. }
  349. mausKlick = 0;
  350. }
  351. }
  352. }
  353. }
  354. me.verarbeitet = 1;
  355. }
  356. if( nmakc && me.verarbeitet && nMak )
  357. me.verarbeitet = nMak( nmakParam, this, me );
  358. me.mx += pos.x, me.my += pos.y;
  359. }
  360. // Verarbeitet ein Tastatur Ereignis. Wird vom Framework automatisch aufgerufen
  361. // te: Das Ereignis
  362. void Editor::doTastaturEreignis( TastaturEreignis &te )
  363. {
  364. bool ntakc = !te.verarbeitet;
  365. if( te.verarbeitet || hatStyleNicht( Style::Fokus ) )
  366. return;
  367. if( !tak )
  368. return;
  369. ++ref;
  370. if( tak( takParam, this, te ) )
  371. {
  372. if( hatStyleNicht( Style::Erlaubt ) )
  373. {
  374. --ref;
  375. if( !ref )
  376. delete this;
  377. return;
  378. }
  379. if( te.id == TE_Press )
  380. {
  381. bool shift = getTastenStand( T_Shift );
  382. bool strg = getTastenStand( T_Strg );
  383. switch( te.taste )
  384. {
  385. case T_Entf:
  386. if( cPos != begF )
  387. script->remove( cPos, begF );
  388. else
  389. script->remove( cPos, cPos + 1 );
  390. begF = cPos;
  391. rend = 1;
  392. break;
  393. case T_BackSpace:
  394. if( cPos != begF )
  395. {
  396. script->remove( cPos, begF );
  397. if( cPos > begF )
  398. cPos -= cPos - begF;
  399. }
  400. else
  401. {
  402. script->remove( cPos - 1, cPos );
  403. --cPos;
  404. }
  405. begF = cPos;
  406. rend = 1;
  407. break;
  408. case T_Enter:
  409. if( cPos != begF )
  410. {
  411. script->remove( begF, cPos );
  412. if( cPos > begF )
  413. cPos -= cPos - begF;
  414. }
  415. script->insert( cPos, '\n' );
  416. ++cPos;
  417. begF = cPos;
  418. rend = 1;
  419. break;
  420. case T_Links:
  421. if( shift )
  422. {
  423. if( strg )
  424. begF = script->getLKick( begF );
  425. else
  426. --begF;
  427. }
  428. else
  429. {
  430. if( strg )
  431. cPos = script->getLKick( cPos );
  432. else
  433. --cPos;
  434. begF = cPos;
  435. }
  436. rend = 1;
  437. break;
  438. case T_Oben:
  439. if( shift )
  440. {
  441. begF = script->getOKick( begF );
  442. }
  443. else
  444. {
  445. cPos = script->getOKick( cPos );
  446. begF = cPos;
  447. }
  448. rend = 1;
  449. break;
  450. case T_Rechts:
  451. if( shift )
  452. {
  453. if( strg )
  454. begF = script->getRKick( begF );
  455. else
  456. ++begF;
  457. }
  458. else
  459. {
  460. if( strg )
  461. cPos = script->getRKick( cPos );
  462. else
  463. ++cPos;
  464. begF = cPos;
  465. }
  466. rend = 1;
  467. break;
  468. case T_Unten:
  469. if( shift )
  470. {
  471. begF = script->getUKick( begF );
  472. }
  473. else
  474. {
  475. cPos = script->getUKick( cPos );
  476. begF = cPos;
  477. }
  478. rend = 1;
  479. break;
  480. default:
  481. if( strg && te.id == TE_Press )
  482. {
  483. if( te.taste == 'c' || te.taste == 'C' )
  484. {
  485. if( begF != cPos )
  486. {
  487. int len = begF - cPos;
  488. if( len < 0 )
  489. len = -len;
  490. char *txt = new char[ len + 1 ];
  491. txt[ len ] = 0;
  492. int beg = begF < cPos ? begF : cPos;
  493. for( int i = beg; i < beg + len; ++i )
  494. txt[ i - beg ] = script->getText()[ i ];
  495. TextKopieren( txt );
  496. delete[] txt;
  497. }
  498. else
  499. TextKopieren( script->getText() );
  500. }
  501. if( te.taste == 'v' || te.taste == 'V' )
  502. {
  503. if( begF != cPos )
  504. {
  505. script->remove( begF, cPos );
  506. if( cPos > begF )
  507. cPos = begF;
  508. }
  509. char *txt = TextInsert();
  510. script->insert( cPos, txt );
  511. cPos += textLength( txt );
  512. begF = cPos;
  513. rend = 1;
  514. }
  515. break;
  516. }
  517. if( istSchreibbar( te.taste ) )
  518. {
  519. if( begF != cPos )
  520. {
  521. script->remove( begF, cPos );
  522. if( cPos > begF )
  523. cPos = begF;
  524. }
  525. script->insert( cPos, (char)te.taste );
  526. ++cPos;
  527. begF = cPos;
  528. rend = 1;
  529. }
  530. break;
  531. }
  532. }
  533. if( cPos < 0 )
  534. cPos = 0;
  535. if( cPos > script->getLength() )
  536. cPos = script->getLength();
  537. if( begF < 0 )
  538. begF = 0;
  539. if( begF > script->getLength() )
  540. begF = script->getLength();
  541. if( hatStyle( Style::VScroll ) )
  542. updateVScroll( begF );
  543. if( hatStyle( Style::HScroll ) )
  544. updateHScroll( begF );
  545. te.verarbeitet = 1;
  546. }
  547. lockZeichnung();
  548. if( !--reloadCounter )
  549. {
  550. reloadCounter = 10;
  551. parser->reload();
  552. }
  553. unlockZeichnung();
  554. --ref;
  555. if( ntakc && te.verarbeitet && nTak )
  556. te.verarbeitet = nTak( ntakParam, this, te );
  557. if( !ref )
  558. delete this;
  559. }
  560. // Updated den Editor
  561. // tickVal: Die vergangene Zeit in Sekunden, die seit dem Letzten Aufruf dieser Funktion verstrichen ist
  562. // return: 1, wenn das Bild neu gezeichnet werden muss. 0 sonnst
  563. bool Editor::tick( double tickval )
  564. {
  565. if( hatStyle( Style::Fokus ) )
  566. {
  567. if( tickVal < 0.5 && tickVal + tickval >= 0.5 )
  568. rend = 1;
  569. if( tickVal >= 0.5 && tickVal + tickval >= 1 )
  570. rend = 1;
  571. tickVal += tickval;
  572. if( tickVal >= 1 )
  573. {
  574. lockZeichnung();
  575. if( (reloadCounter -= 2 ) <= 0 )
  576. {
  577. reloadCounter = 10;
  578. parser->reload();
  579. }
  580. unlockZeichnung();
  581. tickVal -= 1;
  582. }
  583. }
  584. return __super::tick( tickVal );
  585. }
  586. // Zeichnet den Editor nach rObj
  587. void Editor::render( Bild &rObj )
  588. {
  589. if( hatStyleNicht( Style::Sichtbar ) )
  590. return;
  591. __super::render( rObj );
  592. if( !script || !schrift )
  593. return;
  594. lockZeichnung();
  595. if( !rObj.setDrawOptions( innenPosition, innenSize ) )
  596. {
  597. unlockZeichnung();
  598. return;
  599. }
  600. schrift->setSchriftSize( 12 );
  601. int tbr = schrift->getTextBreite( script );
  602. int thi = schrift->getTextHeight( script );
  603. int xxx = 0;
  604. int yyy = 0;
  605. int breite = innenSize.x;
  606. int height = innenSize.y;
  607. bool hs = horizontalScrollBar && hatStyle( Style::HScroll );
  608. bool vs = vertikalScrollBar && hatStyle( Style::VScroll );
  609. if( vs )
  610. yyy -= vertikalScrollBar->getScroll();
  611. if( hs )
  612. xxx -= horizontalScrollBar->getScroll();
  613. schrift->setDrawPosition( xxx, yyy );
  614. parser->reset();
  615. auto colorF = [ this, &rObj ]( int x, int y ) -> int
  616. {
  617. if( !parser )
  618. return colors[ KSGScriptEditor::ColorType::NORMAL_TEXT ];
  619. int uC = -1;
  620. int tC = colors[ parser->getNextColor( uC ) ];
  621. if( uC >= 0 )
  622. rObj.drawLinieH( x, y + 12, 12, colors[ uC ] );
  623. return tC;
  624. };
  625. if( hatStyle( Style::Fokus ) && hatStyle( Style::Erlaubt ) )
  626. {
  627. if( tickVal <= 0.5 )
  628. schrift->renderText( script, rObj, cPos, 0xFFFF5555, begF, 0xFF0000FF, colorF );
  629. else
  630. schrift->renderText( script, rObj, cPos, 0x00000000, begF, 0xFF0000FF, colorF );
  631. }
  632. else
  633. {
  634. schrift->renderText( script, rObj, colorF );
  635. }
  636. rObj.releaseDrawOptions();
  637. unlockZeichnung();
  638. }
  639. // Setzt die Farbe eines Bestimmten Codetyps
  640. // color: Die Farbe in 0xAARRGGBB Format
  641. // cType: Der Codetyp, der die Farbe bekommen soll
  642. // Setzt die Farbe eines Bestimmten Codetyps
  643. // color: Die Farbe in 0xAARRGGBB Format
  644. // cType: Der Codetyp, der die Farbe bekommen soll
  645. void Editor::setTextColor( int color, ColorType cType )
  646. {
  647. if( cType >= 0 && cType < ColorType::COLOR_ANZAHL )
  648. colors[ cType ] = color;
  649. }
  650. // Reference Counting
  651. KSGScriptEditor *Editor::getThis()
  652. {
  653. ref++;
  654. return this;
  655. }
  656. KSGScriptEditor *Editor::release()
  657. {
  658. if( !--ref )
  659. delete this;
  660. return 0;
  661. }