AlphaFeld.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #include "AlphaFeld.h"
  2. #include "Bild.h"
  3. #include "Punkt.h"
  4. #include "Scroll.h"
  5. #include "Text.h"
  6. #include "ToolTip.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. // nicht constant
  17. void AlphaFeld::setStrength(int st) // setzt die Stärke
  18. {
  19. strength = 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. Zeichnung::render(zRObj);
  30. int br = gr.x - 1;
  31. int hi = gr.y - 1;
  32. int xp = pos.x, yp = pos.y;
  33. int a = (farbe >> 24) & 0xFF;
  34. int index = (br / 2) * (br <= hi) + (hi / 2) * (br > hi);
  35. int fc = farbe & 0x00FFFFFF;
  36. int fc2 = farbe;
  37. if (strength > 0) index = index > (a / strength) ? a / strength : index;
  38. if (strength < 0)
  39. index
  40. = index > ((255 - a) / -strength) ? ((255 - a) / -strength) : index;
  41. for (int i = 0; i < index; ++i)
  42. {
  43. a -= strength;
  44. fc2 = (a << 24) | fc;
  45. int i2 = i << 1;
  46. zRObj.drawLinieHAlpha(
  47. xp + i + 1, yp + i, br - i2, fc2); // oben links --- oben rechts
  48. zRObj.drawLinieVAlpha(xp + br - i,
  49. yp + i + 1,
  50. hi - i2,
  51. fc2); // oben rechts -- unten rechts
  52. zRObj.drawLinieHAlpha(
  53. xp + i, yp + hi - i, br - i2, fc2); // unten rechts - unten links
  54. zRObj.drawLinieVAlpha(
  55. xp + i, yp + i, hi - i2, fc2); // unten links -- oben links
  56. }
  57. if (index == br / 2)
  58. {
  59. for (int i = index; i <= index + (br - index) - index; ++i)
  60. zRObj.drawLinieVAlpha(xp + i,
  61. yp + index,
  62. hi - (index << 1) + 1,
  63. fc2); // rest Fläche senkrecht
  64. }
  65. else
  66. {
  67. for (int i = index; i <= index + (hi - index) - index; ++i)
  68. zRObj.drawLinieHAlpha(xp + index,
  69. yp + i,
  70. br - (index << 1) + 1,
  71. fc2); // rest Fläche waagerecht
  72. }
  73. }
  74. // constant
  75. int AlphaFeld::getStrength() const // gibt die Stärke zurück
  76. {
  77. return strength;
  78. }
  79. int AlphaFeld::getFarbe() const // gibt die Farbe zurück
  80. {
  81. return farbe;
  82. }
  83. Zeichnung* AlphaFeld::dublizieren() const // Kopiert das Zeichnung
  84. {
  85. AlphaFeld* obj = new AlphaFeld();
  86. obj->setPosition(pos);
  87. obj->setSize(gr);
  88. obj->setMausEreignisParameter(makParam);
  89. obj->setTastaturEreignisParameter(takParam);
  90. obj->setMausEreignis(mak);
  91. obj->setTastaturEreignis(tak);
  92. if (toolTip) obj->setToolTipZ((ToolTip*)toolTip->dublizieren());
  93. obj->setStrength(strength);
  94. obj->setFarbe(farbe);
  95. return obj;
  96. }