Rahmen.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #include "Rahmen.h"
  2. #include "Punkt.h"
  3. #include "Farbe.h"
  4. #include "Bild.h"
  5. using namespace Framework;
  6. // Inhalt der LRahmen Klasse aus Rahmen.h
  7. // Konstruktor
  8. LRahmen::LRahmen()
  9. : Objekt()
  10. {
  11. br = 1;
  12. farbe = new Farbe( 0, 0, 0 );
  13. Alpha = 0;
  14. ref = 1;
  15. }
  16. // Destruktor
  17. LRahmen::~LRahmen()
  18. {
  19. farbe->release();
  20. }
  21. // nicht constant
  22. void LRahmen::setRamenBreite( int br ) // setzt die Breite des Rahmens
  23. {
  24. lockObjekt();
  25. this->br = br;
  26. unlockObjekt();
  27. }
  28. void LRahmen::setAlpha( bool a ) // Legt fest, ob der Alphawert der Farbe berücksichtigt werden soll
  29. {
  30. lockObjekt();
  31. Alpha = a;
  32. unlockObjekt();
  33. }
  34. void LRahmen::setFarbe( Farbe *f ) // Legt die Farbe des Rahmens fest
  35. {
  36. lockObjekt();
  37. if( !farbe )
  38. farbe = new Farbe();
  39. farbe->setFarbe( f->getFarbe() );
  40. f->release();
  41. unlockObjekt();
  42. }
  43. void LRahmen::setFarbe( int fc )
  44. {
  45. lockObjekt();
  46. if( !farbe )
  47. farbe = new Farbe();
  48. farbe->setFarbe( fc );
  49. unlockObjekt();
  50. }
  51. void LRahmen::setFarbeZ( Farbe *f ) // setzt einen Zeiger zur Farbe
  52. {
  53. lockObjekt();
  54. if( farbe )
  55. farbe->release();
  56. farbe = f;
  57. unlockObjekt();
  58. }
  59. void LRahmen::render( Bild *Obj ) // Zeichnet den Rahmen in das Renderobjekt
  60. {
  61. lockObjekt();
  62. int x = pos->x;
  63. int y = pos->y;
  64. int b = x + gr->x - 1;
  65. int h = y + gr->y - 1;
  66. int fc = farbe->getFarbe();
  67. if( Alpha )
  68. {
  69. for( int i = 0; i < br; i++ )
  70. {
  71. Obj->drawLinieHAlpha( x + i + 1, y + i, gr->x - i * 2 - 1, fc );
  72. Obj->drawLinieVAlpha( b - i, y + i + 1, gr->y - i * 2 - 2, fc );
  73. Obj->drawLinieHAlpha( x + i + 1, h - i, gr->x - i * 2 - 1, fc );
  74. Obj->drawLinieVAlpha( x + i, y + i, gr->y - i * 2, fc );
  75. }
  76. }
  77. else
  78. {
  79. for( int i = 0; i < br; i++ )
  80. {
  81. Obj->drawLinieH( x + i + 1, y + i, gr->x - i * 2 - 1, fc );
  82. Obj->drawLinieV( b - i, y + i + 1, gr->y - i * 2 - 2, fc );
  83. Obj->drawLinieH( x + i + 1, h - i, gr->x - i * 2 - 1, fc );
  84. Obj->drawLinieV( x + i, y + i, gr->y - i * 2, fc );
  85. }
  86. }
  87. unlockObjekt();
  88. }
  89. void LRahmen::render( int xOff, int yOff, int bOff, int hOff, Bild *Obj )
  90. {
  91. lockObjekt();
  92. Obj->setDrawOptions( xOff, yOff, xOff + bOff, yOff + hOff );
  93. int x = xOff + pos->x;
  94. int y = yOff + pos->y;
  95. int b = x + gr->x - 1;
  96. int h = y + gr->y - 1;
  97. int fc = farbe->getFarbe();
  98. if( Alpha )
  99. {
  100. for( int i = 0; i < br; i++ )
  101. {
  102. Obj->drawLinieHAlpha( x + i + 1, y + i, gr->x - i * 2 - 1, fc );
  103. Obj->drawLinieVAlpha( b - i, y + i + 1, gr->y - i * 2 - 2, fc );
  104. Obj->drawLinieHAlpha( x + i + 1, h - i, gr->x - i * 2 - 1, fc );
  105. Obj->drawLinieVAlpha( x + i, y + i, gr->y - i * 2, fc );
  106. }
  107. }
  108. else
  109. {
  110. for( int i = 0; i < br; i++ )
  111. {
  112. Obj->drawLinieH( x + i + 1, y + i, gr->x - i * 2 - 1, fc );
  113. Obj->drawLinieV( b - i, y + i + 1, gr->y - i * 2 - 2, fc );
  114. Obj->drawLinieH( x + i + 1, h - i, gr->x - i * 2 - 1, fc );
  115. Obj->drawLinieV( x + i, y + i, gr->y - i * 2, fc );
  116. }
  117. }
  118. Obj->setDrawOptions( -1, -1, -1, -1 );
  119. unlockObjekt();
  120. }
  121. // constant
  122. int LRahmen::getRBreite() const // Gibt die Breite des Rahmens zurück
  123. {
  124. return br;
  125. }
  126. Farbe *LRahmen::getFarbe() const // Gibt die Farbe des Ramens zurück
  127. {
  128. return farbe->getThis();
  129. }
  130. int LRahmen::getFarbeCode() const // Gibt die Farbe des Ramens zurück
  131. {
  132. return farbe->getFarbe();
  133. }
  134. Farbe *LRahmen::zFarbe() const
  135. {
  136. return farbe;
  137. }
  138. bool LRahmen::hatAlpha() const // Gibt zurück, ob der Alphawert der Farbe beachtet wird
  139. {
  140. return Alpha;
  141. }
  142. // Reference Counting
  143. LRahmen *LRahmen::getThis()
  144. {
  145. ref++;
  146. return this;
  147. }
  148. LRahmen *LRahmen::release()
  149. {
  150. ref--;
  151. if( ref == 0 )
  152. delete this;
  153. return 0;
  154. }