AlphaFeld.cpp 2.8 KB

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