AlphaFeld.cpp 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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. strength( 5 ),
  13. farbe( 0x9B000000 )
  14. {}
  15. AlphaFeld::~AlphaFeld()
  16. {}
  17. // nicht constant
  18. void AlphaFeld::setStrength( int st ) // setzt die Stärke
  19. {
  20. strength = 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. Zeichnung::render( zRObj );
  31. int br = gr.x - 1;
  32. int hi = gr.y - 1;
  33. int xp = pos.x, yp = pos.y;
  34. int a = ( farbe >> 24 ) & 0xFF;
  35. int index = ( br / 2 ) * ( br <= hi ) + ( hi / 2 ) * ( br > hi );
  36. int fc = farbe & 0x00FFFFFF;
  37. int fc2 = farbe;
  38. if( strength > 0 )
  39. index = index > ( a / strength ) ? a / strength : index;
  40. if( strength < 0 )
  41. index = index > ( ( 255 - a ) / -strength ) ? ( ( 255 - a ) / -strength ) : index;
  42. for( int i = 0; i < index; ++i )
  43. {
  44. a -= strength;
  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, hi - i2, fc2 ); // oben rechts -- unten rechts
  49. zRObj.drawLinieHAlpha( xp + i, yp + hi - i, br - i2, fc2 ); // unten rechts - unten links
  50. zRObj.drawLinieVAlpha( xp + i, yp + i, hi - 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, hi - ( index << 1 ) + 1, fc2 ); // rest Fläche senkrecht
  56. }
  57. else
  58. {
  59. for( int i = index; i <= index + ( hi - 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::getStrength() const // gibt die Stärke zurück
  65. {
  66. return strength;
  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->setSize( 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->setStrength( strength );
  84. obj->setFarbe( farbe );
  85. return obj;
  86. }