Bild.h 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415
  1. #ifndef Bild_H
  2. #define Bild_H
  3. #include "Array.h"
  4. #include "Zeichnung.h"
  5. #include "Punkt.h"
  6. namespace Framework
  7. {
  8. class Bild; // aus dieser Datei
  9. #ifdef WIN32
  10. class VScrollBar; // Scroll.h
  11. class HScrollBar; // Scroll.h
  12. struct VScrollData; // Scroll.h
  13. struct HScrollData; // Scroll.h
  14. class Rahmen; // Rahmen.h
  15. struct MausEreignis; // Mausereignis.h
  16. class Text; // Text.h
  17. #endif
  18. // Verwaltet ein Bild als Array von Pixel Farben im A8R8G8B8 Format, in den gezeichnet werden kann
  19. class Bild
  20. {
  21. private:
  22. int *fc;
  23. bool delFc;
  24. Punkt size;
  25. int ref;
  26. Punkt *drawOff;
  27. Punkt *dPosA;
  28. Punkt *dSizeA;
  29. int doa;
  30. unsigned char *alpha;
  31. int alphaAnzahl;
  32. bool rend;
  33. bool alpha3D;
  34. // privat
  35. inline void alphaPixelP( int x, int y, int f );
  36. inline void alphaPixelP( int &fc, int f );
  37. inline char getOutCode( Punkt p ) const;
  38. void drawFlatDreieck( int y1, int y2, float m1, float b1, float m2, float b2, int farbe );
  39. void drawFlatDreieckTextur( int y1, int y2, double m1, double b1, double m2, double b2, double tx1, double ty1, double tx2, double ty2,
  40. double tx_1o, double ty_1o, double tx_2o, double ty_2o, double txf, double tyf, Bild &textur );
  41. void drawFlatDreieckAlpha( int y1, int y2, float m1, float b1, float m2, float b2, int farbe );
  42. void drawFlatDreieckTexturAlpha( int y1, int y2, double m1, double b1, double m2, double b2, double tx1, double ty1, double tx2, double ty2,
  43. double tx_1o, double ty_1o, double tx_2o, double ty_2o, double txf, double tyf, Bild &textur );
  44. void drawLinieHTextur( Vec2< double > p, double length, Vec2< double > ta, Vec2< double > tb, double txo, double tyo, Bild &textur );
  45. void drawLinieHTexturAlpha( Vec2< double > p, double length, Vec2< double > ta, Vec2< double > tb, double txo, double tyo, Bild &textur );
  46. public:
  47. // Konstruktor
  48. // options: 1, wenn das Bild Buffer zum Zeichnen anlegen soll, wie zum Beispiel für temporäre Zeichnenflächen Begrenzungen und Transparenz Filter
  49. // Verbraucht etwa 50 kb mehr Arbeitsspeicher pro Bild
  50. __declspec( dllexport ) Bild( bool options = 0 );
  51. // Destruktor
  52. __declspec( dllexport ) ~Bild();
  53. // Prüft ob ein Rechteck vollständig oder teilweise in der Zeichen Fläche liegt.
  54. // return 0, falls das Rechteck nicht in der Zeichenfläche liegt, 1 sonst
  55. __declspec( dllexport ) bool isAreaDrawable( int x, int y, int width, int height );
  56. // Wird dieser Flag gesetzt, so wird beim Alpha Blending wenn die vorheriege Farbe 0 ist nur die neue mit ihrem Alpha Wert kopiert.
  57. // Das ist sinnvoll für die Verwendung im 3DBildschirm, wo das Gezeichnette Bild später mittels Alpha Blending angezeigt wird.
  58. // Der Flag wird im 3DBildschirm automatisch gesetzt
  59. __declspec( dllexport ) void setAlpha3D( bool erlaubt );
  60. // Setzt die mindest Transparenz von allem was als nächstes gezeichnet wird, bis der zugehörige releaseAlpha() aufruf erfolgt.
  61. __declspec( dllexport ) void setAlpha( unsigned char alpha );
  62. // Entfernt die als letztes mit setAlpha() gesetzte Alpha grenze
  63. __declspec( dllexport ) void releaseAlpha();
  64. // Setzt einen Zeiger auf die Pixel, in die gezeichnet werden soll
  65. // buffer: Ein Array mit den A8R8G8B8 Farbwerten
  66. // deleteBuffer: 1, fals der Array vom Bild gelöscht werden soll
  67. // breite: Die Breite in Pixeln
  68. // height: Die Höhe in Pixeln
  69. __declspec( dllexport ) void setPixelBuffer( int *buffer, bool deleteBuffer, int breite, int height );
  70. // Erstellt ein neues Bild
  71. // breite: Die Breite des Bildes in Pixeln
  72. // höhe: Die Höhe des Bildes in Pixeln
  73. // fillColor: Die startfarbe, auf die alle Pixel gesetzt werden
  74. __declspec( dllexport ) void neuBild( int breite, int height, int fillColor );
  75. // Blendet mittels Alphablending eine Farbe auf einen bestimmten Pixel
  76. // Beachtet nicht die begrenzung der Zeichnenfläche und das Skroll Offset
  77. // x: Die X Koordinate des Pixels
  78. // y: Die Y Koordinate des Pixels
  79. // f: Die Farbe in A8R8G8B8 Format, die geblendet werden soll
  80. __declspec( dllexport ) void alphaPixel( int x, int y, int f );
  81. // Blendet mittels Alphablending eine Farbe auf einen bestimmten Pixel
  82. // Beachtet nicht die begrenzung der Zeichnenfläche und das Skroll Offset
  83. // i: Der Index des Pixels im Pixel Array
  84. // f: Die Farbe in A8R8G8B8 Format, die geblendet werden soll
  85. __declspec( dllexport ) void alphaPixel( int i, int f );
  86. // Blendet mittels Alphablending eine Farbe auf einen bestimmten Pixel
  87. // x: Die X Koordinate des Pixels
  88. // y: Die Y Koordinate des Pixels
  89. // f: Die Farbe in A8R8G8B8 Format, die geblendet werden soll
  90. __declspec( dllexport ) void alphaPixelDP( int x, int y, int f );
  91. // Blendet mittels Alphablending eine Farbe auf einen bestimmten Pixel
  92. // i: Der Index des Pixels im Pixel Array
  93. // f: Die Farbe in A8R8G8B8 Format, die geblendet werden soll
  94. __declspec( dllexport ) void alphaPixelDP( int i, int f );
  95. // Setzt die Farbe eines besimmten Pixels
  96. // x: Die X Koordinate des Pixels
  97. // y: Die Y Koordinate des Pixels
  98. // f: Die neue Farbe in A8R8G8B8 Format
  99. __declspec( dllexport ) void setPixelDP( int x, int y, int f );
  100. // Setzt die Farbe eines besimmten Pixels
  101. // i: Der Index des Pixels im Pixel Array
  102. // f: Die neue Farbe in A8R8G8B8 Format
  103. __declspec( dllexport ) void setPixelDP( int i, int f );
  104. // Setzt die Farbe aller Pixel des Bildes
  105. // f: Die neue Farbe
  106. __declspec( dllexport ) void setFarbe( int f );
  107. // Setzt die Farben aller Pixel in einem Rechteck
  108. // x: Die X Koordinate
  109. // y: Die Y Koordinate
  110. // b: Die Breite des Rechtecks
  111. // h: Die Höhe des Rechtecks
  112. // fc: Die Farbe im A8R8G8B8 Format
  113. __declspec( dllexport ) void fillRegion( int x, int y, int b, int h, int fc );
  114. // Blendet eine Farbe mit Alphablending in einem Rechteck
  115. // x: Die X Koordinate
  116. // y: Die Y Koordinate
  117. // b: Die Breite des Rechtecks
  118. // h: Die Höhe des Rechtecks
  119. // fc: Die Farbe im A8R8G8B8 Format
  120. __declspec( dllexport ) void alphaRegion( int x, int y, int b, int h, int fc );
  121. // Zeichnet eine horizontale Linie
  122. // x: Die X Koordinate des Startpunktes der Linie
  123. // y: Die Y Koordinate des Startpunktes der Linie
  124. // length: Die Länge der Linie
  125. // fc: Die Farbe im A8R8G8B8 Format
  126. __declspec( dllexport ) void drawLinieH( int x, int y, int length, int fc );
  127. // Zeichnet eine vertikale Linie
  128. // x: Die X Koordinate des Startpunktes der Linie
  129. // y: Die Y Koordinate des Startpunktes der Linie
  130. // length: Die Länge der Linie
  131. // fc: Die Farbe im A8R8G8B8 Format
  132. __declspec( dllexport ) void drawLinieV( int x, int y, int length, int fc );
  133. // Zeichnet eine horizontale Linie mit Alpha blending
  134. // x: Die X Koordinate des Startpunktes der Linie
  135. // y: Die Y Koordinate des Startpunktes der Linie
  136. // length: Die Länge der Linie
  137. // fc: Die Farbe im A8R8G8B8 Format
  138. __declspec( dllexport ) void drawLinieHAlpha( int x, int y, int length, int fc );
  139. // Zeichnet eine vertikale Linie mit Alpha Blending
  140. // x: Die X Koordinate des Startpunktes der Linie
  141. // y: Die Y Koordinate des Startpunktes der Linie
  142. // length: Die Länge der Linie
  143. // fc: Die Farbe im A8R8G8B8 Format
  144. __declspec( dllexport ) void drawLinieVAlpha( int x, int y, int length, int fc );
  145. // Zeichnet eine Linie
  146. // a: Der Startpunkt der Linie
  147. // b: der Endpunkt der Linie
  148. // fc: Die Farbe im A8R8G8B8 Format
  149. __declspec( dllexport ) void drawLinieBordered( Punkt a, Punkt b, int bc, int fc );
  150. // Zeichnet eine Linie
  151. // a: Der Startpunkt der Linie
  152. // b: der Endpunkt der Linie
  153. // fc: Die Farbe im A8R8G8B8 Format
  154. __declspec( dllexport ) void drawLinieBorderedAlpha( Punkt a, Punkt b, int bc, int fc );
  155. // Zeichnet eine Linie
  156. // a: Der Startpunkt der Linie
  157. // b: der Endpunkt der Linie
  158. // fc: Die Farbe im A8R8G8B8 Format
  159. __declspec( dllexport ) void drawLinie( Punkt a, Punkt b, int fc );
  160. // Zeichnet eine Linie mit Alpha Blending
  161. // a: Der Startpunkt der Linie
  162. // b: der Endpunkt der Linie
  163. // fc: Die Farbe im A8R8G8B8 Format
  164. __declspec( dllexport ) void drawLinieAlpha( Punkt a, Punkt b, int fc );
  165. // Füllt einen Kreis mit einer Farbe. (Unfertig)
  166. // xOff: Die X Koordinate des Kreismittelpunktes
  167. // yOff: Die Y Koordinate des Kreismittelpunktes
  168. // r: Der Radius des Kreises in Pixeln
  169. // fc: Die Farbe im A8R8G8B8 Format
  170. __declspec( dllexport ) void fillCircle( int xOff, int yOff, int r, int fc );
  171. // Zeichnet den Umriss eines Kreises
  172. // xOff: Die X Koordinate des Kreismittelpunktes
  173. // yOff: Die Y Koordinate des Kreismittelpunktes
  174. // r: Der Radius des Kreises in Pixeln
  175. // fc: Die Farbe im A8R8G8B8 Format
  176. __declspec( dllexport ) void drawKreis( int xOff, int yOff, int r, int fc );
  177. // Zeichnet den Umriss eines Kreises mit Alpha Blending
  178. // xOff: Die X Koordinate des Kreismittelpunktes
  179. // yOff: Die Y Koordinate des Kreismittelpunktes
  180. // r: Der Radius des Kreises in Pixeln
  181. // fc: Die Farbe im A8R8G8B8 Format
  182. __declspec( dllexport ) void drawKreisAlpha( int xOff, int yOff, int r, int fc );
  183. // Zeichnet ein Bild in ein bestimmtes Feld ohne Skallierung
  184. // x: Die X Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
  185. // y: Die Y Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
  186. // br: Die Breite des Rechecks in dem das Bild gezeichnet werden soll
  187. // hi: Die Höhe des Rechecks in dem das Bild gezeichnet werden soll
  188. // zBild: Das Bild, was gezeichnet werden soll
  189. __declspec( dllexport ) void drawBild( int x, int y, int br, int hi, Bild &zBild );
  190. // Zeichnet ein Bild in ein bestimmtes Feld ohne Skallierung mit alpha blending
  191. // x: Die X Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
  192. // y: Die Y Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
  193. // br: Die Breite des Rechecks in dem das Bild gezeichnet werden soll
  194. // hi: Die Höhe des Rechecks in dem das Bild gezeichnet werden soll
  195. // zBild: Das Bild, was gezeichnet werden soll
  196. __declspec( dllexport ) void alphaBild( int x, int y, int br, int hi, Bild &zBild );
  197. // Zeichnet ein Bild um 90 grad nach rechts gedreht in ein bestimmtes Feld ohne Skallierung
  198. // x: Die X Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
  199. // y: Die Y Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
  200. // br: Die Breite des Rechecks in dem das Bild gezeichnet werden soll
  201. // hi: Die Höhe des Rechecks in dem das Bild gezeichnet werden soll
  202. // zBild: Das Bild, was gezeichnet werden soll
  203. __declspec( dllexport ) void drawBild90( int x, int y, int br, int hi, Bild &zBild );
  204. // Zeichnet ein Bild um 90 grad nach rechts gedreht in ein bestimmtes Feld ohne Skallierung mit alpha Blending
  205. // x: Die X Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
  206. // y: Die Y Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
  207. // br: Die Breite des Rechecks in dem das Bild gezeichnet werden soll
  208. // hi: Die Höhe des Rechecks in dem das Bild gezeichnet werden soll
  209. // zBild: Das Bild, was gezeichnet werden soll
  210. __declspec( dllexport ) void alphaBild90( int x, int y, int br, int hi, Bild &zBild );
  211. // Zeichnet ein Bild um 180 grad nach rechts gedreht in ein bestimmtes Feld ohne Skallierung
  212. // x: Die X Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
  213. // y: Die Y Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
  214. // br: Die Breite des Rechecks in dem das Bild gezeichnet werden soll
  215. // hi: Die Höhe des Rechecks in dem das Bild gezeichnet werden soll
  216. // zBild: Das Bild, was gezeichnet werden soll
  217. __declspec( dllexport ) void drawBild180( int x, int y, int br, int hi, Bild &zBild );
  218. // Zeichnet ein Bild um 180 grad nach rechts gedreht in ein bestimmtes Feld ohne Skallierung mit alpha Blending
  219. // x: Die X Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
  220. // y: Die Y Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
  221. // br: Die Breite des Rechecks in dem das Bild gezeichnet werden soll
  222. // hi: Die Höhe des Rechecks in dem das Bild gezeichnet werden soll
  223. // zBild: Das Bild, was gezeichnet werden soll
  224. __declspec( dllexport ) void alphaBild180( int x, int y, int br, int hi, Bild &zBild );
  225. // Zeichnet ein Bild um 270 grad nach rechts gedreht in ein bestimmtes Feld ohne Skallierung
  226. // x: Die X Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
  227. // y: Die Y Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
  228. // br: Die Breite des Rechecks in dem das Bild gezeichnet werden soll
  229. // hi: Die Höhe des Rechecks in dem das Bild gezeichnet werden soll
  230. // zBild: Das Bild, was gezeichnet werden soll
  231. __declspec( dllexport ) void drawBild270( int x, int y, int br, int hi, Bild &zBild );
  232. // Zeichnet ein Bild um 270 grad nach rechts gedreht in ein bestimmtes Feld ohne Skallierung mit alpha Blending
  233. // x: Die X Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
  234. // y: Die Y Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
  235. // br: Die Breite des Rechecks in dem das Bild gezeichnet werden soll
  236. // hi: Die Höhe des Rechecks in dem das Bild gezeichnet werden soll
  237. // zBild: Das Bild, was gezeichnet werden soll
  238. __declspec( dllexport ) void alphaBild270( int x, int y, int br, int hi, Bild &zBild );
  239. // Zeichnet ein Bild in ein bestimmtes Feld mit Skallierung
  240. // x: Die X Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
  241. // y: Die Y Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
  242. // br: Die Breite des Rechecks in dem das Bild gezeichnet werden soll
  243. // hi: Die Höhe des Rechecks in dem das Bild gezeichnet werden soll
  244. // zBild: Das Bild, was gezeichnet werden soll
  245. __declspec( dllexport ) void drawBildSkall( int x, int y, int br, int hi, Bild &zBild );
  246. // Zeichnet ein Bild in ein bestimmtes Feld mit Skallierung mit Alpha Blending
  247. // x: Die X Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
  248. // y: Die Y Koordinate der linken oberen Ecke des Rechtecks in dem das Bild gezeichnet werden soll
  249. // br: Die Breite des Rechecks in dem das Bild gezeichnet werden soll
  250. // hi: Die Höhe des Rechecks in dem das Bild gezeichnet werden soll
  251. // zBild: Das Bild, was gezeichnet werden soll
  252. __declspec( dllexport ) void alphaBildSkall( int x, int y, int br, int hi, Bild &zBild );
  253. // Füllt ein Dreieck mit einer bestimmten Farbe
  254. // a: Eine Ecke des Dreiecks
  255. // b: Eine Ecke des Dreiecks
  256. // c: Eine Ecke des Dreiecks
  257. // farbe: die Farbe im A8R8G8B8 Format
  258. __declspec( dllexport ) void drawDreieck( Punkt a, Punkt b, Punkt c, int farbe );
  259. // Füllt ein Dreieck mit einer bestimmten Textur
  260. // a: Eine Ecke des Dreiecks
  261. // b: Eine Ecke des Dreiecks
  262. // c: Eine Ecke des Dreiecks
  263. // ta: Die Koordinaten von a in der Textur
  264. // tb: Die Koordinaten von b in der Textur
  265. // tc: Die Koordinaten von c in der Textur
  266. // textur: Das Bild, was als Textur verwendet werden soll
  267. __declspec( dllexport ) void drawDreieckTextur( Punkt a, Punkt b, Punkt c, Punkt ta, Punkt tb, Punkt tc, Bild &textur );
  268. // Füllt ein Dreieck mit einer bestimmten Farbe mit alpha blending
  269. // a: Eine Ecke des Dreiecks
  270. // b: Eine Ecke des Dreiecks
  271. // c: Eine Ecke des Dreiecks
  272. // farbe: die Farbe im A8R8G8B8 Format
  273. __declspec( dllexport ) void drawDreieckAlpha( Punkt a, Punkt b, Punkt c, int farbe );
  274. // Füllt ein Dreieck mit einer bestimmten Textur mit alpha blending
  275. // a: Eine Ecke des Dreiecks
  276. // b: Eine Ecke des Dreiecks
  277. // c: Eine Ecke des Dreiecks
  278. // ta: Die Koordinaten von a in der Textur
  279. // tb: Die Koordinaten von b in der Textur
  280. // tc: Die Koordinaten von c in der Textur
  281. // textur: Das Bild, was als Textur verwendet werden soll
  282. __declspec( dllexport ) void drawDreieckTexturAlpha( Punkt a, Punkt b, Punkt c, Punkt ta, Punkt tb, Punkt tc, Bild &textur );
  283. // Ersetzt eine bestimmte Farbe durch Transparenz
  284. __declspec( dllexport ) void replaceColorWithAlpha( int color );
  285. // Begrenzt die Zeichenfläche in die bis zum nächsten aufruf von releaseDrawOptions() gezeichnet werden kann. Alles außerhalb der Fläche wird automatisch ignoriert.
  286. // Wenn die Zeichenfläche über den Rand einer bestehenden Zeichenfläche hinausragt, wird sie automatisch auf die bestehende Zeichnenfläche beschnitten.
  287. // pos: Die Koordinaten der linken oberen Ecke der Zeichenfläche
  288. // gr: Die Größe der Zeichenfläche
  289. // return: 1, falls die neue Zeichenfläche ganz oder teilweise innerhalb der bestehenden Zeichenfläche ligt. Wenn 0 zurückgegeben wird, wurde die Zeichenfläche nicht gesetzt und es braucht nicht releaseDrawOptions() aufgerufen werden
  290. __declspec( dllexport ) bool setDrawOptions( const Punkt &pos, const Punkt &gr );
  291. // Begrenzt die Zeichenfläche in die bis zum nächsten aufruf von releaseDrawOptions() gezeichnet werden kann. Alles außerhalb der Fläche wird automatisch ignoriert.
  292. // Wenn die Zeichenfläche über den Rand einer bestehenden Zeichenfläche hinausragt, wird sie automatisch auf die bestehende Zeichnenfläche beschnitten.
  293. // x: Die X Koordinate der linken oberen Ecke der Zeichenfläche
  294. // y: Die X Koordinate der linken oberen Ecke der Zeichenfläche
  295. // br: Die Breite der Zeichenfläche
  296. // hi: Die Höhe der Zeichenfläche
  297. // return: 1, falls die neue Zeichenfläche ganz oder teilweise innerhalb der bestehenden Zeichenfläche ligt. Wenn 0 zurückgegeben wird, wurde die Zeichenfläche nicht gesetzt und es braucht nicht releaseDrawOptions() aufgerufen werden
  298. __declspec( dllexport ) bool setDrawOptions( int x, int y, int br, int hi );
  299. // Begrenzt die Zeichenfläche in die bis zum nächsten aufruf von releaseDrawOptions() gezeichnet werden kann. Alles außerhalb der Fläche wird automatisch ignoriert.
  300. // Wenn die Zeichenfläche darf über den Rand einer bestehenden Zeichenfläche hinausragen
  301. // pos: Die Koordinaten der linken oberen Ecke der Zeichenfläche
  302. // gr: Die Größe der Zeichenfläche
  303. // return: 1, falls die neue Zeichenfläche ganz oder teilweise innerhalb des Bildes ligt. Wenn 0 zurückgegeben wird, wurde die Zeichenfläche nicht gesetzt und es braucht nicht releaseDrawOptions() aufgerufen werden
  304. __declspec( dllexport ) bool setDrawOptionsErzwingen( const Punkt &pos, const Punkt &gr );
  305. // Begrenzt die Zeichenfläche in die bis zum nächsten aufruf von releaseDrawOptions() gezeichnet werden kann. Alles außerhalb der Fläche wird automatisch ignoriert.
  306. // Wenn die Zeichenfläche darf über den Rand einer bestehenden Zeichenfläche hinausragen
  307. // x: Die X Koordinate der linken oberen Ecke der Zeichenfläche
  308. // y: Die X Koordinate der linken oberen Ecke der Zeichenfläche
  309. // br: Die Breite der Zeichenfläche
  310. // hi: Die Höhe der Zeichenfläche
  311. // return: 1, falls die neue Zeichenfläche ganz oder teilweise innerhalb des Bildes ligt. Wenn 0 zurückgegeben wird, wurde die Zeichenfläche nicht gesetzt und es braucht nicht releaseDrawOptions() aufgerufen werden
  312. __declspec( dllexport ) bool setDrawOptionsErzwingen( int x, int y, int br, int hi );
  313. // Setzt Koordinaten, die bei den Zeichenfunktionen von den Positionen abgezogen werden
  314. // Vorher sollte eine Zeichenfläche mit SetDrawOptions gesetzt worden sein. Die Werte werden mit dem aufruf von releaseDrawOptions() wieder zurückgesetzt.
  315. // xOff: Ein Wert, der von allen X Koordinaten abgezogen wird
  316. // yOff: Ein Wert, der von allen Y Koordinaten abgezogen wird
  317. __declspec( dllexport ) void addScrollOffset( int xOff, int yOff );
  318. // Entfernt die als letztes gesetzte begrenzung der Zeichenfläche und alle seit dem gesetzten Scroll Offsets
  319. // Stellt die vorherige Zeichenfläche und die zugehörigen Scroll Offsets wieder her
  320. __declspec( dllexport ) void releaseDrawOptions();
  321. // Gibt zurück, ob sich das Bild seit dem letzten Aufruf dieser Funktion verändert hat
  322. __declspec( dllexport ) bool getRend();
  323. // Gibt den Array mit A8R8G8B8 Farbwerten der Pixel zurück
  324. // Der Index eines Pixels berechnet sich durch x + y * Bildbreite
  325. __declspec( dllexport ) int *getBuffer() const;
  326. // Gibt den A8R8G8B8 Farbwert eines Pixels zurück
  327. // x: Die X Koordinate des Pixels
  328. // y: Die Y Koordinate des Pixels
  329. __declspec( dllexport ) int getPixel( int x, int y ) const;
  330. // Gibt die Größe des Bildes zurück
  331. __declspec( dllexport ) const Punkt &getSize() const;
  332. // Gibt die Breite des Bildes zurück
  333. __declspec( dllexport ) int getBreite() const;
  334. // Gibt die Höhe des Bildes zurück
  335. __declspec( dllexport ) int getHeight() const;
  336. // Gibt den aktuellen mindest Transparenz Wert zurück
  337. __declspec( dllexport ) unsigned char getAlpha() const;
  338. // Gibt die Koordinaten der linken oberen Ecke der aktuellen Zeichenfläche zurück
  339. __declspec( dllexport ) const Punkt &getDrawPos() const;
  340. // Gibt die Größe der aktuelen Zeichenfläche zurück
  341. __declspec( dllexport ) const Punkt &getDrawGr() const;
  342. // Gibt die Koordinaten zurück, die zu allen Positionen vor dem Zeichnen hinzugefügt werden
  343. __declspec( dllexport ) const Punkt &getDrawOff() const;
  344. // Erhöht den Reference Counting Zähler.
  345. // return: this.
  346. __declspec( dllexport ) Bild *getThis();
  347. // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht.
  348. // return: 0.
  349. __declspec( dllexport ) Bild *release();
  350. };
  351. // Eine Zeichnung des 2d GUI Frameworks, die ein Bild anzeigt.
  352. class BildZ : public ZeichnungHintergrund
  353. {
  354. public:
  355. class Style : public ZeichnungHintergrund::Style
  356. {
  357. public:
  358. const static __int64 Alpha = 0x1000; // Wenn dieser Flag gesetzt ist, wird zum Zeichnen des Bildes Alpha Blending verwendet
  359. const static __int64 normal = HScroll | Sichtbar | Erlaubt | Rahmen | VScroll; // Der Normale Style einer Bild Zeichnung Bestehend aus HScroll, Sichtbar, Erlaubt, Rahmen, VScroll
  360. };
  361. private:
  362. Bild *bild;
  363. int ref;
  364. public:
  365. // Konstruktor
  366. __declspec( dllexport ) BildZ();
  367. // Destruktor
  368. __declspec( dllexport ) virtual ~BildZ();
  369. // Setzt einen Zeiger auf das Bild, was angezeigt werden soll
  370. // b: Das Bild
  371. __declspec( dllexport ) void setBildZ( Bild *b );
  372. // Setzt das Bild, was angezeigt werden soll. Der Inhalt des Bildes wird Kopiert
  373. // b: Das Bild
  374. __declspec( dllexport ) void setBild( Bild *b );
  375. // Updated den Zeichenhintergrund
  376. // tickVal: Die vergangene Zeit in Sekunden, die seit dem Letzten Aufruf dieser Funktion verstrichen ist
  377. // return: 1, wenn das Bild neu gezeichnet werden muss. 0 sonnst
  378. __declspec( dllexport ) bool tick( double tickVal ) override;
  379. // Verarbeitet ein Maus Ereignis. Wird vom Framework automatisch aufgerufen.
  380. // me: Das Ereignis
  381. __declspec( dllexport ) void doMausEreignis( MausEreignis &me ) override;
  382. // Zeichnet die Zeihnung in ein bestimmtes Bild
  383. // zRObj: Das Bild, in das gezeichnet werden soll
  384. __declspec( dllexport ) void render( Bild &zRObj ) override;
  385. // Gibt das angezeigte Bild zurück
  386. __declspec( dllexport ) Bild *getBild() const;
  387. // Gbt das angezeigte Bild ohne erhöhten Reference Counter zurück
  388. __declspec( dllexport ) Bild *zBild() const;
  389. // Kopiert die Komplette Zeichnung, so dass sie ohne Effekt auf das Original verändert werden kann
  390. __declspec( dllexport ) Zeichnung *dublizieren() const override;
  391. // Erhöht den Reference Counting Zähler.
  392. // return: this.
  393. __declspec( dllexport ) BildZ *getThis();
  394. // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht.
  395. // return: 0.
  396. __declspec( dllexport ) BildZ *release();
  397. };
  398. #ifdef WIN32
  399. // Lädt ein Bild aus einer .bmp, .jpg, .gif oder .png Datei
  400. // pfad: Der Pfad zur Bilddatei
  401. // zError: Ein Zeiger auf ein Text Objekt, in dem ein möglicher Fehler zurückgegeben wird
  402. // return: Das geladene Bild
  403. __declspec( dllexport ) Bild *ladeBild( char *pfad, Text *zError );
  404. #endif
  405. }
  406. #endif