#include "RightTools.h" #include "../../../Initialisierung/Initialisierung.h" RightTool::RightTool() : Zeichnung() { ref = 1; } RightTool::~RightTool() {} RightTool *RightTool::getThis() { ref++; return this; } RightTool *RightTool::release() { if( !--ref ) delete this; return 0; } RightTools::RightTools( Schrift *zSchrift, Punkt maxSize ) : ZeichnungHintergrund() { ref = 1; this->maxSize = maxSize; toolAuswahl = initAuswahlBox( 5, 5, 290, 20, zSchrift, AuswahlBox::Style::Normal, {} ); toolAuswahl->setEventAktion( [ this ]( void *, AuswahlBox *, int, int neu ) { this->selectTool( neu ); } ); tools = new RCArray< RightTool >(); setSize( 300, maxSize.y ); setPosition( maxSize.x - 300, 0 ); setStyle( ZeichnungHintergrund::Style::Sichtbar | ZeichnungHintergrund::Style::Rahmen | ZeichnungHintergrund::Style::Hintergrund ); setHintergrundFarbe( 0xFF000000 ); setLinienRahmenBreite( 1 ); setLinienRahmenFarbe( 0xFFFFFFFF ); } RightTools::~RightTools() { tools->release(); toolAuswahl->release(); } void RightTools::addTool( RightTool *tool, char *name ) { if( !toolAuswahl->getEintragAnzahl() ) tool->addStyle( Zeichnung::Style::Sichtbar ); toolAuswahl->addEintrag( name ); tools->add( tool ); tool->setPosition( 5, 30 ); tool->setSize( 290, maxSize.y - 35 ); } void RightTools::doMausEreignis( MausEreignis &me ) { me.mx -= pos.x, me.my -= pos.y; toolAuswahl->doMausEreignis( me ); int anz = tools->getEintragAnzahl(); for( int i = 0; i < anz; i++ ) { tools->z( i )->doMausEreignis( me ); } me.mx += pos.x, me.my += pos.y; } void RightTools::doTastaturEreignis( TastaturEreignis &te ) { toolAuswahl->doTastaturEreignis( te ); int anz = tools->getEintragAnzahl(); for( int i = 0; i < anz; i++ ) { tools->z( i )->doTastaturEreignis( te ); } } bool RightTools::tick( double tickVal ) { bool ret = __super::tick( tickVal ); ret |= toolAuswahl->tick( tickVal ); int anz = tools->getEintragAnzahl(); for( int i = 0; i < anz; i++ ) { ret |= tools->z( i )->tick( tickVal ); } return ret; } void RightTools::render( Bild &rObj ) { __super::render( rObj ); if( rObj.setDrawOptions( pos, gr ) ) { toolAuswahl->render( rObj ); int anz = tools->getEintragAnzahl(); for( int i = 0; i < anz; i++ ) { tools->z( i )->render( rObj ); } rObj.releaseDrawOptions(); } } void RightTools::selectTool( int index ) { int i = 0; for( auto e = tools->getArray(); e.set; e++ ) e.var->setStyle( Zeichnung::Style::Sichtbar, i++ == index ); } RightTools *RightTools::getThis() { ref++; return this; } RightTools *RightTools::release() { if( !--ref ) delete this; return 0; }