#include "Rahmen.h" #include "Punkt.h" #include "Farbe.h" #include "Bild.h" using namespace Framework; // Inhalt der LRahmen Klasse aus Rahmen.h // Konstruktor LRahmen::LRahmen() : Objekt() { br = 1; farbe = new Farbe( 0, 0, 0 ); Alpha = 0; ref = 1; } // Destruktor LRahmen::~LRahmen() { farbe->release(); } // nicht constant void LRahmen::setRamenBreite( int br ) // setzt die Breite des Rahmens { lockObjekt(); this->br = br; unlockObjekt(); } void LRahmen::setAlpha( bool a ) // Legt fest, ob der Alphawert der Farbe berücksichtigt werden soll { lockObjekt(); Alpha = a; unlockObjekt(); } void LRahmen::setFarbe( Farbe *f ) // Legt die Farbe des Rahmens fest { lockObjekt(); if( !farbe ) farbe = new Farbe(); farbe->setFarbe( f->getFarbe() ); f->release(); unlockObjekt(); } void LRahmen::setFarbe( int fc ) { lockObjekt(); if( !farbe ) farbe = new Farbe(); farbe->setFarbe( fc ); unlockObjekt(); } void LRahmen::setFarbeZ( Farbe *f ) // setzt einen Zeiger zur Farbe { lockObjekt(); if( farbe ) farbe->release(); farbe = f; unlockObjekt(); } void LRahmen::render( Bild *Obj ) // Zeichnet den Rahmen in das Renderobjekt { lockObjekt(); int x = pos->x; int y = pos->y; int b = x + gr->x - 1; int h = y + gr->y - 1; int fc = farbe->getFarbe(); if( Alpha ) { for( int i = 0; i < br; i++ ) { Obj->drawLinieHAlpha( x + i + 1, y + i, gr->x - i * 2 - 1, fc ); Obj->drawLinieVAlpha( b - i, y + i + 1, gr->y - i * 2 - 2, fc ); Obj->drawLinieHAlpha( x + i + 1, h - i, gr->x - i * 2 - 1, fc ); Obj->drawLinieVAlpha( x + i, y + i, gr->y - i * 2, fc ); } } else { for( int i = 0; i < br; i++ ) { Obj->drawLinieH( x + i + 1, y + i, gr->x - i * 2 - 1, fc ); Obj->drawLinieV( b - i, y + i + 1, gr->y - i * 2 - 2, fc ); Obj->drawLinieH( x + i + 1, h - i, gr->x - i * 2 - 1, fc ); Obj->drawLinieV( x + i, y + i, gr->y - i * 2, fc ); } } unlockObjekt(); } void LRahmen::render( int xOff, int yOff, int bOff, int hOff, Bild *Obj ) { lockObjekt(); Obj->setDrawOptions( xOff, yOff, xOff + bOff, yOff + hOff ); int x = xOff + pos->x; int y = yOff + pos->y; int b = x + gr->x - 1; int h = y + gr->y - 1; int fc = farbe->getFarbe(); if( Alpha ) { for( int i = 0; i < br; i++ ) { Obj->drawLinieHAlpha( x + i + 1, y + i, gr->x - i * 2 - 1, fc ); Obj->drawLinieVAlpha( b - i, y + i + 1, gr->y - i * 2 - 2, fc ); Obj->drawLinieHAlpha( x + i + 1, h - i, gr->x - i * 2 - 1, fc ); Obj->drawLinieVAlpha( x + i, y + i, gr->y - i * 2, fc ); } } else { for( int i = 0; i < br; i++ ) { Obj->drawLinieH( x + i + 1, y + i, gr->x - i * 2 - 1, fc ); Obj->drawLinieV( b - i, y + i + 1, gr->y - i * 2 - 2, fc ); Obj->drawLinieH( x + i + 1, h - i, gr->x - i * 2 - 1, fc ); Obj->drawLinieV( x + i, y + i, gr->y - i * 2, fc ); } } Obj->setDrawOptions( -1, -1, -1, -1 ); unlockObjekt(); } // constant int LRahmen::getRBreite() const // Gibt die Breite des Rahmens zurück { return br; } Farbe *LRahmen::getFarbe() const // Gibt die Farbe des Ramens zurück { return farbe->getThis(); } int LRahmen::getFarbeCode() const // Gibt die Farbe des Ramens zurück { return farbe->getFarbe(); } Farbe *LRahmen::zFarbe() const { return farbe; } bool LRahmen::hatAlpha() const // Gibt zurück, ob der Alphawert der Farbe beachtet wird { return Alpha; } // Reference Counting LRahmen *LRahmen::getThis() { ref++; return this; } LRahmen *LRahmen::release() { ref--; if( ref == 0 ) delete this; return 0; }