AlphaFeld.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #include "AlphaFeld.h"
  2. #include "Punkt.h"
  3. #include "Bild.h"
  4. #include "Scroll.h"
  5. #include "ToolTip.h"
  6. #include "Text.h"
  7. using namespace Framework;
  8. // Inhalt der AlphaFeld Klasse aus AlphaFeld.h
  9. // Konstruktor
  10. AlphaFeld::AlphaFeld()
  11. : Zeichnung(),
  12. stärke( 5 ),
  13. farbe( 0x9B000000 ),
  14. ref( 1 )
  15. {
  16. }
  17. // nicht constant
  18. void AlphaFeld::setStärke( int st ) // setzt die Stärke
  19. {
  20. stärke = st;
  21. rend = 1;
  22. }
  23. void AlphaFeld::setFarbe( int f ) // setzt die Farbe
  24. {
  25. farbe = f;
  26. rend = 1;
  27. }
  28. void AlphaFeld::render( Bild &zRObj ) // zeichnet nach zRObj
  29. {
  30. __super::render( zRObj );
  31. int br = gr.x - 1;
  32. int hö = gr.y - 1;
  33. int xp = pos.x, yp = pos.y;
  34. int a = ( farbe >> 24 ) & 0xFF;
  35. int index = ( br / 2 ) * ( br <= hö ) + ( hö / 2 ) * ( br > hö );
  36. int fc = farbe & 0x00FFFFFF;
  37. int fc2 = farbe;
  38. if( stärke > 0 )
  39. index = index > ( a / stärke ) ? a / stärke : index;
  40. if( stärke < 0 )
  41. index = index > ( ( 255 - a ) / -stärke ) ? ( ( 255 - a ) / -stärke ) : index;
  42. for( int i = 0; i < index; ++i )
  43. {
  44. a -= stärke;
  45. fc2 = ( a << 24 ) | fc;
  46. int i2 = i << 1;
  47. zRObj.drawLinieHAlpha( xp + i + 1, yp + i, br - i2, fc2 ); // oben links --- oben rechts
  48. zRObj.drawLinieVAlpha( xp + br - i, yp + i + 1, hö - i2, fc2 ); // oben rechts -- unten rechts
  49. zRObj.drawLinieHAlpha( xp + i, yp + hö - i, br - i2, fc2 ); // unten rechts - unten links
  50. zRObj.drawLinieVAlpha( xp + i, yp + i, hö - i2, fc2 ); // unten links -- oben links
  51. }
  52. if( index == br / 2 )
  53. {
  54. for( int i = index; i <= index + ( br - index ) - index; ++i )
  55. zRObj.drawLinieVAlpha( xp + i, yp + index, hö - ( index << 1 ) + 1, fc2 ); // rest Fläche senkrecht
  56. }
  57. else
  58. {
  59. for( int i = index; i <= index + ( hö - index ) - index; ++i )
  60. zRObj.drawLinieHAlpha( xp + index, yp + i, br - ( index << 1 ) + 1, fc2 ); // rest Fläche waagerecht
  61. }
  62. }
  63. // constant
  64. int AlphaFeld::getStärke() const // gibt die Stärke zurück
  65. {
  66. return stärke;
  67. }
  68. int AlphaFeld::getFarbe() const // gibt die Farbe zurück
  69. {
  70. return farbe;
  71. }
  72. Zeichnung *AlphaFeld::dublizieren() const // Kopiert das Zeichnung
  73. {
  74. AlphaFeld *obj = new AlphaFeld();
  75. obj->setPosition( pos );
  76. obj->setGröße( gr );
  77. obj->setMausEreignisParameter( makParam );
  78. obj->setTastaturEreignisParameter( takParam );
  79. obj->setMausEreignis( Mak );
  80. obj->setTastaturEreignis( Tak );
  81. if( toolTip )
  82. obj->setToolTipText( toolTip->zText()->getText(), toolTip->zBildschirm() );
  83. obj->setStärke( stärke );
  84. obj->setFarbe( farbe );
  85. return obj;
  86. }
  87. // Reference Counting
  88. AlphaFeld *AlphaFeld::getThis()
  89. {
  90. ++ref;
  91. return this;
  92. }
  93. AlphaFeld *AlphaFeld::release()
  94. {
  95. --ref;
  96. if( !ref )
  97. delete this;
  98. return 0;
  99. }