Browse Source

support auto with and height in uiml for texts

Kolja Strohm 1 year ago
parent
commit
8d9a830452
9 changed files with 1553 additions and 1455 deletions
  1. 109 109
      DX12PixelShader.h
  2. 108 108
      DX12VertexShader.h
  3. 6 2
      TextFeld.cpp
  4. 88 12
      UIMLView.cpp
  5. 4 2
      UIMLView.h
  6. 111 111
      UIPixelShader.h
  7. 107 107
      UIVertexShader.h
  8. 675 665
      Zeichnung.cpp
  9. 345 339
      Zeichnung.h

+ 109 - 109
DX12PixelShader.h

@@ -92,10 +92,10 @@ ret
 
 const BYTE DX12PixelShaderBytes[] =
 {
-     68,  88,  66,  67,  48,  75, 
-    224, 254, 173, 127, 201,  68, 
-     97, 127,  71,  45, 185, 233, 
-    103,  92,   1,   0,   0,   0, 
+     68,  88,  66,  67,  28,  97, 
+    103, 119,  56, 254, 214, 165, 
+    194,  39, 252, 135, 187, 181, 
+    153, 212,   1,   0,   0,   0, 
     184,  91,   0,   0,   6,   0, 
       0,   0,  56,   0,   0,   0, 
      36,   2,   0,   0, 188,   2, 
@@ -763,11 +763,11 @@ const BYTE DX12PixelShaderBytes[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0, 148,  46, 
-     49,   1, 103,   3, 161,  98, 
-      1,   0,   0,   0,  62,  66, 
-    198,  70,  86,  86,  71,  69, 
-    160,  94, 121, 137,  32, 170, 
-     84,  95,   0,   0,   0,   0, 
+     49,   1, 117,  36, 174,  98, 
+      1,   0,   0,   0,  38, 253, 
+     89, 154, 127, 144, 235,  69, 
+    159,  87,   2,  16,  81,  11, 
+     24, 230,   0,   0,   0,   0, 
       0,   0,   0,   0,   1,   0, 
       0,   0,   1,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -938,14 +938,14 @@ const BYTE DX12PixelShaderBytes[] =
       3,   0, 242,  56,   1,   0, 
      43, 236,   3,   0,  28,  19, 
       2,   0,  65,  36,   1,   0, 
-    236, 179,   1,   0, 151, 219, 
-      1,   0, 125,  10,   2,   0, 
-    125, 181,   2,   0, 221, 119, 
-      0,   0, 193,  33,   3,   0, 
+    236, 179,   1,   0,  70, 120, 
+      3,   0, 125,  10,   2,   0, 
+    125, 181,   2,   0,  12, 248, 
+      2,   0, 193,  33,   3,   0, 
      65, 185,   2,   0, 140, 239, 
       1,   0, 246,  49,   0,   0, 
-    213, 255,   0,   0, 115, 108, 
-      0,   0, 202, 179,   0,   0, 
+    213, 255,   0,   0,  46, 248, 
+      2,   0, 202, 179,   0,   0, 
       0,  16,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1788,7 +1788,7 @@ const BYTE DX12PixelShaderBytes[] =
     117, 114, 101,  50,  68,  32, 
     115, 104,  97, 100,  27, 226, 
      48,   1, 128,   0,   0,   0, 
-     23,   5,  71, 131, 116, 123, 
+    151,  81,  99, 219,  71, 131, 
     216,   1,   1,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -2348,14 +2348,14 @@ const BYTE DX12PixelShaderBytes[] =
       0,   0,  23,   0,   1,   0, 
       5,  16,   0,   0,  14,   0, 
      23,  21,   0,  16,   0,   0, 
-      3,   2, 240,   2,   0,   0, 
+      3,   2, 240, 129,   0,   0, 
     242, 241,  10,   0,  24,  21, 
       8,  16,   0,   0,   1,   0, 
       1,   0,  10,   0,  24,  21, 
       9,  16,   0,   0,   1,   0, 
       0,   2,  14,   0,  23,  21, 
       0,   0,   0,   0,  10,   2, 
-    240,   2,   0,   0, 242, 241, 
+    240, 129,   0,   0, 242, 241, 
      10,   0,  24,  21,  11,  16, 
       0,   0,   1,   0,   1,   0, 
      10,   0,  24,  21,  12,  16, 
@@ -2382,7 +2382,7 @@ const BYTE DX12PixelShaderBytes[] =
      24,  21,  15,  16,   0,   0, 
       1,   0,   1,   0,  14,   0, 
      23,  21,  16,  16,   0,   0, 
-     36,   2,   0,   0,   0,   0, 
+     36,   2,   0, 128,   0,   0, 
     242, 241,  10,   0,  24,  21, 
      11, 202,  49,   1,  56,   0, 
       0,   0,   0,  16,   0,   0, 
@@ -3408,66 +3408,49 @@ const BYTE DX12PixelShaderBytes[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-    255, 255, 255, 255, 119,   9, 
-     49,   1,   1,   0,   0,   0, 
-     13,   0,   0, 142,  14,   0, 
-     63,  92,  15,   0,   0,   0, 
-     76,   0,   0,   0,  32,   0, 
-      0,   0,  44,   0,   0,   0, 
-     96,   0,   0,   0,   0,   0, 
+    148,  46,  49,   1, 117,  36, 
+    174,  98,   1,   0,   0,   0, 
+     38, 253,  89, 154, 127, 144, 
+    235,  69, 159,  87,   2,  16, 
+     81,  11,  24, 230, 128,   0, 
+      0,   0,  47,  76, 105, 110, 
+    107,  73, 110, 102, 111,   0, 
+     47, 110,  97, 109, 101, 115, 
+      0,  47, 115, 114,  99,  47, 
+    104, 101,  97, 100, 101, 114, 
+     98, 108, 111,  99, 107,   0, 
+     47, 115, 114,  99,  47, 102, 
+    105, 108, 101, 115,  47,  99, 
+     58,  92, 117, 115, 101, 114, 
+    115,  92, 107, 111, 108, 106, 
+     97,  92, 100, 101, 115, 107, 
+    116, 111, 112,  92, 107, 111, 
+    108, 106,  97,  45, 115, 116, 
+    114, 111, 104, 109,  45, 103, 
+     97, 109, 101, 115,  92,  97, 
+    108, 108, 103, 101, 109, 101, 
+    105, 110,  92, 102, 114,  97, 
+    109, 101, 119, 111, 114, 107, 
+     92, 100, 120,  49,  50, 112, 
+    105, 120, 101, 108, 115, 104, 
+     97, 100, 101, 114,  46, 104, 
+    108, 115, 108,   0,   4,   0, 
+      0,   0,   6,   0,   0,   0, 
+      1,   0,   0,   0,  27,   0, 
       0,   0,   0,   0,   0,   0, 
-     22,   0,   0,   0,  25,   0, 
+     34,   0,   0,   0,   8,   0, 
+      0,   0,  17,   0,   0,   0, 
+      7,   0,   0,   0,  10,   0, 
+      0,   0,   6,   0,   0,   0, 
+      0,   0,   0,   0,   5,   0, 
       0,   0,   0,   0,   0,   0, 
+    220,  81,  51,   1,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   1,   0,   0,   0, 
-      0,   0,   0,   0,  28,   2, 
-      0,   0,  32,   0,   0,  96, 
-      0,   0,  84,  95,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      2,   0,   9,   0, 220,   4, 
       0,   0,   0,   0,   0,   0, 
-    156,   1,   0,   0,   1,   0, 
-      0,   0, 224, 232,  54,   3, 
       0,   0,   0,   0,   0,   0, 
-      0,   0, 109,  97, 105, 110, 
-      0, 110, 111, 110, 101,   0, 
-      0,   0,  45, 186,  46, 241, 
-      1,   0,   0,   0,   0,   0, 
-      0,   0,  28,   2,   0,   0, 
-     32,   0,   0,  96,   0,   0, 
-     84,  95,   0,   0,   0,   0, 
-      0,   0,   0,   0,   2,   0, 
-      2,   0,   7,   0,   0,   0, 
-      0,   0,   1,   0, 255, 255, 
-    255, 255,   0,   0,   0,   0, 
-     28,   2,   0,   0,   8,   2, 
       0,   0,   0,   0,   0,   0, 
-    255, 255, 255, 255,   0,   0, 
-      0,   0, 255, 255, 255, 255, 
-      1,   0,   1,   0,   0,   0, 
-      1,   0,   0,   0,   0,   0, 
-     67,  58,  92,  85, 115, 101, 
-    114, 115,  92, 107, 111, 108, 
-    106,  97,  92,  68, 101, 115, 
-    107, 116, 111, 112,  92,  75, 
-    111, 108, 106,  97,  45,  83, 
-    116, 114, 111, 104, 109,  45, 
-     71,  97, 109, 101, 115,  92, 
-     65, 108, 108, 103, 101, 109, 
-    101, 105, 110,  92,  70, 114, 
-     97, 109, 101, 119, 111, 114, 
-    107,  92,  68,  88,  49,  50, 
-     80, 105, 120, 101, 108,  83, 
-    104,  97, 100, 101, 114,  46, 
-    104, 108, 115, 108,   0,   0, 
-    254, 239, 254, 239,   1,   0, 
-      0,   0,   1,   0,   0,   0, 
-      0,   1,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255,  12, 
-      0, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -3493,43 +3476,7 @@ const BYTE DX12PixelShaderBytes[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0, 148,  46,  49,   1, 
-    103,   3, 161,  98,   1,   0, 
-      0,   0,  62,  66, 198,  70, 
-     86,  86,  71,  69, 160,  94, 
-    121, 137,  32, 170,  84,  95, 
-    128,   0,   0,   0,  47,  76, 
-    105, 110, 107,  73, 110, 102, 
-    111,   0,  47, 110,  97, 109, 
-    101, 115,   0,  47, 115, 114, 
-     99,  47, 104, 101,  97, 100, 
-    101, 114,  98, 108, 111,  99, 
-    107,   0,  47, 115, 114,  99, 
-     47, 102, 105, 108, 101, 115, 
-     47,  99,  58,  92, 117, 115, 
-    101, 114, 115,  92, 107, 111, 
-    108, 106,  97,  92, 100, 101, 
-    115, 107, 116, 111, 112,  92, 
-    107, 111, 108, 106,  97,  45, 
-    115, 116, 114, 111, 104, 109, 
-     45, 103,  97, 109, 101, 115, 
-     92,  97, 108, 108, 103, 101, 
-    109, 101, 105, 110,  92, 102, 
-    114,  97, 109, 101, 119, 111, 
-    114, 107,  92, 100, 120,  49, 
-     50, 112, 105, 120, 101, 108, 
-    115, 104,  97, 100, 101, 114, 
-     46, 104, 108, 115, 108,   0, 
-      4,   0,   0,   0,   6,   0, 
-      0,   0,   1,   0,   0,   0, 
-     27,   0,   0,   0,   0,   0, 
-      0,   0,  34,   0,   0,   0, 
-      8,   0,   0,   0,  17,   0, 
-      0,   0,   7,   0,   0,   0, 
-     10,   0,   0,   0,   6,   0, 
       0,   0,   0,   0,   0,   0, 
-      5,   0,   0,   0,   0,   0, 
-      0,   0, 220,  81,  51,   1, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -3546,14 +3493,67 @@ const BYTE DX12PixelShaderBytes[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0, 255, 255, 255, 255, 
+    119,   9,  49,   1,   1,   0, 
+      0,   0,  13,   0,   0, 142, 
+     14,   0,  63,  92,  15,   0, 
+      0,   0,  76,   0,   0,   0, 
+     32,   0,   0,   0,  44,   0, 
+      0,   0,  96,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,  22,   0,   0,   0, 
+     25,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
       0,   0,   0,   0,   0,   0, 
+     28,   2,   0,   0,  32,   0, 
+      0,  96,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   2,   0,   9,   0, 
+    220,   4,   0,   0,   0,   0, 
+      0,   0, 156,   1,   0,   0, 
+      1,   0,  91,  72,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 109,  97, 
+    105, 110,   0, 110, 111, 110, 
+    101,   0,   0,   0,  45, 186, 
+     46, 241,   1,   0,   0,   0, 
+      0,   0,   0,   0,  28,   2, 
+      0,   0,  32,   0,   0,  96, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      2,   0,   2,   0,   7,   0, 
+      0,   0,   0,   0,   1,   0, 
+    255, 255, 255, 255,   0,   0, 
+      0,   0,  28,   2,   0,   0, 
+      8,   2,   0,   0,   0,   0, 
+      0,   0, 255, 255, 255, 255, 
+      0,   0,   0,   0, 255, 255, 
+    255, 255,   1,   0,   1,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,  67,  58,  92,  85, 
+    115, 101, 114, 115,  92, 107, 
+    111, 108, 106,  97,  92,  68, 
+    101, 115, 107, 116, 111, 112, 
+     92,  75, 111, 108, 106,  97, 
+     45,  83, 116, 114, 111, 104, 
+    109,  45,  71,  97, 109, 101, 
+    115,  92,  65, 108, 108, 103, 
+    101, 109, 101, 105, 110,  92, 
+     70, 114,  97, 109, 101, 119, 
+    111, 114, 107,  92,  68,  88, 
+     49,  50,  80, 105, 120, 101, 
+    108,  83, 104,  97, 100, 101, 
+    114,  46, 104, 108, 115, 108, 
+      0,   0, 254, 239, 254, 239, 
+      1,   0,   0,   0,   1,   0, 
+      0,   0,   0,   1,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255,  12,   0, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -3590,9 +3590,9 @@ const BYTE DX12PixelShaderBytes[] =
       0,   0,  40,   0,   0,   0, 
      68,   2,   0,   0,  44,   0, 
       0,   0, 136,   0,   0,   0, 
-      3,   0,   0,   0,  37,   0, 
+      3,   0,   0,   0,  36,   0, 
       0,   0,  23,   0,   0,   0, 
-     22,   0,   0,   0,  36,   0, 
+     22,   0,   0,   0,  37,   0, 
       0,   0,  24,   0,   0,   0, 
      16,   0,   0,   0,   6,   0, 
       0,   0,  25,   0,   0,   0, 

+ 108 - 108
DX12VertexShader.h

@@ -131,10 +131,10 @@ ret
 
 const BYTE DX12VertexShaderBytes[] =
 {
-     68,  88,  66,  67, 136, 189, 
-    241,  51,  13, 158, 242, 132, 
-     26, 211, 159,   0, 224, 137, 
-     67,   3,   1,   0,   0,   0, 
+     68,  88,  66,  67, 136, 215, 
+     92, 196, 107,  56, 204,  57, 
+    248,  16, 235,  58, 108,  70, 
+     13,  17,   1,   0,   0,   0, 
     144,  78,   0,   0,   6,   0, 
       0,   0,  56,   0,   0,   0, 
     124,   2,   0,   0,  52,   3, 
@@ -923,11 +923,11 @@ const BYTE DX12VertexShaderBytes[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-    148,  46,  49,   1, 104,   3, 
-    161,  98,   1,   0,   0,   0, 
-    158, 160,  68,  15,  70, 106, 
-     79,  71, 165, 169,  85, 150, 
-    236,  11,  71,  40,   0,   0, 
+    148,  46,  49,   1, 117,  36, 
+    174,  98,   1,   0,   0,   0, 
+     85,  52, 213,  79, 124,  43, 
+     20,  77, 150,   0, 139, 153, 
+    236,  66,  82,  18,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       1,   0,   0,   0,   1,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1103,11 +1103,11 @@ const BYTE DX12VertexShaderBytes[] =
       0,   0, 103, 159,   1,   0, 
     179, 120,   1,   0, 238,  97, 
       2,   0,  90,  28,   0,   0, 
-     22, 120,   2,   0,  53, 174, 
+    186, 102,   1,   0,  53, 174, 
       3,   0, 206,  21,   0,   0, 
     193, 205,   3,   0, 207, 193, 
       1,   0,  62,   3,   3,   0, 
-    134, 200,   2,   0, 118, 199, 
+    223,  60,   0,   0, 118, 199, 
       0,   0,   0,  16,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1607,7 +1607,7 @@ const BYTE DX12VertexShaderBytes[] =
      97, 109, 101, 114,  97,  13, 
      10, 115, 116, 114,  27, 226, 
      48,   1, 128,   0,   0,   0, 
-     36, 150, 151, 131, 116, 123, 
+     72, 218, 154, 219,  71, 131, 
     216,   1,   1,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -2125,7 +2125,7 @@ const BYTE DX12VertexShaderBytes[] =
      24,  21,  12,  16,   0,   0, 
       1,   0,   1,   0,  14,   0, 
      23,  21,  13,  16,   0,   0, 
-     36,   2, 176,  80,   0,   0, 
+     36,   2,  64, 123,   0,   0, 
     242, 241,  10,   0,  24,  21, 
      14,  16,   0,   0,   1,   0, 
       0,   2,  18,   0,  22,  21, 
@@ -2146,7 +2146,7 @@ const BYTE DX12VertexShaderBytes[] =
      18,  16,   0,   0,   1,   0, 
       1,   0,  14,   0,  23,  21, 
      19,  16,   0,   0,  36,   2, 
-      0,   0,   0,   0, 242, 241, 
+      0, 128,   0,   0, 242, 241, 
      10,   0,  24,  21,  20,  16, 
       0,   0,   1,   0,   0,   2, 
       0,   0,   0,   0,   0,   0, 
@@ -3056,67 +3056,50 @@ const BYTE DX12VertexShaderBytes[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0, 255, 255, 255, 255, 
-    119,   9,  49,   1,   1,   0, 
-      0,   0,  13,   0,   0, 142, 
-     14,   0,  63,  92,  15,   0, 
-      0,   0,  76,   0,   0,   0, 
-     32,   0,   0,   0,  44,   0, 
-      0,   0,  96,   0,   0,   0, 
+      0,   0, 148,  46,  49,   1, 
+    117,  36, 174,  98,   1,   0, 
+      0,   0,  85,  52, 213,  79, 
+    124,  43,  20,  77, 150,   0, 
+    139, 153, 236,  66,  82,  18, 
+    129,   0,   0,   0,  47,  76, 
+    105, 110, 107,  73, 110, 102, 
+    111,   0,  47, 110,  97, 109, 
+    101, 115,   0,  47, 115, 114, 
+     99,  47, 104, 101,  97, 100, 
+    101, 114,  98, 108, 111,  99, 
+    107,   0,  47, 115, 114,  99, 
+     47, 102, 105, 108, 101, 115, 
+     47,  99,  58,  92, 117, 115, 
+    101, 114, 115,  92, 107, 111, 
+    108, 106,  97,  92, 100, 101, 
+    115, 107, 116, 111, 112,  92, 
+    107, 111, 108, 106,  97,  45, 
+    115, 116, 114, 111, 104, 109, 
+     45, 103,  97, 109, 101, 115, 
+     92,  97, 108, 108, 103, 101, 
+    109, 101, 105, 110,  92, 102, 
+    114,  97, 109, 101, 119, 111, 
+    114, 107,  92, 100, 120,  49, 
+     50, 118, 101, 114, 116, 101, 
+    120, 115, 104,  97, 100, 101, 
+    114,  46, 104, 108, 115, 108, 
+      0,   4,   0,   0,   0,   6, 
+      0,   0,   0,   1,   0,   0, 
+      0,  58,   0,   0,   0,   0, 
+      0,   0,   0,  17,   0,   0, 
+      0,   7,   0,   0,   0,  10, 
+      0,   0,   0,   6,   0,   0, 
+      0,   0,   0,   0,   0,   5, 
+      0,   0,   0,  34,   0,   0, 
+      0,   8,   0,   0,   0,   0, 
+      0,   0,   0, 220,  81,  51, 
+      1,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,  22,   0,   0,   0, 
-     25,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   1,   0, 
       0,   0,   0,   0,   0,   0, 
-     24,   4,   0,   0,  32,   0, 
-      0,  96,   0,   0,  71,  40, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   2,   0,   9,   0, 
-    156,   5,   0,   0,   0,   0, 
-      0,   0, 236,   2,   0,   0, 
-      1,   0,   0,   0, 136, 233, 
-     27,   3,   0,   0,   0,   0, 
-      0,   0,   0,   0, 109,  97, 
-    105, 110,   0, 110, 111, 110, 
-    101,   0,   0,   0,  45, 186, 
-     46, 241,   1,   0,   0,   0, 
-      0,   0,   0,   0,  24,   4, 
-      0,   0,  32,   0,   0,  96, 
-      0,   0,  71,  40,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      2,   0,   2,   0,   7,   0, 
-      0,   0,   0,   0,   1,   0, 
-    255, 255, 255, 255,   0,   0, 
-      0,   0,  24,   4,   0,   0, 
-      8,   2,   0,   0,   0,   0, 
-      0,   0, 255, 255, 255, 255, 
-      0,   0,   0,   0, 255, 255, 
-    255, 255,   1,   0,   1,   0, 
-      0,   0,   1,   0,   0,   0, 
-      0,   0,  67,  58,  92,  85, 
-    115, 101, 114, 115,  92, 107, 
-    111, 108, 106,  97,  92,  68, 
-    101, 115, 107, 116, 111, 112, 
-     92,  75, 111, 108, 106,  97, 
-     45,  83, 116, 114, 111, 104, 
-    109,  45,  71,  97, 109, 101, 
-    115,  92,  65, 108, 108, 103, 
-    101, 109, 101, 105, 110,  92, 
-     70, 114,  97, 109, 101, 119, 
-    111, 114, 107,  92,  68,  88, 
-     49,  50,  86, 101, 114, 116, 
-    101, 120,  83, 104,  97, 100, 
-    101, 114,  46, 104, 108, 115, 
-    108,   0, 254, 239, 254, 239, 
-      1,   0,   0,   0,   1,   0, 
-      0,   0,   0,   1,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255,  12,   0, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -3141,44 +3124,7 @@ const BYTE DX12VertexShaderBytes[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0, 148,  46, 
-     49,   1, 104,   3, 161,  98, 
-      1,   0,   0,   0, 158, 160, 
-     68,  15,  70, 106,  79,  71, 
-    165, 169,  85, 150, 236,  11, 
-     71,  40, 129,   0,   0,   0, 
-     47,  76, 105, 110, 107,  73, 
-    110, 102, 111,   0,  47, 110, 
-     97, 109, 101, 115,   0,  47, 
-    115, 114,  99,  47, 104, 101, 
-     97, 100, 101, 114,  98, 108, 
-    111,  99, 107,   0,  47, 115, 
-    114,  99,  47, 102, 105, 108, 
-    101, 115,  47,  99,  58,  92, 
-    117, 115, 101, 114, 115,  92, 
-    107, 111, 108, 106,  97,  92, 
-    100, 101, 115, 107, 116, 111, 
-    112,  92, 107, 111, 108, 106, 
-     97,  45, 115, 116, 114, 111, 
-    104, 109,  45, 103,  97, 109, 
-    101, 115,  92,  97, 108, 108, 
-    103, 101, 109, 101, 105, 110, 
-     92, 102, 114,  97, 109, 101, 
-    119, 111, 114, 107,  92, 100, 
-    120,  49,  50, 118, 101, 114, 
-    116, 101, 120, 115, 104,  97, 
-    100, 101, 114,  46, 104, 108, 
-    115, 108,   0,   4,   0,   0, 
-      0,   6,   0,   0,   0,   1, 
-      0,   0,   0,  58,   0,   0, 
-      0,   0,   0,   0,   0,  17, 
-      0,   0,   0,   7,   0,   0, 
-      0,  10,   0,   0,   0,   6, 
       0,   0,   0,   0,   0,   0, 
-      0,   5,   0,   0,   0,  34, 
-      0,   0,   0,   8,   0,   0, 
-      0,   0,   0,   0,   0, 220, 
-     81,  51,   1,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -3195,13 +3141,67 @@ const BYTE DX12VertexShaderBytes[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 255, 255, 
+    255, 255, 119,   9,  49,   1, 
+      1,   0,   0,   0,  13,   0, 
+      0, 142,  14,   0,  63,  92, 
+     15,   0,   0,   0,  76,   0, 
+      0,   0,  32,   0,   0,   0, 
+     44,   0,   0,   0,  96,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  22,   0, 
+      0,   0,  25,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,  24,   4,   0,   0, 
+     32,   0,   0,  96,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   2,   0, 
+      9,   0, 156,   5,   0,   0, 
+      0,   0,   0,   0, 236,   2, 
+      0,   0,   1,   0,   2, 123, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+    109,  97, 105, 110,   0, 110, 
+    111, 110, 101,   0,   0,   0, 
+     45, 186,  46, 241,   1,   0, 
       0,   0,   0,   0,   0,   0, 
+     24,   4,   0,   0,  32,   0, 
+      0,  96,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   2,   0,   2,   0, 
+      7,   0,   0,   0,   0,   0, 
+      1,   0, 255, 255, 255, 255, 
+      0,   0,   0,   0,  24,   4, 
+      0,   0,   8,   2,   0,   0, 
+      0,   0,   0,   0, 255, 255, 
+    255, 255,   0,   0,   0,   0, 
+    255, 255, 255, 255,   1,   0, 
+      1,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,  67,  58, 
+     92,  85, 115, 101, 114, 115, 
+     92, 107, 111, 108, 106,  97, 
+     92,  68, 101, 115, 107, 116, 
+    111, 112,  92,  75, 111, 108, 
+    106,  97,  45,  83, 116, 114, 
+    111, 104, 109,  45,  71,  97, 
+    109, 101, 115,  92,  65, 108, 
+    108, 103, 101, 109, 101, 105, 
+    110,  92,  70, 114,  97, 109, 
+    101, 119, 111, 114, 107,  92, 
+     68,  88,  49,  50,  86, 101, 
+    114, 116, 101, 120,  83, 104, 
+     97, 100, 101, 114,  46, 104, 
+    108, 115, 108,   0, 254, 239, 
+    254, 239,   1,   0,   0,   0, 
+      1,   0,   0,   0,   0,   1, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255,  12,   0, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -3239,9 +3239,9 @@ const BYTE DX12VertexShaderBytes[] =
       0,   0,  56,   2,   0,   0, 
      44,   0,   0,   0,  92,   0, 
       0,   0,   3,   0,   0,   0, 
-     31,   0,   0,   0,  20,   0, 
+     30,   0,   0,   0,  20,   0, 
       0,   0,  19,   0,   0,   0, 
-     30,   0,   0,   0,  21,   0, 
+     31,   0,   0,   0,  21,   0, 
       0,   0,  12,   0,   0,   0, 
       6,   0,   0,   0,  22,   0, 
       0,   0,  23,   0,   0,   0, 

+ 6 - 2
TextFeld.cpp

@@ -1160,7 +1160,9 @@ int TextFeld::getNeededWidth()
 	if (tm->text && tm->renderer)
 		maxBr = getTextWidth();
 	unlockZeichnung();
-	return maxBr;
+	bool vs = vertikalScrollBar && hatStyle(Style::VScroll);
+	bool r = rahmen && hatStyle(Style::Rahmen);
+	return maxBr + (r ? rahmen->getRBreite() * 2 : 0) + (vs ? 15 : 0);
 }
 
 // Gibt die höhe in pixeln zurück, die benötigt wird um den aktuellen text mit den aktuellen styles voll anzuzeigen
@@ -1171,7 +1173,9 @@ int TextFeld::getNeededHeight()
 	if (tm->text && tm->renderer)
 		th = getTextHeight();
 	unlockZeichnung();
-	return th;
+	bool hs = horizontalScrollBar && hatStyle(Style::HScroll);
+	bool r = rahmen && hatStyle(Style::Rahmen);
+	return th + (r ? rahmen->getRBreite() * 2 : 0) + (hs ? 15 : 0);
 }
 
 bool TextFeld::tick(double tickval) // tick

+ 88 - 12
UIMLView.cpp

@@ -28,16 +28,22 @@ void UIMLElement::layout(XML::Element& element, Zeichnung& z, int pWidth, int pH
 	if (element.hasAttribute("width"))
 	{
 		Text w = element.getAttributeValue("width");
-		width = (int)w;
-		if (w.getText()[w.getLength() - 1] == '%')
-			width = (int)((pWidth / 100.0) * width);
+		if (!w.istGleich("auto"))
+		{
+			width = (int)w;
+			if (w.getText()[w.getLength() - 1] == '%')
+				width = (int)((pWidth / 100.0) * width);
+		}
 	}
 	if (element.hasAttribute("height"))
 	{
 		Text h = element.getAttributeValue("height");
-		height = (int)h;
-		if (h.getText()[h.getLength() - 1] == '%')
-			height = (int)((pHeight / 100.0) * height);
+		if (!h.istGleich("auto"))
+		{
+			height = (int)h;
+			if (h.getText()[h.getLength() - 1] == '%')
+				height = (int)((pHeight / 100.0) * height);
+		}
 	}
 	z.setSize(width, height);
 	if (element.hasAttribute("align-left"))
@@ -209,6 +215,22 @@ void UIMLTextField::layout(XML::Element& element, Zeichnung& z, int pWidth, int
 		((TextFeld*)&z)->setSchriftSize((unsigned char)(int)element.getAttributeValue("font-size"));
 	z.setStyle(TextFeld::Style::Editierbar, !element.hasAttribute("disabled") || (element.getAttributeValue("disabled").getLength() != 0 && !element.getAttributeValue("disabled").istGleich("true")));
 	((TextFeld*)&z)->setText(element.getText());
+	if (element.hasAttribute("width"))
+	{
+		Text w = element.getAttributeValue("width");
+		if (w.istGleich("auto"))
+		{
+			z.setWidth(((TextFeld*)&z)->getNeededWidth());
+		}
+	}
+	if (element.hasAttribute("height"))
+	{
+		Text h = element.getAttributeValue("height");
+		if (h.istGleich("auto"))
+		{
+			z.setHeight(((TextFeld*)&z)->getNeededHeight());
+		}
+	}
 	UIMLElement::layout(element, z, pWidth, pHeight, generalLayouter);
 }
 
@@ -287,6 +309,22 @@ void UIMLText::layout(XML::Element& element, Zeichnung& z, int pWidth, int pHeig
 		((TextFeld*)&z)->setSchriftSize((unsigned char)(int)element.getAttributeValue("font-size"));
 	z.setStyle(TextFeld::Style::Editierbar, !element.hasAttribute("disabled") || (element.getAttributeValue("disabled").getLength() != 0 && !element.getAttributeValue("disabled").istGleich("true")));
 	((TextFeld*)&z)->setText(element.getText());
+	if (element.hasAttribute("width"))
+	{
+		Text w = element.getAttributeValue("width");
+		if (w.istGleich("auto"))
+		{
+			z.setWidth(((TextFeld*)&z)->getNeededWidth());
+		}
+	}
+	if (element.hasAttribute("height"))
+	{
+		Text h = element.getAttributeValue("height");
+		if (h.istGleich("auto"))
+		{
+			z.setHeight(((TextFeld*)&z)->getNeededHeight());
+		}
+	}
 	UIMLElement::layout(element, z, pWidth, pHeight, generalLayouter);
 }
 
@@ -316,6 +354,22 @@ void UIMLTextArea::layout(XML::Element& element, Zeichnung& z, int pWidth, int p
 	z.setStyle(TextFeld::Style::Editierbar, !element.hasAttribute("disabled") || (element.getAttributeValue("disabled").getLength() != 0 && !element.getAttributeValue("disabled").istGleich("true")));
 	((TextFeld*)&z)->setText(element.getText());
 	((TextFeld*)&z)->zTextRenderer()->textFormatieren(((TextFeld*)&z)->zText(), z.getInnenBreite());
+	if (element.hasAttribute("width"))
+	{
+		Text w = element.getAttributeValue("width");
+		if (w.istGleich("auto"))
+		{
+			z.setWidth(((TextFeld*)&z)->getNeededWidth());
+		}
+	}
+	if (element.hasAttribute("height"))
+	{
+		Text h = element.getAttributeValue("height");
+		if (h.istGleich("auto"))
+		{
+			z.setHeight(((TextFeld*)&z)->getNeededHeight());
+		}
+	}
 	UIMLElement::layout(element, z, pWidth, pHeight, generalLayouter);
 }
 
@@ -426,27 +480,30 @@ UIMLView::UIMLView()
 	dom = 0;
 	nextId = 0;
 	memset(&init, 0, sizeof(UIInit));
+	addKnownElement(new UIMLTextField());
+	addKnownElement(new UIMLButton());
+	addKnownElement(new UIMLCheck());
+	addKnownElement(new UIMLText());
+	addKnownElement(new UIMLTextArea());
+	addKnownElement(new UIMLTable());
+	addKnownElement(new UIMLFrame());
 }
 
 // Erstellt eine UIML View zu einem UIML Text
 //  uiml: Ein xml element gemät des ksg uiml standarts
 UIMLView::UIMLView(XML::Element* uiml, UIInit& init)
-	: ZeichnungHintergrund()
+	: UIMLView()
 {
 	this->init = init;
-	members = new Trie< Zeichnung >();
-	dom = 0;
-	nextId = 0;
 	setUIML(uiml);
 }
 
 // Erstellt eine UIML View zu einem UIML Text
 //  uiml: Ein xml text gemät des ksg uiml standarts
 UIMLView::UIMLView(Text uiml, UIInit& init)
+	: UIMLView()
 {
 	this->init = init;
-	members = new Trie< Zeichnung >();
-	dom = 0;
 	setUIML(uiml);
 }
 
@@ -803,3 +860,22 @@ const UIInit& UIMLView::getFactory()
 {
 	return init;
 }
+
+//! calculates the needed size for all content elements to be visible
+Punkt UIMLView::calculateContentSize()
+{
+	Punkt maxP(0, 0);
+	for (int i = dom->getChildCount() - 1; i >= 0; i--)
+	{ // TODO render elements backwards
+		XML::Element* e = dom->zChild(i);
+		Zeichnung* z = members->z(e->getAttributeValue("id"), e->getAttributeValue("id").getLength());
+		if (z)
+		{
+			maxP.x = MAX(maxP.x, z->getPosition().x + z->getBreite());
+			maxP.y = MAX(maxP.y, z->getPosition().y + z->getHeight());
+		}
+	}
+	maxP.x += 2 * getRahmenBreite();
+	maxP.y += 2 * getRahmenBreite();
+	return maxP;
+}

+ 4 - 2
UIMLView.h

@@ -122,8 +122,8 @@ namespace Framework
 		- id (string should be unique),
 		- x (integer, optional % char at end),
 		- y (integer, optional % char at end),
-		- width (integer, optional % char at end),
-		- height (integer, optional % char at end),
+		- width (integer, optional % char at end) or auto keyword,
+		- height (integer, optional % char at end) or auto keyword,
 		- margin (integer, optional % char at end),
 		- margin-left (integer, optional % char at end),
 		- margin-top (integer, optional % char at end),
@@ -237,5 +237,7 @@ namespace Framework
 		DLLEXPORT Zeichnung* parseElement(XML::Element& element, UIMLContainer& generalFactory) override;
 		DLLEXPORT void layout(XML::Element& element, Zeichnung& z, int pWidth, int pHeight, UIMLContainer& generalLayouter) override;
 		DLLEXPORT const UIInit& getFactory() override;
+		//! calculates the needed size for all content elements to be visible
+		DLLEXPORT Punkt calculateContentSize();
 	};
 }

+ 111 - 111
UIPixelShader.h

@@ -353,10 +353,10 @@ ret
 
 const BYTE UIPixelShader[] =
 {
-     68,  88,  66,  67,  47, 227, 
-    110, 209,  31,  11,  37, 249, 
-    196, 222,  82, 135,  45, 114, 
-     75, 154,   1,   0,   0,   0, 
+     68,  88,  66,  67, 163,  13, 
+    235, 102, 207, 122,  16, 202, 
+    150,  20, 215, 150,   4,   7, 
+    170, 204,   1,   0,   0,   0, 
      64, 134,   0,   0,   6,   0, 
       0,   0,  56,   0,   0,   0, 
     192,   6,   0,   0,  80,   7, 
@@ -1815,10 +1815,10 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0, 148,  46,  49,   1, 
-    104,   3, 161,  98,   1,   0, 
-      0,   0, 117,  93, 185, 101, 
-    182, 125, 188,  78, 131, 164, 
-    108, 238, 212, 206, 150, 159, 
+    118,  36, 174,  98,   1,   0, 
+      0,   0,  90, 235,  80,  60, 
+     42, 242, 165,  78, 177, 193, 
+     19,  29, 190, 128,  64,  49, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   1,   0,   0,   0, 
       1,   0,   0,   0,   0,   0, 
@@ -1990,9 +1990,9 @@ const BYTE UIPixelShader[] =
     242,  56,   1,   0,  43, 236, 
       3,   0,  28,  19,   2,   0, 
      65,  36,   1,   0, 236, 179, 
-      1,   0, 240,  37,   2,   0, 
+      1,   0,  70, 120,   3,   0, 
     125,  10,   2,   0, 125, 181, 
-      2,   0, 122,  76,   0,   0, 
+      2,   0,  12, 248,   2,   0, 
     193,  33,   3,   0,  65, 185, 
       2,   0,   9, 241,   2,   0, 
     146, 230,   3,   0, 125, 218, 
@@ -2000,11 +2000,11 @@ const BYTE UIPixelShader[] =
     202, 179,   0,   0, 125, 226, 
       0,   0, 220, 192,   1,   0, 
     201, 241,   2,   0,  12, 238, 
-      0,   0, 232, 163,   0,   0, 
+      0,   0, 218, 152,   2,   0, 
     162, 254,   2,   0, 228, 199, 
       3,   0, 110,  77,   0,   0, 
-    144, 132,   1,   0, 123, 190, 
-      3,   0,  42, 246,   0,   0, 
+    144, 132,   1,   0, 103, 185, 
+      1,   0,  42, 246,   0,   0, 
     240, 203,   3,   0,   0,  16, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -3010,8 +3010,8 @@ const BYTE UIPixelShader[] =
     120, 116, 117, 114, 101,  50, 
      68,  32, 115, 104,  97, 100, 
      27, 226,  48,   1, 128,   0, 
-      0,   0, 127, 105, 191, 131, 
-    116, 123, 216,   1,   1,   0, 
+      0,   0, 177,  97, 195, 219, 
+     71, 131, 216,   1,   1,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -4122,7 +4122,7 @@ const BYTE UIPixelShader[] =
     102, 102, 117, 115, 101,  76, 
     105, 103, 104, 116,   0, 241, 
      14,   0,  23,  21,  22,  16, 
-      0,   0,  26,   2,  80,   0, 
+      0,   0,  26,   2,   0,   0, 
       0,   0, 242, 241,  10,   0, 
      24,  21,  23,  16,   0,   0, 
       1,   0,   1,   0,  10,   0, 
@@ -4145,7 +4145,7 @@ const BYTE UIPixelShader[] =
     116,  76, 105, 103, 104, 116, 
       0, 243, 242, 241,  14,   0, 
      23,  21,  27,  16,   0,   0, 
-     26,   2,  80,   0,   0,   0, 
+     26,   2,   0,   0,   0,   0, 
     242, 241,  10,   0,  24,  21, 
      28,  16,   0,   0,   1,   0, 
       1,   0,  10,   0,  24,  21, 
@@ -4253,14 +4253,14 @@ const BYTE UIPixelShader[] =
       0,   0,  23,   0,   1,   0, 
       5,  16,   0,   0,  14,   0, 
      23,  21,   0,  16,   0,   0, 
-      3,   2,  80,   0,   0,   0, 
+      3,   2, 240, 129,   0,   0, 
     242, 241,  10,   0,  24,  21, 
       8,  16,   0,   0,   1,   0, 
       1,   0,  10,   0,  24,  21, 
       9,  16,   0,   0,   1,   0, 
       0,   2,  14,   0,  23,  21, 
       0,   0,   0,   0,  10,   2, 
-     80,   0,   0,   0, 242, 241, 
+    240, 129,   0,   0, 242, 241, 
      10,   0,  24,  21,  11,  16, 
       0,   0,   1,   0,   1,   0, 
      10,   0,  24,  21,  12,  16, 
@@ -5483,69 +5483,51 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0, 255, 255, 
-    255, 255, 119,   9,  49,   1, 
-      1,   0,   0,   0,  13,   0, 
-      0, 142,  14,   0,  63,  92, 
-     15,   0,   0,   0,  88,   0, 
-      0,   0,  32,   0,   0,   0, 
-     44,   0,   0,   0,  96,   0, 
+      0,   0,   0,   0, 148,  46, 
+     49,   1, 118,  36, 174,  98, 
+      1,   0,   0,   0,  90, 235, 
+     80,  60,  42, 242, 165,  78, 
+    177, 193,  19,  29, 190, 128, 
+     64,  49, 128,   0,   0,   0, 
+     47,  76, 105, 110, 107,  73, 
+    110, 102, 111,   0,  47, 110, 
+     97, 109, 101, 115,   0,  47, 
+    115, 114,  99,  47, 104, 101, 
+     97, 100, 101, 114,  98, 108, 
+    111,  99, 107,   0,  47, 115, 
+    114,  99,  47, 102, 105, 108, 
+    101, 115,  47,  99,  58,  92, 
+    117, 115, 101, 114, 115,  92, 
+    107, 111, 108, 106,  97,  92, 
+    100, 101, 115, 107, 116, 111, 
+    112,  92, 107, 111, 108, 106, 
+     97,  45, 115, 116, 114, 111, 
+    104, 109,  45, 103,  97, 109, 
+    101, 115,  92,  97, 108, 108, 
+    103, 101, 109, 101, 105, 110, 
+     92, 102, 114,  97, 109, 101, 
+    119, 111, 114, 107,  92, 100, 
+    120,  49,  49, 112, 105, 120, 
+    101, 108, 115, 104,  97, 100, 
+    101, 114,  46, 104, 108, 115, 
+    108,   0,   4,   0,   0,   0, 
+      6,   0,   0,   0,   1,   0, 
+      0,   0,  58,   0,   0,   0, 
+      0,   0,   0,   0,  17,   0, 
+      0,   0,   7,   0,   0,   0, 
+     10,   0,   0,   0,   6,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,  22,   0, 
-      0,   0,  25,   0,   0,   0, 
+      5,   0,   0,   0,  34,   0, 
+      0,   0,   8,   0,   0,   0, 
+      0,   0,   0,   0, 220,  81, 
+     51,   1,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      1,   0,   0,   0,   0,   0, 
-      0,   0,  16,  16,   0,   0, 
-     32,   0,   0,  96,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   2,   0, 
-      9,   0, 204,   8,   0,   0, 
-      0,   0,   0,   0, 164,  14, 
-      0,   0,   1,   0,   0,   0, 
-    160, 166, 136,   2,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-     84, 101, 120, 116, 117, 114, 
-    101,  80, 105, 120, 101, 108, 
-     83, 104,  97, 100, 101, 114, 
-      0, 110, 111, 110, 101,   0, 
-     45, 186,  46, 241,   1,   0, 
       0,   0,   0,   0,   0,   0, 
-     16,  16,   0,   0,  32,   0, 
-      0,  96,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   2,   0,   2,   0, 
-      7,   0,   0,   0,   0,   0, 
-      1,   0, 255, 255, 255, 255, 
-      0,   0,   0,   0,  16,  16, 
-      0,   0,   8,   2,   0,   0, 
-      0,   0,   0,   0, 255, 255, 
-    255, 255,   0,   0,   0,   0, 
-    255, 255, 255, 255,   1,   0, 
-      1,   0,   0,   0,   1,   0, 
-      0,   0,   0,   0,  67,  58, 
-     92,  85, 115, 101, 114, 115, 
-     92, 107, 111, 108, 106,  97, 
-     92,  68, 101, 115, 107, 116, 
-    111, 112,  92,  75, 111, 108, 
-    106,  97,  45,  83, 116, 114, 
-    111, 104, 109,  45,  71,  97, 
-    109, 101, 115,  92,  65, 108, 
-    108, 103, 101, 109, 101, 105, 
-    110,  92,  70, 114,  97, 109, 
-    101, 119, 111, 114, 107,  92, 
-     68,  88,  49,  49,  80, 105, 
-    120, 101, 108,  83, 104,  97, 
-    100, 101, 114,  46, 104, 108, 
-    115, 108,   0,   0, 254, 239, 
-    254, 239,   1,   0,   0,   0, 
-      1,   0,   0,   0,   0,   1, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255,  12,   0, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -5569,43 +5551,8 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-    148,  46,  49,   1, 104,   3, 
-    161,  98,   1,   0,   0,   0, 
-    117,  93, 185, 101, 182, 125, 
-    188,  78, 131, 164, 108, 238, 
-    212, 206, 150, 159, 128,   0, 
-      0,   0,  47,  76, 105, 110, 
-    107,  73, 110, 102, 111,   0, 
-     47, 110,  97, 109, 101, 115, 
-      0,  47, 115, 114,  99,  47, 
-    104, 101,  97, 100, 101, 114, 
-     98, 108, 111,  99, 107,   0, 
-     47, 115, 114,  99,  47, 102, 
-    105, 108, 101, 115,  47,  99, 
-     58,  92, 117, 115, 101, 114, 
-    115,  92, 107, 111, 108, 106, 
-     97,  92, 100, 101, 115, 107, 
-    116, 111, 112,  92, 107, 111, 
-    108, 106,  97,  45, 115, 116, 
-    114, 111, 104, 109,  45, 103, 
-     97, 109, 101, 115,  92,  97, 
-    108, 108, 103, 101, 109, 101, 
-    105, 110,  92, 102, 114,  97, 
-    109, 101, 119, 111, 114, 107, 
-     92, 100, 120,  49,  49, 112, 
-    105, 120, 101, 108, 115, 104, 
-     97, 100, 101, 114,  46, 104, 
-    108, 115, 108,   0,   4,   0, 
-      0,   0,   6,   0,   0,   0, 
-      1,   0,   0,   0,  58,   0, 
       0,   0,   0,   0,   0,   0, 
-     17,   0,   0,   0,   7,   0, 
-      0,   0,  10,   0,   0,   0, 
-      6,   0,   0,   0,   0,   0, 
-      0,   0,   5,   0,   0,   0, 
-     34,   0,   0,   0,   8,   0, 
       0,   0,   0,   0,   0,   0, 
-    220,  81,  51,   1,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -5622,15 +5569,68 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+    255, 255, 255, 255, 119,   9, 
+     49,   1,   1,   0,   0,   0, 
+     13,   0,   0, 142,  14,   0, 
+     63,  92,  15,   0,   0,   0, 
+     88,   0,   0,   0,  32,   0, 
+      0,   0,  44,   0,   0,   0, 
+     96,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+     22,   0,   0,   0,  25,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,  16,  16, 
+      0,   0,  32,   0,   0,  96, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      2,   0,   9,   0, 204,   8, 
       0,   0,   0,   0,   0,   0, 
+    164,  14,   0,   0,   1,   0, 
+    190, 227,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,  84, 101, 120, 116, 
+    117, 114, 101,  80, 105, 120, 
+    101, 108,  83, 104,  97, 100, 
+    101, 114,   0, 110, 111, 110, 
+    101,   0,  45, 186,  46, 241, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,  16,  16,   0,   0, 
+     32,   0,   0,  96,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   2,   0, 
+      2,   0,   7,   0,   0,   0, 
+      0,   0,   1,   0, 255, 255, 
+    255, 255,   0,   0,   0,   0, 
+     16,  16,   0,   0,   8,   2, 
       0,   0,   0,   0,   0,   0, 
+    255, 255, 255, 255,   0,   0, 
+      0,   0, 255, 255, 255, 255, 
+      1,   0,   1,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+     67,  58,  92,  85, 115, 101, 
+    114, 115,  92, 107, 111, 108, 
+    106,  97,  92,  68, 101, 115, 
+    107, 116, 111, 112,  92,  75, 
+    111, 108, 106,  97,  45,  83, 
+    116, 114, 111, 104, 109,  45, 
+     71,  97, 109, 101, 115,  92, 
+     65, 108, 108, 103, 101, 109, 
+    101, 105, 110,  92,  70, 114, 
+     97, 109, 101, 119, 111, 114, 
+    107,  92,  68,  88,  49,  49, 
+     80, 105, 120, 101, 108,  83, 
+    104,  97, 100, 101, 114,  46, 
+    104, 108, 115, 108,   0,   0, 
+    254, 239, 254, 239,   1,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   1,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255,  12, 
+      0, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -5666,9 +5666,9 @@ const BYTE UIPixelShader[] =
      40,   0,   0,   0, 188,   2, 
       0,   0,  44,   0,   0,   0, 
     248,   1,   0,   0,   3,   0, 
-      0,   0,  49,   0,   0,   0, 
-     33,   0,   0,   0,  32,   0, 
       0,   0,  48,   0,   0,   0, 
+     33,   0,   0,   0,  32,   0, 
+      0,   0,  49,   0,   0,   0, 
      34,   0,   0,   0,  18,   0, 
       0,   0,   6,   0,   0,   0, 
      35,   0,   0,   0,  36,   0, 

+ 107 - 107
UIVertexShader.h

@@ -121,10 +121,10 @@ ret
 
 const BYTE UIVertexShader[] =
 {
-     68,  88,  66,  67, 211, 251, 
-    248,  47,  73, 245, 140,   8, 
-     95,  19,  34,  70, 142, 206, 
-      6, 104,   1,   0,   0,   0, 
+     68,  88,  66,  67,  17, 134, 
+    201,  60, 212,   6,  55, 206, 
+    186,  40,  99,  94,  30, 155, 
+    245,  40,   1,   0,   0,   0, 
     204,  77,   0,   0,   6,   0, 
       0,   0,  56,   0,   0,   0, 
      20,   2,   0,   0, 204,   2, 
@@ -881,10 +881,10 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0, 148,  46,  49,   1, 
-    104,   3, 161,  98,   1,   0, 
-      0,   0,  99,  76, 246, 186, 
-    201, 112,  58,  79, 177,  25, 
-    140,  96,  86, 184, 159, 242, 
+    118,  36, 174,  98,   1,   0, 
+      0,   0, 252,  33, 169, 100, 
+     29, 200, 176,  75, 155, 213, 
+    182, 104, 158, 208,  56, 223, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   1,   0,   0,   0, 
       1,   0,   0,   0,   0,   0, 
@@ -1564,8 +1564,8 @@ const BYTE UIVertexShader[] =
      13,  10,  47,  47,  32,  84, 
      89,  80,  69,  68,  69,  70, 
      27, 226,  48,   1, 128,   0, 
-      0,   0, 242, 198,  21, 132, 
-    116, 123, 216,   1,   1,   0, 
+      0,   0,  10, 186,   2, 220, 
+     71, 131, 216,   1,   1,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -2928,69 +2928,51 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0, 255, 255, 255, 255, 
-    119,   9,  49,   1,   1,   0, 
-      0,   0,  13,   0,   0, 142, 
-     14,   0,  63,  92,  15,   0, 
-      0,   0,  92,   0,   0,   0, 
-     32,   0,   0,   0,  44,   0, 
-      0,   0,  96,   0,   0,   0, 
+      0,   0, 148,  46,  49,   1, 
+    118,  36, 174,  98,   1,   0, 
+      0,   0, 252,  33, 169, 100, 
+     29, 200, 176,  75, 155, 213, 
+    182, 104, 158, 208,  56, 223, 
+    129,   0,   0,   0,  47,  76, 
+    105, 110, 107,  73, 110, 102, 
+    111,   0,  47, 110,  97, 109, 
+    101, 115,   0,  47, 115, 114, 
+     99,  47, 104, 101,  97, 100, 
+    101, 114,  98, 108, 111,  99, 
+    107,   0,  47, 115, 114,  99, 
+     47, 102, 105, 108, 101, 115, 
+     47,  99,  58,  92, 117, 115, 
+    101, 114, 115,  92, 107, 111, 
+    108, 106,  97,  92, 100, 101, 
+    115, 107, 116, 111, 112,  92, 
+    107, 111, 108, 106,  97,  45, 
+    115, 116, 114, 111, 104, 109, 
+     45, 103,  97, 109, 101, 115, 
+     92,  97, 108, 108, 103, 101, 
+    109, 101, 105, 110,  92, 102, 
+    114,  97, 109, 101, 119, 111, 
+    114, 107,  92, 100, 120,  49, 
+     49, 118, 101, 114, 116, 101, 
+    120, 115, 104,  97, 100, 101, 
+    114,  46, 104, 108, 115, 108, 
+      0,   4,   0,   0,   0,   6, 
+      0,   0,   0,   1,   0,   0, 
+      0,  30,   0,   0,   0,   0, 
+      0,   0,   0,  17,   0,   0, 
+      0,   7,   0,   0,   0,  34, 
+      0,   0,   0,   8,   0,   0, 
+      0,  10,   0,   0,   0,   6, 
+      0,   0,   0,   0,   0,   0, 
+      0,   5,   0,   0,   0,   0, 
+      0,   0,   0, 220,  81,  51, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,  22,   0,   0,   0, 
-     25,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   1,   0, 
       0,   0,   0,   0,   0,   0, 
-    196,   3,   0,   0,  32,   0, 
-      0,  96,   0,   0, 159, 242, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   2,   0,   9,   0, 
-    104,   5,   0,   0,   0,   0, 
-      0,   0, 236,   2,   0,   0, 
-      1,   0,   0,   0, 224, 216, 
-    196,   2,   0,   0,   0,   0, 
-      0,   0,   0,   0,  84, 101, 
-    120, 116, 117, 114, 101,  86, 
-    101, 114, 116, 101, 120,  83, 
-    104,  97, 100, 101, 114,   0, 
-    110, 111, 110, 101,   0,   0, 
-      0,   0,  45, 186,  46, 241, 
-      1,   0,   0,   0,   0,   0, 
-      0,   0, 196,   3,   0,   0, 
-     32,   0,   0,  96,   0,   0, 
-    159, 242,   0,   0,   0,   0, 
-      0,   0,   0,   0,   2,   0, 
-      2,   0,   7,   0,   0,   0, 
-      0,   0,   1,   0, 255, 255, 
-    255, 255,   0,   0,   0,   0, 
-    196,   3,   0,   0,   8,   2, 
       0,   0,   0,   0,   0,   0, 
-    255, 255, 255, 255,   0,   0, 
-      0,   0, 255, 255, 255, 255, 
-      1,   0,   1,   0,   0,   0, 
-      1,   0,   0,   0,   0,   0, 
-     67,  58,  92,  85, 115, 101, 
-    114, 115,  92, 107, 111, 108, 
-    106,  97,  92,  68, 101, 115, 
-    107, 116, 111, 112,  92,  75, 
-    111, 108, 106,  97,  45,  83, 
-    116, 114, 111, 104, 109,  45, 
-     71,  97, 109, 101, 115,  92, 
-     65, 108, 108, 103, 101, 109, 
-    101, 105, 110,  92,  70, 114, 
-     97, 109, 101, 119, 111, 114, 
-    107,  92,  68,  88,  49,  49, 
-     86, 101, 114, 116, 101, 120, 
-     83, 104,  97, 100, 101, 114, 
-     46, 104, 108, 115, 108,   0, 
-    254, 239, 254, 239,   1,   0, 
-      0,   0,   1,   0,   0,   0, 
-      0,   1,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255,  12, 
-      0, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -3013,44 +2995,6 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0, 148,  46, 
-     49,   1, 104,   3, 161,  98, 
-      1,   0,   0,   0,  99,  76, 
-    246, 186, 201, 112,  58,  79, 
-    177,  25, 140,  96,  86, 184, 
-    159, 242, 129,   0,   0,   0, 
-     47,  76, 105, 110, 107,  73, 
-    110, 102, 111,   0,  47, 110, 
-     97, 109, 101, 115,   0,  47, 
-    115, 114,  99,  47, 104, 101, 
-     97, 100, 101, 114,  98, 108, 
-    111,  99, 107,   0,  47, 115, 
-    114,  99,  47, 102, 105, 108, 
-    101, 115,  47,  99,  58,  92, 
-    117, 115, 101, 114, 115,  92, 
-    107, 111, 108, 106,  97,  92, 
-    100, 101, 115, 107, 116, 111, 
-    112,  92, 107, 111, 108, 106, 
-     97,  45, 115, 116, 114, 111, 
-    104, 109,  45, 103,  97, 109, 
-    101, 115,  92,  97, 108, 108, 
-    103, 101, 109, 101, 105, 110, 
-     92, 102, 114,  97, 109, 101, 
-    119, 111, 114, 107,  92, 100, 
-    120,  49,  49, 118, 101, 114, 
-    116, 101, 120, 115, 104,  97, 
-    100, 101, 114,  46, 104, 108, 
-    115, 108,   0,   4,   0,   0, 
-      0,   6,   0,   0,   0,   1, 
-      0,   0,   0,  30,   0,   0, 
-      0,   0,   0,   0,   0,  17, 
-      0,   0,   0,   7,   0,   0, 
-      0,  34,   0,   0,   0,   8, 
-      0,   0,   0,  10,   0,   0, 
-      0,   6,   0,   0,   0,   0, 
-      0,   0,   0,   5,   0,   0, 
-      0,   0,   0,   0,   0, 220, 
-     81,  51,   1,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -3069,14 +3013,70 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 255, 255, 
+    255, 255, 119,   9,  49,   1, 
+      1,   0,   0,   0,  13,   0, 
+      0, 142,  14,   0,  63,  92, 
+     15,   0,   0,   0,  92,   0, 
+      0,   0,  32,   0,   0,   0, 
+     44,   0,   0,   0,  96,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  22,   0, 
+      0,   0,  25,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0, 196,   3,   0,   0, 
+     32,   0,   0,  96,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   2,   0, 
+      9,   0, 104,   5,   0,   0, 
+      0,   0,   0,   0, 236,   2, 
+      0,   0,   1,   0, 240, 156, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+     84, 101, 120, 116, 117, 114, 
+    101,  86, 101, 114, 116, 101, 
+    120,  83, 104,  97, 100, 101, 
+    114,   0, 110, 111, 110, 101, 
+      0,   0,   0,   0,  45, 186, 
+     46, 241,   1,   0,   0,   0, 
+      0,   0,   0,   0, 196,   3, 
+      0,   0,  32,   0,   0,  96, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      2,   0,   2,   0,   7,   0, 
+      0,   0,   0,   0,   1,   0, 
+    255, 255, 255, 255,   0,   0, 
+      0,   0, 196,   3,   0,   0, 
+      8,   2,   0,   0,   0,   0, 
+      0,   0, 255, 255, 255, 255, 
+      0,   0,   0,   0, 255, 255, 
+    255, 255,   1,   0,   1,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,  67,  58,  92,  85, 
+    115, 101, 114, 115,  92, 107, 
+    111, 108, 106,  97,  92,  68, 
+    101, 115, 107, 116, 111, 112, 
+     92,  75, 111, 108, 106,  97, 
+     45,  83, 116, 114, 111, 104, 
+    109,  45,  71,  97, 109, 101, 
+    115,  92,  65, 108, 108, 103, 
+    101, 109, 101, 105, 110,  92, 
+     70, 114,  97, 109, 101, 119, 
+    111, 114, 107,  92,  68,  88, 
+     49,  49,  86, 101, 114, 116, 
+    101, 120,  83, 104,  97, 100, 
+    101, 114,  46, 104, 108, 115, 
+    108,   0, 254, 239, 254, 239, 
+      1,   0,   0,   0,   1,   0, 
+      0,   0,   0,   1,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255,  12,   0, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -3111,8 +3111,8 @@ const BYTE UIVertexShader[] =
       0,   0,  68,   2,   0,   0, 
      44,   0,   0,   0, 132,   0, 
       0,   0,   3,   0,   0,   0, 
-     30,   0,   0,   0,  19,   0, 
-      0,   0,  29,   0,   0,   0, 
+     29,   0,   0,   0,  19,   0, 
+      0,   0,  30,   0,   0,   0, 
      20,   0,   0,   0,  12,   0, 
       0,   0,   6,   0,   0,   0, 
      21,   0,   0,   0,  22,   0, 

+ 675 - 665
Zeichnung.cpp

@@ -21,923 +21,933 @@ using namespace Framework;
 // Inhalt der Zeichnung Klasse aus Zeichnung.h
 // Konstruktor 
 Zeichnung::Zeichnung()
-    : ReferenceCounter(),
-    pos( 0, 0 ),
-    gr( 0, 0 ),
-    makParam( 0 ),
-    takParam( 0 ),
-    mak( 0 ),
-    tak( 0 ),
-    nmakParam( 0 ),
-    ntakParam( 0 ),
-    nMak( 0 ),
-    nTak( 0 ),
-    mausIn( 0 ),
-    toolTip( 0 ),
-    style( 0 ),
-    rend( 0 ),
-    onNeedToolTip( 0 )
+	: ReferenceCounter(),
+	pos(0, 0),
+	gr(0, 0),
+	makParam(0),
+	takParam(0),
+	mak(0),
+	tak(0),
+	nmakParam(0),
+	ntakParam(0),
+	nMak(0),
+	nTak(0),
+	mausIn(0),
+	toolTip(0),
+	style(0),
+	rend(0),
+	onNeedToolTip(0)
 {}
 
 // Destruktor 
 Zeichnung::~Zeichnung()
 {
-    if( toolTip )
-    {
-        if( toolTip->zBildschirm() )
-            toolTip->zBildschirm()->removeToolTip( toolTip );
-        toolTip->release();
-    }
+	if (toolTip)
+	{
+		if (toolTip->zBildschirm())
+			toolTip->zBildschirm()->removeToolTip(toolTip);
+		toolTip->release();
+	}
 }
 
-void Zeichnung::doMausEreignis( MausEreignis &me, bool userRet )
+void Zeichnung::doMausEreignis(MausEreignis& me, bool userRet)
 {
-    me.verarbeitet = userRet;
+	me.verarbeitet = userRet;
 }
 
 // Übergibt einen Void Funktionspointer auf eine Aktion die einmalig vom Hauptthread ausgeführt werden soll. (Passiert nach dem Tick)
-void Zeichnung::postAction( std::function< void() > action )
+void Zeichnung::postAction(std::function< void() > action)
 {
-    actions.push( action );
+	actions.push(action);
 }
 
 // nicht constant 
 void Zeichnung::setRender()
 {
-    rend = 1;
-}
-
-void Zeichnung::setToolTipText( const char *txt, Bildschirm *zScreen, Schrift *zSchrift )
-{
-    if( !txt )
-        toolTip = (ToolTip *)toolTip->release();
-    else
-    {
-        if( !toolTip )
-        {
-            toolTip = new ToolTip( zScreen );
-            toolTip->addStyle( ZeichnungHintergrund::Style::Hintergrund | ZeichnungHintergrund::Style::HAlpha | ZeichnungHintergrund::Style::Rahmen | ZeichnungHintergrund::Style::Sichtbar );
-            toolTip->setHintergrundFarbe( 0xA0000000 );
-            toolTip->setRahmenFarbe( 0xFFFFFFFF );
-            toolTip->setRahmenBreite( 1 );
-            if( mausIn && toolTip )
-                toolTip->setMausIn( 1 );
-        }
-        UIInit init = defaultUI( zSchrift, zScreen );
-        TextFeld *t = init.createTextFeld( init.initParam );
-        t->setText( txt );
-        t->setSize( t->zTextRenderer()->getTextBreite( txt ), t->zTextRenderer()->getTextHeight( txt ) );
-        toolTip->addMember( t );
-    }
+	rend = 1;
+}
+
+void Zeichnung::setToolTipText(const char* txt, Bildschirm* zScreen, Schrift* zSchrift)
+{
+	if (!txt)
+		toolTip = (ToolTip*)toolTip->release();
+	else
+	{
+		if (!toolTip)
+		{
+			toolTip = new ToolTip(zScreen);
+			toolTip->addStyle(ZeichnungHintergrund::Style::Hintergrund | ZeichnungHintergrund::Style::HAlpha | ZeichnungHintergrund::Style::Rahmen | ZeichnungHintergrund::Style::Sichtbar);
+			toolTip->setHintergrundFarbe(0xA0000000);
+			toolTip->setRahmenFarbe(0xFFFFFFFF);
+			toolTip->setRahmenBreite(1);
+			if (mausIn && toolTip)
+				toolTip->setMausIn(1);
+		}
+		UIInit init = defaultUI(zSchrift, zScreen);
+		TextFeld* t = init.createTextFeld(init.initParam);
+		t->setText(txt);
+		t->setSize(t->zTextRenderer()->getTextBreite(txt), t->zTextRenderer()->getTextHeight(txt));
+		toolTip->addMember(t);
+	}
 }
 
 // setzt eine Funktion, die beim erstmaligen gebrauch des tooltips einen tooltip erstellt, falls es noch keinen gibt
 //  initToolTip: die Funktion
-void Zeichnung::setNeedToolTipEvent( std::function< void( Zeichnung * ) > onNeedToolTip )
+void Zeichnung::setNeedToolTipEvent(std::function< void(Zeichnung*, Punkt localPos) > onNeedToolTip)
 {
-    this->onNeedToolTip = onNeedToolTip;
+	this->onNeedToolTip = onNeedToolTip;
 }
 
 // legt den tooltip fest
 // tt: der tooltip
-void Zeichnung::setToolTipZ( ToolTip *tt )
+void Zeichnung::setToolTipZ(ToolTip* tt)
 {
-    if( toolTip )
-        toolTip->release();
-    toolTip = tt;
-    if( mausIn && toolTip )
-        toolTip->setMausIn( 1 );
+	if (toolTip)
+		toolTip->release();
+	toolTip = tt;
+	if (mausIn && toolTip)
+		toolTip->setMausIn(1);
 }
 
 void Zeichnung::lockZeichnung()
 {
-    cs.lock();
+	cs.lock();
 }
 
 void Zeichnung::unlockZeichnung()
 {
-    cs.unlock();
+	cs.unlock();
 }
 
-void Zeichnung::setMausEreignisParameter( void *p ) // setzt den Parameter vom Maus Ereignis
+void Zeichnung::setMausEreignisParameter(void* p) // setzt den Parameter vom Maus Ereignis
 {
-    makParam = p;
+	makParam = p;
 }
 
-void Zeichnung::setTastaturEreignisParameter( void *p ) // setzt den Parameter vom Tastatur Ereignis
+void Zeichnung::setTastaturEreignisParameter(void* p) // setzt den Parameter vom Tastatur Ereignis
 {
-    takParam = p;
+	takParam = p;
 }
 
-void Zeichnung::setMausEreignis( MausAktion ak ) // setzt das Maus Ereignis
+void Zeichnung::setMausEreignis(MausAktion ak) // setzt das Maus Ereignis
 {
-    mak = ak;
+	mak = ak;
 }
 
-void Zeichnung::setTastaturEreignis( TastaturAktion ak ) // setzt das TastaturEreignis
+void Zeichnung::setTastaturEreignis(TastaturAktion ak) // setzt das TastaturEreignis
 {
-    tak = ak;
+	tak = ak;
 }
 
-void Zeichnung::setNMausEreignisParameter( void *p ) // setzt den Parameter vom Maus Ereignis
+void Zeichnung::setNMausEreignisParameter(void* p) // setzt den Parameter vom Maus Ereignis
 {
-    nmakParam = p;
+	nmakParam = p;
 }
 
-void Zeichnung::setNTastaturEreignisParameter( void *p ) // setzt den Parameter vom Tastatur Ereignis
+void Zeichnung::setNTastaturEreignisParameter(void* p) // setzt den Parameter vom Tastatur Ereignis
 {
-    ntakParam = p;
+	ntakParam = p;
 }
 
-void Zeichnung::setNMausEreignis( MausAktion ak ) // setzt das Maus Ereignis
+void Zeichnung::setNMausEreignis(MausAktion ak) // setzt das Maus Ereignis
 {
-    nMak = ak;
+	nMak = ak;
 }
 
-void Zeichnung::setNTastaturEreignis( TastaturAktion ak ) // setzt das TastaturEreignis
+void Zeichnung::setNTastaturEreignis(TastaturAktion ak) // setzt das TastaturEreignis
 {
-    nTak = ak;
+	nTak = ak;
 }
 
-void Zeichnung::doPublicMausEreignis( MausEreignis &me ) // ruft Mak auf
+void Zeichnung::doPublicMausEreignis(MausEreignis& me) // ruft Mak auf
 {
-    bool lock = hatStyle( Style::MELockZeichnung );
-    if( lock )
-        lockZeichnung();
-    bool inside = istPunktInnen( me.mx, me.my );
-    if( !me.insideParent || me.verarbeitet || !inside )
-    {
-        if( mausIn )
-        {
-            mausIn = 0;
-            if( toolTip )
-                toolTip->setMausIn( 0 );
-            MausEreignis me2;
-            me2.id = ME_Leaves;
-            me2.mx = me.mx - pos.x;
-            me2.my = me.my - pos.y;
-            me2.verarbeitet = 0;
-            me2.insideParent = me.insideParent;
-            bool userRet = mak && mak( makParam, this, me2 );
-            doMausEreignis( me2, userRet );
-        }
-    }
-    if( !inside && me.id == ME_PLinks )
-        removeStyle( Style::Fokus );
-    if( ( me.verarbeitet && hatStyleNicht( Style::MEIgnoreVerarbeitet ) ) || ( !inside && hatStyleNicht( Style::MEIgnoreInside ) ) ||
-        ( hatStyleNicht( Style::Sichtbar ) && hatStyleNicht( Style::MEIgnoreSichtbar ) ) )
-    {
-        if( lock )
-            unlockZeichnung();
-        return;
-    }
-    if( inside && me.id == ME_PLinks )
-        addStyle( Style::Fokus );
-    if( me.insideParent && !mausIn && me.id != ME_Leaves && inside && !me.verarbeitet && hatStyle( Style::Sichtbar ) )
-    {
-        mausIn = 1;
-        if( toolTip )
-            toolTip->setMausIn( 1 );
-        else if( onNeedToolTip )
-            onNeedToolTip( this );
-        MausEreignis me2;
-        me2.id = ME_Betritt;
-        me2.mx = me.mx - pos.x;
-        me2.my = me.my - pos.y;
-        me2.verarbeitet = 0;
-        me2.insideParent = 1;
-        bool userRet = mak && mak( makParam, this, me2 );
-        doMausEreignis( me2, userRet );
-    }
-    Punkt old = Punkt( me.mx, me.my );
-    me.mx -= pos.x, me.my -= pos.y;
-    if( me.insideParent || hatStyle( Style::MEIgnoreParentInside ) )
-    {
-        bool userRet = hatStyle(Style::Erlaubt) && (me.verarbeitet || !me.insideParent || ( inside && mak && mak( makParam, this, me ) ));
-        bool vera = me.verarbeitet;
-        doMausEreignis( me, userRet );
-        if( nMak && me.verarbeitet && !vera && hatStyle( Style::Erlaubt ) && me.insideParent && inside )
-            me.verarbeitet = nMak( nmakParam, this, me );
-    }
-    me.mx = old.x, me.my = old.y;
-    if( lock )
-        unlockZeichnung();
+	bool lock = hatStyle(Style::MELockZeichnung);
+	if (lock)
+		lockZeichnung();
+	bool inside = istPunktInnen(me.mx, me.my);
+	if (!me.insideParent || me.verarbeitet || !inside)
+	{
+		if (mausIn)
+		{
+			mausIn = 0;
+			if (toolTip)
+				toolTip->setMausIn(0);
+			MausEreignis me2;
+			me2.id = ME_Leaves;
+			me2.mx = me.mx - pos.x;
+			me2.my = me.my - pos.y;
+			me2.verarbeitet = 0;
+			me2.insideParent = me.insideParent;
+			bool userRet = mak && mak(makParam, this, me2);
+			doMausEreignis(me2, userRet);
+		}
+	}
+	if (!inside && me.id == ME_PLinks)
+		removeStyle(Style::Fokus);
+	if ((me.verarbeitet && hatStyleNicht(Style::MEIgnoreVerarbeitet)) || (!inside && hatStyleNicht(Style::MEIgnoreInside)) ||
+		(hatStyleNicht(Style::Sichtbar) && hatStyleNicht(Style::MEIgnoreSichtbar)))
+	{
+		if (lock)
+			unlockZeichnung();
+		return;
+	}
+	if (inside && me.id == ME_PLinks)
+		addStyle(Style::Fokus);
+	if (me.insideParent && !mausIn && me.id != ME_Leaves && inside && !me.verarbeitet && hatStyle(Style::Sichtbar))
+	{
+		mausIn = 1;
+		if (toolTip)
+			toolTip->setMausIn(1);
+		else if (onNeedToolTip)
+			onNeedToolTip(this, Punkt(me.mx - pos.x, me.my - pos.y));
+		MausEreignis me2;
+		me2.id = ME_Betritt;
+		me2.mx = me.mx - pos.x;
+		me2.my = me.my - pos.y;
+		me2.verarbeitet = 0;
+		me2.insideParent = 1;
+		bool userRet = mak && mak(makParam, this, me2);
+		doMausEreignis(me2, userRet);
+	}
+	Punkt old = Punkt(me.mx, me.my);
+	me.mx -= pos.x, me.my -= pos.y;
+	if (me.insideParent || hatStyle(Style::MEIgnoreParentInside))
+	{
+		bool userRet = hatStyle(Style::Erlaubt) && (me.verarbeitet || !me.insideParent || (inside && mak && mak(makParam, this, me)));
+		bool vera = me.verarbeitet;
+		doMausEreignis(me, userRet);
+		if (nMak && me.verarbeitet && !vera && hatStyle(Style::Erlaubt) && me.insideParent && inside)
+			me.verarbeitet = nMak(nmakParam, this, me);
+	}
+	me.mx = old.x, me.my = old.y;
+	if (lock)
+		unlockZeichnung();
 }
 
-void Zeichnung::doTastaturEreignis( TastaturEreignis &te ) // ruft Tak auf
+void Zeichnung::doTastaturEreignis(TastaturEreignis& te) // ruft Tak auf
 {
-    if( te.verarbeitet )
-        return;
-    if( tak )
-        te.verarbeitet |= tak( takParam, this, te );
-    if( nTak && te.verarbeitet )
-        te.verarbeitet = nTak( ntakParam, this, te );
+	if (te.verarbeitet)
+		return;
+	if (tak)
+		te.verarbeitet |= tak(takParam, this, te);
+	if (nTak && te.verarbeitet)
+		te.verarbeitet = nTak(ntakParam, this, te);
 }
 
-void Zeichnung::setPosition( const Punkt &pos ) // setzt die position
+void Zeichnung::setPosition(const Punkt& pos) // setzt die position
 {
-    lockZeichnung();
-    if( this->pos != pos )
-        rend = 1;
-    this->pos = pos;
-    unlockZeichnung();
+	lockZeichnung();
+	if (this->pos != pos)
+		rend = 1;
+	this->pos = pos;
+	unlockZeichnung();
 }
 
-void Zeichnung::setX( int xPos )
-{
-    lockZeichnung();
-    if( pos.x != xPos )
-    {
-        rend = 1;
-        pos.x = xPos;
-    }
-    unlockZeichnung();
-}
-
-void Zeichnung::setY( int yPos )
-{
-    lockZeichnung();
-    if( pos.y != yPos )
-    {
-        rend = 1;
-        pos.y = yPos;
-    }
-    unlockZeichnung();
-}
-
-void Zeichnung::setSize( const Punkt &gr ) // setzt die Größe
-{
-    lockZeichnung();
-    if( this->gr != gr )
-        rend = 1;
-    this->gr = gr;
-    unlockZeichnung();
-}
-
-void Zeichnung::setPosition( int x, int y ) // setzt die position
-{
-    setPosition( Punkt( x, y ) );
-}
-
-void Zeichnung::setSize( int x, int y ) // setzt die Größe
+void Zeichnung::setX(int xPos)
 {
-    setSize( Punkt( x, y ) );
+	lockZeichnung();
+	if (pos.x != xPos)
+	{
+		rend = 1;
+		pos.x = xPos;
+	}
+	unlockZeichnung();
 }
 
-bool Zeichnung::tick( double tickval )
+void Zeichnung::setY(int yPos)
 {
-    while( !actions.empty() )
-    {
-        actions.front()( );
-        actions.pop();
-    }
-    bool r = rend;
-    rend = 0;
-    return r;
+	lockZeichnung();
+	if (pos.y != yPos)
+	{
+		rend = 1;
+		pos.y = yPos;
+	}
+	unlockZeichnung();
+}
+
+void Zeichnung::setSize(const Punkt& gr) // setzt die Größe
+{
+	lockZeichnung();
+	if (this->gr != gr)
+		rend = 1;
+	this->gr = gr;
+	unlockZeichnung();
+}
+
+void Zeichnung::setPosition(int x, int y) // setzt die position
+{
+	setPosition(Punkt(x, y));
+}
+
+void Zeichnung::setSize(int x, int y) // setzt die Größe
+{
+	setSize(Punkt(x, y));
+}
+
+void Zeichnung::setWidth(int width)
+{
+	gr.x = width;
+}
+
+void Zeichnung::setHeight(int height)
+{
+	gr.y = height;
+}
+
+bool Zeichnung::tick(double tickval)
+{
+	while (!actions.empty())
+	{
+		actions.front()();
+		actions.pop();
+	}
+	bool r = rend;
+	rend = 0;
+	return r;
 }
 
-void Zeichnung::setStyle( __int64 style ) // setzt den Style des Text Feldes
+void Zeichnung::setStyle(__int64 style) // setzt den Style des Text Feldes
 {
-    if( this->style != style )
-    {
-        this->style = style;
-        rend = 1;
-    }
+	if (this->style != style)
+	{
+		this->style = style;
+		rend = 1;
+	}
 }
 
-void Zeichnung::setStyle( __int64 style, bool add_remove )
+void Zeichnung::setStyle(__int64 style, bool add_remove)
 {
-    if( add_remove && ( this->style | style ) != this->style )
-    {
-        this->style |= style;
-        rend = 1;
-    }
-    else if( !add_remove && ( this->style & ~style ) != this->style )
-    {
-        if( toolTip && ( style | Style::Sichtbar ) == style )
-            toolTip->setMausIn( 0 );
-        this->style &= ~style;
-        rend = 1;
-    }
+	if (add_remove && (this->style | style) != this->style)
+	{
+		this->style |= style;
+		rend = 1;
+	}
+	else if (!add_remove && (this->style & ~style) != this->style)
+	{
+		if (toolTip && (style | Style::Sichtbar) == style)
+			toolTip->setMausIn(0);
+		this->style &= ~style;
+		rend = 1;
+	}
 }
 
-void Zeichnung::addStyle( __int64 style )
+void Zeichnung::addStyle(__int64 style)
 {
-    if( ( this->style | style ) != this->style )
-    {
-        this->style |= style;
-        rend = 1;
-    }
+	if ((this->style | style) != this->style)
+	{
+		this->style |= style;
+		rend = 1;
+	}
 }
 
-void Zeichnung::removeStyle( __int64 style )
+void Zeichnung::removeStyle(__int64 style)
 {
-    if( ( this->style & ~style ) != this->style )
-    {
-        if( toolTip && ( style | Style::Sichtbar ) == style )
-            toolTip->setMausIn( 0 );
-        this->style &= ~style;
-        rend = 1;
-    }
+	if ((this->style & ~style) != this->style)
+	{
+		if (toolTip && (style | Style::Sichtbar) == style)
+			toolTip->setMausIn(0);
+		this->style &= ~style;
+		rend = 1;
+	}
 }
 
-void Zeichnung::render( Bild &zRObj )
+void Zeichnung::render(Bild& zRObj)
 {
-    if( toolTip && ( style | Style::Sichtbar ) == style )
-        toolTip->setZeichnen();
+	if (toolTip && (style | Style::Sichtbar) == style)
+		toolTip->setZeichnen();
 }
 
 // constant 
 bool Zeichnung::hatMausEreignis() const // prüft, ob Mak gesetzt ist
 {
-    return mak != 0;
+	return mak != 0;
 }
 
 bool Zeichnung::hatTastaturEreignis() const // prüft, ob Tak gesetzt ist
 {
-    return tak != 0;
+	return tak != 0;
 }
 
-const Punkt &Zeichnung::getPosition() const // gibt die Position zurück
+const Punkt& Zeichnung::getPosition() const // gibt die Position zurück
 {
-    return pos;
+	return pos;
 }
 
-const Punkt &Zeichnung::getSize() const // gibt die Größe zurück
+const Punkt& Zeichnung::getSize() const // gibt die Größe zurück
 {
-    return gr;
+	return gr;
 }
 
 int Zeichnung::getBreite() const // gibt die Breite zurück
 {
-    return gr.x;
+	return gr.x;
 }
 
 int Zeichnung::getHeight() const // gibt die Höhe zurück
 {
-    return gr.y;
+	return gr.y;
 }
 
 // Gibt die Breite des Innenraumes in der Zeichnung in Pixeln zurück
 int Zeichnung::getInnenBreite() const
 {
-    return gr.x;
+	return gr.x;
 }
 
 // Gibt die Höhe des Innenraumes in der Zeichnung in Pixeln zurück
 int Zeichnung::getInnenHeight() const
 {
-    return gr.y;
+	return gr.y;
 }
 
 int Zeichnung::getX() const // gibt X zurück
 {
-    return pos.x;
+	return pos.x;
 }
 
 int Zeichnung::getY() const // gibt Y zurück
 {
-    return pos.y;
+	return pos.y;
 }
 
 // Prüft, ob ein Punkt in diesem Objekt liegt
 //  p: der Punkt
 //  return: 1, wenn der punkt innen ist, 0 sonst
-bool Zeichnung::istPunktInnen( Punkt p ) const
+bool Zeichnung::istPunktInnen(Punkt p) const
 {
-    return istPunktInnen( p.x, p.y );
+	return istPunktInnen(p.x, p.y);
 }
 
 // Prüft, ob ein Punkt in diesem Objekt liegt
 //  x: die x koordinate des punktes
 //  y: die y koordinate des punktes
 //  return: 1, wenn der punkt innen ist, 0 sonst
-bool Zeichnung::istPunktInnen( int x, int y ) const
+bool Zeichnung::istPunktInnen(int x, int y) const
 {
-    return x >= pos.x && x <= pos.x + gr.x && y >= pos.y && y <= pos.y + gr.y;
+	return x >= pos.x && x <= pos.x + gr.x && y >= pos.y && y <= pos.y + gr.y;
 }
 
-ToolTip *Zeichnung::getToolTip() const // gibt den ToolTip Text
+ToolTip* Zeichnung::getToolTip() const // gibt den ToolTip Text
 {
-    return dynamic_cast<ToolTip *>( toolTip->getThis() );
+	return dynamic_cast<ToolTip*>(toolTip->getThis());
 }
 
-ToolTip *Zeichnung::zToolTip() const
+ToolTip* Zeichnung::zToolTip() const
 {
-    return toolTip;
+	return toolTip;
 }
 
-bool Zeichnung::hatStyle( __int64 style ) const // prüft, ob style vorhanden
+bool Zeichnung::hatStyle(__int64 style) const // prüft, ob style vorhanden
 {
-    return ( this->style | style ) == this->style;
+	return (this->style | style) == this->style;
 }
 
-bool Zeichnung::hatStyleNicht( __int64 style ) const // prüft, ob style nicht vorhanden
+bool Zeichnung::hatStyleNicht(__int64 style) const // prüft, ob style nicht vorhanden
 {
-    return ( this->style | style ) != this->style;
+	return (this->style | style) != this->style;
 }
 
-Zeichnung *Zeichnung::dublizieren() const // Erzeugt eine Kopie des Zeichnungs
+Zeichnung* Zeichnung::dublizieren() const // Erzeugt eine Kopie des Zeichnungs
 {
-    Zeichnung *obj = new Zeichnung();
-    obj->setPosition( pos );
-    obj->setSize( gr );
-    obj->setMausEreignisParameter( makParam );
-    obj->setTastaturEreignisParameter( takParam );
-    obj->setMausEreignis( mak );
-    obj->setTastaturEreignis( tak );
-    if( toolTip )
-        obj->setToolTipZ( (ToolTip *)toolTip->dublizieren() );
-    return obj;
+	Zeichnung* obj = new Zeichnung();
+	obj->setPosition(pos);
+	obj->setSize(gr);
+	obj->setMausEreignisParameter(makParam);
+	obj->setTastaturEreignisParameter(takParam);
+	obj->setMausEreignis(mak);
+	obj->setTastaturEreignis(tak);
+	if (toolTip)
+		obj->setToolTipZ((ToolTip*)toolTip->dublizieren());
+	return obj;
 }
 
 
 // Inhalt der ZeichnungHintergrund Klasse aus Zeichnung.h
 // Konstruktor 
 ZeichnungHintergrund::ZeichnungHintergrund()
-    : Zeichnung()
+	: Zeichnung()
 {
-    hintergrundFarbe = 0xFF000000;
-    rahmen = 0;
-    hintergrundBild = 0;
-    hintergrundFeld = 0;
-    horizontalScrollBar = 0;
-    vertikalScrollBar = 0;
-    innenPosition.x = 0;
-    innenPosition.y = 0;
-    innenSize.x = 0;
-    innenSize.y = 0;
+	hintergrundFarbe = 0xFF000000;
+	rahmen = 0;
+	hintergrundBild = 0;
+	hintergrundFeld = 0;
+	horizontalScrollBar = 0;
+	vertikalScrollBar = 0;
+	innenPosition.x = 0;
+	innenPosition.y = 0;
+	innenSize.x = 0;
+	innenSize.y = 0;
 }
 
 // Destruktor 
 ZeichnungHintergrund::~ZeichnungHintergrund()
 {
-    if( rahmen )
-        rahmen->release();
-    if( hintergrundBild )
-        hintergrundBild->release();
-    if( hintergrundFeld )
-        hintergrundFeld->release();
-    if( horizontalScrollBar )
-        horizontalScrollBar->release();
-    if( vertikalScrollBar )
-        vertikalScrollBar->release();
+	if (rahmen)
+		rahmen->release();
+	if (hintergrundBild)
+		hintergrundBild->release();
+	if (hintergrundFeld)
+		hintergrundFeld->release();
+	if (horizontalScrollBar)
+		horizontalScrollBar->release();
+	if (vertikalScrollBar)
+		vertikalScrollBar->release();
 }
 
-void ZeichnungHintergrund::setHintergrundBild( Bild *bild ) // setzt das Hintergrund Bild
+void ZeichnungHintergrund::setHintergrundBild(Bild* bild) // setzt das Hintergrund Bild
 {
-    if( !hintergrundBild )
-        hintergrundBild = new Bild();
-    hintergrundBild->neuBild( bild->getBreite(), bild->getHeight(), 0 );
-    int *buff1 = hintergrundBild->getBuffer();
-    int *buff2 = bild->getBuffer();
-    for( int i = 0; i < bild->getBreite() * bild->getHeight(); ++i )
-        buff1[ i ] = buff2[ i ];
-    bild->release();
-    rend = 1;
-}
+	if (!hintergrundBild)
+		hintergrundBild = new Bild();
+	hintergrundBild->neuBild(bild->getBreite(), bild->getHeight(), 0);
+	int* buff1 = hintergrundBild->getBuffer();
+	int* buff2 = bild->getBuffer();
+	for (int i = 0; i < bild->getBreite() * bild->getHeight(); ++i)
+		buff1[i] = buff2[i];
+	bild->release();
+	rend = 1;
+}
 
-void ZeichnungHintergrund::setHintergrundBildZ( Bild *bild ) // setzt einen Zeiger zum Hintergrund Bild
-{
-    if( hintergrundBild != bild )
-    {
-        if( hintergrundBild )
-            hintergrundBild->release();
-        hintergrundBild = bild;
-        rend = 1;
-    }
-}
-
-void ZeichnungHintergrund::setHintergrundFarbe( int fc ) // setzt die Hintergrundfarbe
-{
-    if( hintergrundFarbe != fc )
-    {
-        hintergrundFarbe = fc;
-        rend = 1;
-    }
-}
-
-void ZeichnungHintergrund::setAlphaFeldZ( AlphaFeld *buff ) // setzt einen Zeiger zum Hintergrund Buffer
-{
-    if( hintergrundFeld != buff )
-    {
-        if( hintergrundFeld )
-            hintergrundFeld->release();
-        hintergrundFeld = buff;
-        rend = 1;
-    }
-}
-
-void ZeichnungHintergrund::setAlphaFeldStrength( int st ) // setzt die Stärke des Hintergrund Buffers
-{
-    if( !hintergrundFeld )
-    {
-        hintergrundFeld = new AlphaFeld();
-        rend = 1;
-    }
-    if( hintergrundFeld->getStrength() != st )
-    {
-        hintergrundFeld->setStrength( st );
-        rend = 1;
-    }
-}
-
-void ZeichnungHintergrund::setAlphaFeldFarbe( int fc ) // setzt die Farbe des Hintergrund Buffers
-{
-    if( !hintergrundFeld )
-    {
-        hintergrundFeld = new AlphaFeld();
-        rend = 1;
-    }
-    if( hintergrundFeld->getFarbe() != fc )
-    {
-        hintergrundFeld->setFarbe( fc );
-        rend = 1;
-    }
-}
-
-void ZeichnungHintergrund::setRahmenZ( Rahmen *ram ) // setzt einen Zeiger zum Rahmen
-{
-    if( rahmen != ram )
-    {
-        if( rahmen )
-            rahmen->release();
-        rahmen = ram;
-        rend = 1;
-    }
-}
-
-void ZeichnungHintergrund::setRahmenBreite( int br ) // setzt die Breite des Rahmens
-{
-    if( !rahmen )
-    {
-        rahmen = new LRahmen();
-        rend = 1;
-    }
-    if( rahmen->getRBreite() != br )
-    {
-        rahmen->setRamenBreite( br );
-        rend = 1;
-    }
-}
-
-void ZeichnungHintergrund::setRahmenFarbe( int fc ) // setzt die Farbe des Rahmens
-{
-    if( !rahmen )
-    {
-        rahmen = new LRahmen();
-        rend = 1;
-    }
-    if( rahmen->getFarbe() != fc )
-    {
-        rahmen->setFarbe( fc );
-        rend = 1;
-    }
-}
-
-void ZeichnungHintergrund::setVertikalKlickScroll( int ks ) // setzt die vertikale Scroll geschwindigkeit
-{
-    if( !vertikalScrollBar )
-    {
-        vertikalScrollBar = new VScrollBar();
-        rend = 1;
-    }
-    if( vertikalScrollBar->getKlickScroll() != ks )
-    {
-        vertikalScrollBar->setKlickScroll( ks );
-        rend = 1;
-    }
-}
-
-void ZeichnungHintergrund::setVertikalScrollPos( int pos ) // setzt die vertikale Scroll Position
-{
-    if( !vertikalScrollBar )
-    {
-        vertikalScrollBar = new VScrollBar();
-        rend = 1;
-    }
-    if( vertikalScrollBar && vertikalScrollBar->getScroll() != pos )
-    {
-        vertikalScrollBar->scroll( pos );
-        rend = 1;
-    }
-}
-
-void ZeichnungHintergrund::setVertikalScrollFarbe( int f, int bgF ) // setzt die scroll Farbe
-{
-    if( !vertikalScrollBar )
-    {
-        vertikalScrollBar = new VScrollBar();
-        rend = 1;
-    }
-    if( vertikalScrollBar && ( vertikalScrollBar->getFarbe() != f || vertikalScrollBar->getBgFarbe() != bgF ) )
-    {
-        vertikalScrollBar->setFarbe( f );
-        vertikalScrollBar->setBgFarbe( bgF, bgF != 0 );
-        rend = 1;
-    }
-}
-
-void ZeichnungHintergrund::setHorizontalKlickScroll( int ks ) // setzt die horizontale Scroll geschwindigkeit
-{
-    if( !horizontalScrollBar )
-    {
-        horizontalScrollBar = new HScrollBar();
-        rend = 1;
-    }
-    if( horizontalScrollBar && horizontalScrollBar->getKlickScroll() != ks )
-    {
-        horizontalScrollBar->setKlickScroll( ks );
-        rend = 1;
-    }
-}
-
-void ZeichnungHintergrund::setHorizontalScrollPos( int pos ) // setzt die horizontale Scroll Position
-{
-    if( !horizontalScrollBar )
-    {
-        horizontalScrollBar = new HScrollBar();
-        rend = 1;
-    }
-    if( horizontalScrollBar && horizontalScrollBar->getScroll() != pos )
-    {
-        horizontalScrollBar->scroll( pos );
-        rend = 1;
-    }
-}
-
-void ZeichnungHintergrund::setHorizontalScrollFarbe( int f, int bgF ) // setzt die scroll Farbe
-{
-    if( !horizontalScrollBar )
-    {
-        horizontalScrollBar = new HScrollBar();
-        rend = 1;
-    }
-    if( horizontalScrollBar && ( horizontalScrollBar->getFarbe() != f || horizontalScrollBar->getBgFarbe() != bgF ) )
-    {
-        horizontalScrollBar->setFarbe( f );
-        horizontalScrollBar->setBgFarbe( bgF, bgF != 0 );
-        rend = 1;
-    }
-}
-
-bool ZeichnungHintergrund::tick( double tickVal )
-{
-    if( vertikalScrollBar && hatStyle( Style::VScroll ) )
-        rend |= vertikalScrollBar->getRend();
-    if( horizontalScrollBar && hatStyle( Style::HScroll ) )
-        rend |= horizontalScrollBar->getRend();
-    return Zeichnung::tick( tickVal );
-}
-
-void ZeichnungHintergrund::render( Bild &rObj )
-{
-    innenPosition.x = pos.x;
-    innenPosition.y = pos.y;
-    innenSize.x = gr.x;
-    innenSize.y = gr.y;
-    if( hatStyleNicht( Style::Sichtbar ) )
-        return;
-    lockZeichnung();
-    if( !rObj.setDrawOptions( pos.x, pos.y, gr.x, gr.y ) )
-    {
-        unlockZeichnung();
-        return;
-    }
-    Zeichnung::render( rObj );
-    int rbr = 0;
-    if( hatStyle( Style::Rahmen ) && rahmen )
-    {
-        rahmen->setSize( gr );
-        rahmen->render( rObj );
-        rbr = rahmen->getRBreite();
-    }
-    innenPosition.x += rbr;
-    innenPosition.y += rbr;
-    innenSize.x -= rbr * 2;
-    innenSize.y -= rbr * 2;
-    if( !rObj.setDrawOptions( rbr, rbr, gr.x - rbr * 2, gr.y - rbr * 2 ) )
-    {
-        rObj.releaseDrawOptions();
-        unlockZeichnung();
-        return;
-    }
-    bool vs = vertikalScrollBar && hatStyle( Style::VScroll );
-    bool hs = horizontalScrollBar && hatStyle( Style::HScroll );
-    if( vs )
-    {
-        vertikalScrollBar->render( gr.x - rbr * 2 - 15, 0, 15, gr.y - rbr * 2, rObj );
-        innenSize.x -= 15;
-        if( hs )
-        {
-            horizontalScrollBar->render( 0, gr.y - rbr * 2 - 15, gr.x - rbr * 2 - 15, 15, rObj );
-            innenSize.y -= 15;
-            if( !rObj.setDrawOptions( 0, 0, gr.x - rbr * 2 - 15, gr.y - rbr * 2 - 15 ) )
-            {
-                rObj.releaseDrawOptions();
-                rObj.releaseDrawOptions();
-                unlockZeichnung();
-                return;
-            }
-            horizontalScrollBar->update( horizontalScrollBar->getScrollData()->max, innenSize.x );
-        }
-        else
-        {
-            if( !rObj.setDrawOptions( 0, 0, gr.x - rbr * 2 - 15, gr.y - rbr * 2 ) )
-            {
-                rObj.releaseDrawOptions();
-                rObj.releaseDrawOptions();
-                unlockZeichnung();
-                return;
-            }
-        }
-        vertikalScrollBar->update( vertikalScrollBar->getScrollData()->max, innenSize.y );
-    }
-    else if( hs )
-    {
-        horizontalScrollBar->render( rbr, gr.y - rbr * 2 - 15, gr.x - rbr * 2, 15, rObj );
-        innenSize.y -= 15;
-        if( !rObj.setDrawOptions( 0, 0, gr.x - rbr * 2, gr.y - rbr * 2 - 15 ) )
-        {
-            rObj.releaseDrawOptions();
-            rObj.releaseDrawOptions();
-            unlockZeichnung();
-            return;
-        }
-    }
-    if( hatStyle( Style::Hintergrund ) )
-    {
-        if( hatStyle( Style::HAlpha ) )
-            rObj.alphaRegion( 0, 0, gr.x - rbr * 2, gr.y - rbr * 2, hintergrundFarbe );
-        else
-            rObj.fillRegion( 0, 0, gr.x - rbr * 2, gr.y - rbr * 2, hintergrundFarbe );
-        if( hatStyle( Style::HBild ) && hintergrundBild )
-        {
-            if( hatStyle( Style::HAlpha ) )
-                rObj.alphaBildSkall( 0, 0, gr.x - rbr * 2, gr.y - rbr * 2, *hintergrundBild );
-            else
-                rObj.drawBildSkall( 0, 0, gr.x - rbr * 2, gr.y - rbr * 2, *hintergrundBild );
-        }
-    }
-    if( hatStyle( Style::Buffered ) && hintergrundFeld )
-    {
-        hintergrundFeld->setSize( gr.x - rbr * 2, gr.y - rbr * 2 );
-        hintergrundFeld->render( rObj );
-    }
-    if( vs || hs )
-        rObj.releaseDrawOptions();
-    rObj.releaseDrawOptions();
-    rObj.releaseDrawOptions();
-    unlockZeichnung();
+void ZeichnungHintergrund::setHintergrundBildZ(Bild* bild) // setzt einen Zeiger zum Hintergrund Bild
+{
+	if (hintergrundBild != bild)
+	{
+		if (hintergrundBild)
+			hintergrundBild->release();
+		hintergrundBild = bild;
+		rend = 1;
+	}
+}
+
+void ZeichnungHintergrund::setHintergrundFarbe(int fc) // setzt die Hintergrundfarbe
+{
+	if (hintergrundFarbe != fc)
+	{
+		hintergrundFarbe = fc;
+		rend = 1;
+	}
+}
+
+void ZeichnungHintergrund::setAlphaFeldZ(AlphaFeld* buff) // setzt einen Zeiger zum Hintergrund Buffer
+{
+	if (hintergrundFeld != buff)
+	{
+		if (hintergrundFeld)
+			hintergrundFeld->release();
+		hintergrundFeld = buff;
+		rend = 1;
+	}
+}
+
+void ZeichnungHintergrund::setAlphaFeldStrength(int st) // setzt die Stärke des Hintergrund Buffers
+{
+	if (!hintergrundFeld)
+	{
+		hintergrundFeld = new AlphaFeld();
+		rend = 1;
+	}
+	if (hintergrundFeld->getStrength() != st)
+	{
+		hintergrundFeld->setStrength(st);
+		rend = 1;
+	}
+}
+
+void ZeichnungHintergrund::setAlphaFeldFarbe(int fc) // setzt die Farbe des Hintergrund Buffers
+{
+	if (!hintergrundFeld)
+	{
+		hintergrundFeld = new AlphaFeld();
+		rend = 1;
+	}
+	if (hintergrundFeld->getFarbe() != fc)
+	{
+		hintergrundFeld->setFarbe(fc);
+		rend = 1;
+	}
+}
+
+void ZeichnungHintergrund::setRahmenZ(Rahmen* ram) // setzt einen Zeiger zum Rahmen
+{
+	if (rahmen != ram)
+	{
+		if (rahmen)
+			rahmen->release();
+		rahmen = ram;
+		rend = 1;
+	}
+}
+
+void ZeichnungHintergrund::setRahmenBreite(int br) // setzt die Breite des Rahmens
+{
+	if (!rahmen)
+	{
+		rahmen = new LRahmen();
+		rend = 1;
+	}
+	if (rahmen->getRBreite() != br)
+	{
+		rahmen->setRamenBreite(br);
+		rend = 1;
+	}
+}
+
+void ZeichnungHintergrund::setRahmenFarbe(int fc) // setzt die Farbe des Rahmens
+{
+	if (!rahmen)
+	{
+		rahmen = new LRahmen();
+		rend = 1;
+	}
+	if (rahmen->getFarbe() != fc)
+	{
+		rahmen->setFarbe(fc);
+		rend = 1;
+	}
+}
+
+void ZeichnungHintergrund::setVertikalKlickScroll(int ks) // setzt die vertikale Scroll geschwindigkeit
+{
+	if (!vertikalScrollBar)
+	{
+		vertikalScrollBar = new VScrollBar();
+		rend = 1;
+	}
+	if (vertikalScrollBar->getKlickScroll() != ks)
+	{
+		vertikalScrollBar->setKlickScroll(ks);
+		rend = 1;
+	}
+}
+
+void ZeichnungHintergrund::setVertikalScrollPos(int pos) // setzt die vertikale Scroll Position
+{
+	if (!vertikalScrollBar)
+	{
+		vertikalScrollBar = new VScrollBar();
+		rend = 1;
+	}
+	if (vertikalScrollBar && vertikalScrollBar->getScroll() != pos)
+	{
+		vertikalScrollBar->scroll(pos);
+		rend = 1;
+	}
+}
+
+void ZeichnungHintergrund::setVertikalScrollFarbe(int f, int bgF) // setzt die scroll Farbe
+{
+	if (!vertikalScrollBar)
+	{
+		vertikalScrollBar = new VScrollBar();
+		rend = 1;
+	}
+	if (vertikalScrollBar && (vertikalScrollBar->getFarbe() != f || vertikalScrollBar->getBgFarbe() != bgF))
+	{
+		vertikalScrollBar->setFarbe(f);
+		vertikalScrollBar->setBgFarbe(bgF, bgF != 0);
+		rend = 1;
+	}
+}
+
+void ZeichnungHintergrund::setHorizontalKlickScroll(int ks) // setzt die horizontale Scroll geschwindigkeit
+{
+	if (!horizontalScrollBar)
+	{
+		horizontalScrollBar = new HScrollBar();
+		rend = 1;
+	}
+	if (horizontalScrollBar && horizontalScrollBar->getKlickScroll() != ks)
+	{
+		horizontalScrollBar->setKlickScroll(ks);
+		rend = 1;
+	}
+}
+
+void ZeichnungHintergrund::setHorizontalScrollPos(int pos) // setzt die horizontale Scroll Position
+{
+	if (!horizontalScrollBar)
+	{
+		horizontalScrollBar = new HScrollBar();
+		rend = 1;
+	}
+	if (horizontalScrollBar && horizontalScrollBar->getScroll() != pos)
+	{
+		horizontalScrollBar->scroll(pos);
+		rend = 1;
+	}
+}
+
+void ZeichnungHintergrund::setHorizontalScrollFarbe(int f, int bgF) // setzt die scroll Farbe
+{
+	if (!horizontalScrollBar)
+	{
+		horizontalScrollBar = new HScrollBar();
+		rend = 1;
+	}
+	if (horizontalScrollBar && (horizontalScrollBar->getFarbe() != f || horizontalScrollBar->getBgFarbe() != bgF))
+	{
+		horizontalScrollBar->setFarbe(f);
+		horizontalScrollBar->setBgFarbe(bgF, bgF != 0);
+		rend = 1;
+	}
+}
+
+bool ZeichnungHintergrund::tick(double tickVal)
+{
+	if (vertikalScrollBar && hatStyle(Style::VScroll))
+		rend |= vertikalScrollBar->getRend();
+	if (horizontalScrollBar && hatStyle(Style::HScroll))
+		rend |= horizontalScrollBar->getRend();
+	return Zeichnung::tick(tickVal);
+}
+
+void ZeichnungHintergrund::render(Bild& rObj)
+{
+	innenPosition.x = pos.x;
+	innenPosition.y = pos.y;
+	innenSize.x = gr.x;
+	innenSize.y = gr.y;
+	if (hatStyleNicht(Style::Sichtbar))
+		return;
+	lockZeichnung();
+	if (!rObj.setDrawOptions(pos.x, pos.y, gr.x, gr.y))
+	{
+		unlockZeichnung();
+		return;
+	}
+	Zeichnung::render(rObj);
+	int rbr = 0;
+	if (hatStyle(Style::Rahmen) && rahmen)
+	{
+		rahmen->setSize(gr);
+		rahmen->render(rObj);
+		rbr = rahmen->getRBreite();
+	}
+	innenPosition.x += rbr;
+	innenPosition.y += rbr;
+	innenSize.x -= rbr * 2;
+	innenSize.y -= rbr * 2;
+	if (!rObj.setDrawOptions(rbr, rbr, gr.x - rbr * 2, gr.y - rbr * 2))
+	{
+		rObj.releaseDrawOptions();
+		unlockZeichnung();
+		return;
+	}
+	bool vs = vertikalScrollBar && hatStyle(Style::VScroll);
+	bool hs = horizontalScrollBar && hatStyle(Style::HScroll);
+	if (vs)
+	{
+		vertikalScrollBar->render(gr.x - rbr * 2 - 15, 0, 15, gr.y - rbr * 2, rObj);
+		innenSize.x -= 15;
+		if (hs)
+		{
+			horizontalScrollBar->render(0, gr.y - rbr * 2 - 15, gr.x - rbr * 2 - 15, 15, rObj);
+			innenSize.y -= 15;
+			if (!rObj.setDrawOptions(0, 0, gr.x - rbr * 2 - 15, gr.y - rbr * 2 - 15))
+			{
+				rObj.releaseDrawOptions();
+				rObj.releaseDrawOptions();
+				unlockZeichnung();
+				return;
+			}
+			horizontalScrollBar->update(horizontalScrollBar->getScrollData()->max, innenSize.x);
+		}
+		else
+		{
+			if (!rObj.setDrawOptions(0, 0, gr.x - rbr * 2 - 15, gr.y - rbr * 2))
+			{
+				rObj.releaseDrawOptions();
+				rObj.releaseDrawOptions();
+				unlockZeichnung();
+				return;
+			}
+		}
+		vertikalScrollBar->update(vertikalScrollBar->getScrollData()->max, innenSize.y);
+	}
+	else if (hs)
+	{
+		horizontalScrollBar->render(rbr, gr.y - rbr * 2 - 15, gr.x - rbr * 2, 15, rObj);
+		innenSize.y -= 15;
+		if (!rObj.setDrawOptions(0, 0, gr.x - rbr * 2, gr.y - rbr * 2 - 15))
+		{
+			rObj.releaseDrawOptions();
+			rObj.releaseDrawOptions();
+			unlockZeichnung();
+			return;
+		}
+	}
+	if (hatStyle(Style::Hintergrund))
+	{
+		if (hatStyle(Style::HAlpha))
+			rObj.alphaRegion(0, 0, gr.x - rbr * 2, gr.y - rbr * 2, hintergrundFarbe);
+		else
+			rObj.fillRegion(0, 0, gr.x - rbr * 2, gr.y - rbr * 2, hintergrundFarbe);
+		if (hatStyle(Style::HBild) && hintergrundBild)
+		{
+			if (hatStyle(Style::HAlpha))
+				rObj.alphaBildSkall(0, 0, gr.x - rbr * 2, gr.y - rbr * 2, *hintergrundBild);
+			else
+				rObj.drawBildSkall(0, 0, gr.x - rbr * 2, gr.y - rbr * 2, *hintergrundBild);
+		}
+	}
+	if (hatStyle(Style::Buffered) && hintergrundFeld)
+	{
+		hintergrundFeld->setSize(gr.x - rbr * 2, gr.y - rbr * 2);
+		hintergrundFeld->render(rObj);
+	}
+	if (vs || hs)
+		rObj.releaseDrawOptions();
+	rObj.releaseDrawOptions();
+	rObj.releaseDrawOptions();
+	unlockZeichnung();
 }
 
 // Gibt die Breite des Innenraumes in der Zeichnung in Pixeln zurück
 int ZeichnungHintergrund::getInnenBreite() const
 {
-    return getBreite() - 2 * getRahmenBreite();
+	return getBreite() - 2 * getRahmenBreite();
 }
 
 // Gibt die Höhe des Innenraumes in der Zeichnung in Pixeln zurück
 int ZeichnungHintergrund::getInnenHeight() const
 {
-    return getHeight() - 2 * getRahmenBreite();
+	return getHeight() - 2 * getRahmenBreite();
 }
 
-Bild *ZeichnungHintergrund::getHintergrundBild() const // gibt getThis vom Hintergrund Bild zurück
+Bild* ZeichnungHintergrund::getHintergrundBild() const // gibt getThis vom Hintergrund Bild zurück
 {
-    if( !hintergrundBild )
-        return 0;
-    return dynamic_cast<Bild *>( hintergrundBild->getThis() );
+	if (!hintergrundBild)
+		return 0;
+	return dynamic_cast<Bild*>(hintergrundBild->getThis());
 }
 
-Bild *ZeichnungHintergrund::zHintergrundBild() const // gibt das Hintergrund Bild zurück
+Bild* ZeichnungHintergrund::zHintergrundBild() const // gibt das Hintergrund Bild zurück
 {
-    return hintergrundBild;
+	return hintergrundBild;
 }
 
 int ZeichnungHintergrund::getHintergrundFarbe() const // giebt getThis der Hintergrundfarbe zurück
 {
-    return hintergrundFarbe;
+	return hintergrundFarbe;
 }
 
-AlphaFeld *ZeichnungHintergrund::getAlphaFeld() const // gibt getThir vom Hintergrund Buffer zurück
+AlphaFeld* ZeichnungHintergrund::getAlphaFeld() const // gibt getThir vom Hintergrund Buffer zurück
 {
-    if( !hintergrundFeld )
-        return 0;
-    return dynamic_cast<AlphaFeld *>( hintergrundFeld->getThis() );
+	if (!hintergrundFeld)
+		return 0;
+	return dynamic_cast<AlphaFeld*>(hintergrundFeld->getThis());
 }
 
-AlphaFeld *ZeichnungHintergrund::zAlphaFeld() const // gibt den Hintergrund Buffer zurück
+AlphaFeld* ZeichnungHintergrund::zAlphaFeld() const // gibt den Hintergrund Buffer zurück
 {
-    return hintergrundFeld;
+	return hintergrundFeld;
 }
 
 int ZeichnungHintergrund::getAlphaFeldStrength() const // gibt die Stärke des Hintergrund Buffers zurück
 {
-    if( !hintergrundFeld )
-        return 0;
-    return hintergrundFeld->getStrength();
+	if (!hintergrundFeld)
+		return 0;
+	return hintergrundFeld->getStrength();
 }
 
 int ZeichnungHintergrund::getAlphaFeldFarbe() const // gibt getThis von der Farbe des Hintergrund Buffers zurück
 {
-    return hintergrundFeld->getFarbe();
+	return hintergrundFeld->getFarbe();
 }
 
-Rahmen *ZeichnungHintergrund::getRahmen() const // gibt getThis des Rahmens zurück
+Rahmen* ZeichnungHintergrund::getRahmen() const // gibt getThis des Rahmens zurück
 {
-    if( !rahmen )
-        return 0;
-    return dynamic_cast<Rahmen *>( rahmen->getThis() );
+	if (!rahmen)
+		return 0;
+	return dynamic_cast<Rahmen*>(rahmen->getThis());
 }
 
-Rahmen *ZeichnungHintergrund::zRahmen() const // gibt den Rahmen zurück
+Rahmen* ZeichnungHintergrund::zRahmen() const // gibt den Rahmen zurück
 {
-    return rahmen;
+	return rahmen;
 }
 
 int ZeichnungHintergrund::getRahmenBreite() const // gibt die Breite des Rahmens zurück
 {
-    if( !rahmen || hatStyleNicht( Style::Rahmen ) )
-        return 0;
-    return rahmen->getRBreite();
+	if (!rahmen || hatStyleNicht(Style::Rahmen))
+		return 0;
+	return rahmen->getRBreite();
 }
 
 int ZeichnungHintergrund::getRahmenFarbe() const // gibt getThis der Farbe des Rahmens zurück
 {
-    return rahmen->getFarbe();
+	return rahmen->getFarbe();
 }
 
 int ZeichnungHintergrund::getVertikalKlickScroll() const
 {
-    return vertikalScrollBar ? vertikalScrollBar->getKlickScroll() : 0;
+	return vertikalScrollBar ? vertikalScrollBar->getKlickScroll() : 0;
 }
 
 int ZeichnungHintergrund::getVertikalScrollPos() const
 {
-    return vertikalScrollBar ? vertikalScrollBar->getScroll() : 0;
+	return vertikalScrollBar ? vertikalScrollBar->getScroll() : 0;
 }
 
 int ZeichnungHintergrund::getVertikalScrollFarbe() const
 {
-    return vertikalScrollBar ? vertikalScrollBar->getFarbe() : 0;
+	return vertikalScrollBar ? vertikalScrollBar->getFarbe() : 0;
 }
 
 int ZeichnungHintergrund::getVertikalScrollHintergrund() const
 {
-    return vertikalScrollBar ? vertikalScrollBar->getBgFarbe() : 0;
+	return vertikalScrollBar ? vertikalScrollBar->getBgFarbe() : 0;
 }
 
 int ZeichnungHintergrund::getHorizontalKlickScroll() const
 {
-    return horizontalScrollBar ? horizontalScrollBar->getKlickScroll() : 0;
+	return horizontalScrollBar ? horizontalScrollBar->getKlickScroll() : 0;
 }
 
 int ZeichnungHintergrund::getHorizontalScrollPos() const
 {
-    return horizontalScrollBar ? horizontalScrollBar->getScroll() : 0;
+	return horizontalScrollBar ? horizontalScrollBar->getScroll() : 0;
 }
 
 int ZeichnungHintergrund::getHorizontalScrollFarbe() const
 {
-    return horizontalScrollBar ? horizontalScrollBar->getFarbe() : 0;
+	return horizontalScrollBar ? horizontalScrollBar->getFarbe() : 0;
 }
 
 int ZeichnungHintergrund::getHorizontalScrollHintergrund() const
 {
-    return horizontalScrollBar ? horizontalScrollBar->getBgFarbe() : 0;
-}
-
-Zeichnung *ZeichnungHintergrund::dublizieren() const // Erzeugt eine Kopie des Zeichnungs
-{
-    ZeichnungHintergrund *obj = new ZeichnungHintergrund();
-    obj->setPosition( pos );
-    obj->setSize( gr );
-    obj->setMausEreignisParameter( makParam );
-    obj->setTastaturEreignisParameter( takParam );
-    obj->setMausEreignis( mak );
-    obj->setTastaturEreignis( tak );
-    if( toolTip )
-        obj->setToolTipZ( (ToolTip *)toolTip->dublizieren() );
-    obj->setStyle( style );
-    obj->setHintergrundFarbe( hintergrundFarbe );
-    if( hintergrundFeld )
-        obj->setAlphaFeldZ( (AlphaFeld *)hintergrundFeld->dublizieren() );
-    if( rahmen )
-        obj->setRahmenZ( (Rahmen *)rahmen->dublizieren() );
-    if( hintergrundBild )
-        obj->setHintergrundBild( dynamic_cast<Bild *>( hintergrundBild->getThis() ) );
-    if( vertikalScrollBar )
-    {
-        obj->setVertikalKlickScroll( vertikalScrollBar->getKlickScroll() );
-        obj->setVertikalScrollPos( vertikalScrollBar->getScroll() );
-        obj->setVertikalScrollFarbe( vertikalScrollBar->getFarbe(), vertikalScrollBar->getBgFarbe() );
-    }
-    if( horizontalScrollBar )
-    {
-        obj->setHorizontalKlickScroll( horizontalScrollBar->getKlickScroll() );
-        obj->setHorizontalScrollPos( horizontalScrollBar->getScroll() );
-        obj->setHorizontalScrollFarbe( horizontalScrollBar->getFarbe(), horizontalScrollBar->getBgFarbe() );
-    }
-    return obj;
+	return horizontalScrollBar ? horizontalScrollBar->getBgFarbe() : 0;
+}
+
+Zeichnung* ZeichnungHintergrund::dublizieren() const // Erzeugt eine Kopie des Zeichnungs
+{
+	ZeichnungHintergrund* obj = new ZeichnungHintergrund();
+	obj->setPosition(pos);
+	obj->setSize(gr);
+	obj->setMausEreignisParameter(makParam);
+	obj->setTastaturEreignisParameter(takParam);
+	obj->setMausEreignis(mak);
+	obj->setTastaturEreignis(tak);
+	if (toolTip)
+		obj->setToolTipZ((ToolTip*)toolTip->dublizieren());
+	obj->setStyle(style);
+	obj->setHintergrundFarbe(hintergrundFarbe);
+	if (hintergrundFeld)
+		obj->setAlphaFeldZ((AlphaFeld*)hintergrundFeld->dublizieren());
+	if (rahmen)
+		obj->setRahmenZ((Rahmen*)rahmen->dublizieren());
+	if (hintergrundBild)
+		obj->setHintergrundBild(dynamic_cast<Bild*>(hintergrundBild->getThis()));
+	if (vertikalScrollBar)
+	{
+		obj->setVertikalKlickScroll(vertikalScrollBar->getKlickScroll());
+		obj->setVertikalScrollPos(vertikalScrollBar->getScroll());
+		obj->setVertikalScrollFarbe(vertikalScrollBar->getFarbe(), vertikalScrollBar->getBgFarbe());
+	}
+	if (horizontalScrollBar)
+	{
+		obj->setHorizontalKlickScroll(horizontalScrollBar->getKlickScroll());
+		obj->setHorizontalScrollPos(horizontalScrollBar->getScroll());
+		obj->setHorizontalScrollFarbe(horizontalScrollBar->getFarbe(), horizontalScrollBar->getBgFarbe());
+	}
+	return obj;
 }

+ 345 - 339
Zeichnung.h

@@ -11,352 +11,358 @@
 
 namespace Framework
 {
-    struct MausEreignis; //! MausEreignis.h
-    struct TastaturEreignis; //! TastaturEreignis.h
-    class Bild; //! Bild.h
-    class Zeichnung; //! Aus dieser Datei
-    class ToolTip; //! ToopTip.h
-    class Bildschirm; //! Bildschirm.h
-    class Rahmen; //! Rahmen.h
-    class AlphaFeld; //! AlphaFeld.h
-    class VScrollBar; //! Scroll.h
-    class HScrollBar; //! Scroll.h
-    class Schrift;
+	struct MausEreignis; //! MausEreignis.h
+	struct TastaturEreignis; //! TastaturEreignis.h
+	class Bild; //! Bild.h
+	class Zeichnung; //! Aus dieser Datei
+	class ToolTip; //! ToopTip.h
+	class Bildschirm; //! Bildschirm.h
+	class Rahmen; //! Rahmen.h
+	class AlphaFeld; //! AlphaFeld.h
+	class VScrollBar; //! Scroll.h
+	class HScrollBar; //! Scroll.h
+	class Schrift;
 
-    //! Eine Zeichnung für das 2D GUI Framework
-    class Zeichnung : public virtual ReferenceCounter
-    {
-    public:
-        class Style
-        {
-        public:
-            //! Wenn dieser Style gesetzt ist, wird die Zeichnung beim Zeichnen angezeigt
-            const static __int64 Sichtbar = 0x00001;
-            //! Wenn dieser Style gesetzt ist, kann der Benutzer mit der Zeichnung interagieren
-            const static __int64 Erlaubt = 0x00002;
-            //! Wenn dieser Style gesetzt ist, wird ein TastaturEreignis von der Zeichnung verarbeitet
-            const static __int64 Fokus = 0x00004;
-            //! Wenn dieser Style gesetzt ist, wird ein MausEreignis auch verarbeitet, wenn das Objekt nicht sichtbar ist
-            const static __int64 MEIgnoreSichtbar = 0x0800000000000000;
-            //! Wenn dieser Style gesetzt ist, lockt der Thread das Objekt während das MausEreignis verarbeitet wird
-            const static __int64 MELockZeichnung = 0x1000000000000000;
-            //! Wenn dieser Style gesetzt ist, wird ein MausEreignis auch verarbeitet, wenn es außerhalb der Zeichnung liegt
-            const static __int64 MEIgnoreInside = 0x2000000000000000;
-            //! Wenn dieser Style gesetzt ist, wird ein MausEreignis auch verarbeitet, wenn es bereits von einer anderen Zeichnung verarbeitet wurde
-            const static __int64 MEIgnoreVerarbeitet = 0x4000000000000000;
-            //! Wenn dieser Style gesetzt ist, wird ein MausEreignis auch verarbeitet, wenn es sich außerhalb der Zeichnung befindet, zu der diese Zeichnung gehört
-            const static __int64 MEIgnoreParentInside = 0x8000000000000000;
-        };
-    protected:
-        Punkt pos;
-        Punkt gr;
-        void *makParam;
-        void *takParam;
-        MausAktion mak;
-        TastaturAktion tak;
-        void *nmakParam;
-        void *ntakParam;
-        MausAktion nMak;
-        TastaturAktion nTak;
-        bool mausIn;
-        Critical cs;
-        ToolTip *toolTip;
-        __int64 style;
-        bool rend;
-        std::queue< std::function< void() > > actions;
-        std::function< void( Zeichnung * ) > onNeedToolTip;
+	//! Eine Zeichnung für das 2D GUI Framework
+	class Zeichnung : public virtual ReferenceCounter
+	{
+	public:
+		class Style
+		{
+		public:
+			//! Wenn dieser Style gesetzt ist, wird die Zeichnung beim Zeichnen angezeigt
+			const static __int64 Sichtbar = 0x00001;
+			//! Wenn dieser Style gesetzt ist, kann der Benutzer mit der Zeichnung interagieren
+			const static __int64 Erlaubt = 0x00002;
+			//! Wenn dieser Style gesetzt ist, wird ein TastaturEreignis von der Zeichnung verarbeitet
+			const static __int64 Fokus = 0x00004;
+			//! Wenn dieser Style gesetzt ist, wird ein MausEreignis auch verarbeitet, wenn das Objekt nicht sichtbar ist
+			const static __int64 MEIgnoreSichtbar = 0x0800000000000000;
+			//! Wenn dieser Style gesetzt ist, lockt der Thread das Objekt während das MausEreignis verarbeitet wird
+			const static __int64 MELockZeichnung = 0x1000000000000000;
+			//! Wenn dieser Style gesetzt ist, wird ein MausEreignis auch verarbeitet, wenn es außerhalb der Zeichnung liegt
+			const static __int64 MEIgnoreInside = 0x2000000000000000;
+			//! Wenn dieser Style gesetzt ist, wird ein MausEreignis auch verarbeitet, wenn es bereits von einer anderen Zeichnung verarbeitet wurde
+			const static __int64 MEIgnoreVerarbeitet = 0x4000000000000000;
+			//! Wenn dieser Style gesetzt ist, wird ein MausEreignis auch verarbeitet, wenn es sich außerhalb der Zeichnung befindet, zu der diese Zeichnung gehört
+			const static __int64 MEIgnoreParentInside = 0x8000000000000000;
+		};
+	protected:
+		Punkt pos;
+		Punkt gr;
+		void* makParam;
+		void* takParam;
+		MausAktion mak;
+		TastaturAktion tak;
+		void* nmakParam;
+		void* ntakParam;
+		MausAktion nMak;
+		TastaturAktion nTak;
+		bool mausIn;
+		Critical cs;
+		ToolTip* toolTip;
+		__int64 style;
+		bool rend;
+		std::queue< std::function< void() > > actions;
+		std::function< void(Zeichnung*, Punkt localPos) > onNeedToolTip;
 
-        //! Verarbeitet ein Maus Ereignis. Wird vom Framework automatisch aufgerufen.
-        //! \param me Das MausEreignis
-        //! \param userRet true wenn MausEreignis::verarbeitet auf true gesetzt werden soll
-        DLLEXPORT virtual void doMausEreignis( MausEreignis &me, bool userRet );
+		//! Verarbeitet ein Maus Ereignis. Wird vom Framework automatisch aufgerufen.
+		//! \param me Das MausEreignis
+		//! \param userRet true wenn MausEreignis::verarbeitet auf true gesetzt werden soll
+		DLLEXPORT virtual void doMausEreignis(MausEreignis& me, bool userRet);
 
-    public:
-        //! Konstruktor 
-        DLLEXPORT Zeichnung();
-        //! Destruktor 
-        DLLEXPORT virtual ~Zeichnung();
-        //! Übergibt einen void Funktionszeiger auf eine Aktion die einmalig vom Hauptthread ausgeführt werden soll. Wird am ende von tick() aufgerufen
-        DLLEXPORT void postAction( std::function< void() > action );
-        //! Legt fest, ob sich die Zeichnung seit des letzten Bildes verändert hat und neu gezeichnet werden muss
-        DLLEXPORT void setRender();
-        //! Setzt den Text, der erscheint, wenn der Benutzer für längere Zeit mit der Maus in der Zeichnung verweilt
-        //! \param txt Der Text, der angezeigt werden soll
-        //! \param zScreen Ein Zeiger auf das Verwendete Bildschirm Objekt ohne erhöhten Reference Counter
-        //! \param zSchrift Ein Zeiger auf die Schrift, die verwendet werden soll ohne erhöhten Reference Counter
-        DLLEXPORT void setToolTipText( const char *txt, Bildschirm *zScreen, Schrift *zSchrift );
-        //! setzt eine Funktion, die aufgerufen wird, falls ein Tooltip benötigt wird und noch keiner gesetzt wurde
-        //! \param initToolTip die Funktion
-        DLLEXPORT void setNeedToolTipEvent( std::function< void( Zeichnung * ) > onNeedTooltip );
-        //! legt den tooltip fest
-        //! \param tt der tooltip
-        DLLEXPORT void setToolTipZ( ToolTip *tt );
-        //! Dies ist notwendig, falls mehrere Threads gleichzeitig die Zeichnung benutzen.
-        //! Wenn lockZeichnung() von zwei threads aufgerufen wird, wartet der letzte so lange, bis der erste unlockZeichnung() aufgerufen hat.
-        DLLEXPORT void lockZeichnung();
-        //! Dies ist notwendig, falls mehrere Threads gleichzeitig die Zeichnung benutzen.
-        //! Wenn lockZeichnung() von zwei threads aufgerufen wird, wartet der letzte so lange, bis der erste unlockZeichnung() aufgerufen hat.
-        DLLEXPORT void unlockZeichnung();
-        //! setzt den Parameter, der bei einem Maus Ereignis an die Rückruffunktion übergeben wird
-        //! \param p Der Parameter
-        DLLEXPORT void setMausEreignisParameter( void *p );
-        //! Setzt den Parameter, der bei einem Tastatur Ereignis an die Rückruffunktion übergeben wird
-        //! \param p Der Parameter
-        DLLEXPORT void setTastaturEreignisParameter( void *p );
-        //! Setzt die Rückruffunktion, die bei einem Maus Ereignis aufgerufen werden soll.
-        //! Wenn die Rückruffunktion 0 zurückgiebt, oder nicht gesetzt wurde, wird ein Maus Ereignis von der Zeichnung nicht weiter beachtet
-        //! Es kann die Standartfunktion __ret1ME verwendet werden, die in MausEreignis.h definiert ist und immer 1 zurückgibt
-        //! \param ak Ein Zeiger auf die Rückruffunktion
-        DLLEXPORT void setMausEreignis( MausAktion ak );
-        //! Setzt die Rückruffunktion, die bei einem Tastatur Ereignis aufgerufen werdne soll.
-        //! Wenn die Rückruffunktion 0 zurückgiebt, oder nicht gesetzt wurde, wird ein Tastatur Ereignis von der Zeichnung nicht weiter beachtet
-        //! Es kann die Standartfunktion __ret1TE verwendet werden, die in TastaturEreignis.h definiert ist und immer 1 zurückgibt
-        //! Weitere Standartfunktionen sind _nurNummernTE und _nurHexTE ebenfals aus TastaturEreignis.h
-        //! \param ak Ein Zeiger auf die Rückruffunktion
-        DLLEXPORT void setTastaturEreignis( TastaturAktion ak );
-        //! setzt den Parameter, der bei einem Maus Ereignis an die Rückruffunktion übergeben wird, die aufgerufen wird, fals das Ereignis von der Zeichnung verarbeitet wurde
-        //! \param p Der Parameter
-        DLLEXPORT void setNMausEreignisParameter( void *p );
-        //! Setzt den Parameter, der bei einem Tastatur Ereignis an die Rückruffunktion übergeben wird, die aufgerufen wird, fals das Ereignis von der Zeichnung verarbeitet wurde
-        //! \param p Der Parameter
-        DLLEXPORT void setNTastaturEreignisParameter( void *p );
-        //! Setzt die Rückruffunktion, die bei einem Maus Ereignis aufgerufen werden soll, nachdem das Ereignis bereits von der Zeichnung verarbeitet wurde
-        //! Wenn die Rückruffunktion 1 zurückgiebt, oder nicht gesetzt wurde, wird das Maus Ereignis von keiner weiteren Zeichnung verarbeitet, die zum Beispiel hinter dieser Zeichnung liegen
-        //! Es kann die Standartfunktion __ret1ME verwendet werden, die in MausEreignis.h definiert ist und immer 1 zurückgibt
-        //! \param ak Ein Zeiger auf die Rückruffunktion
-        DLLEXPORT void setNMausEreignis( MausAktion ak );
-        //! Setzt die Rückruffunktion, die bei einem Tastatur Ereignis aufgerufen werdne soll, nachdem das Ereignis bereits von der Zeichnung verarbeitet wurde
-        //! Wenn die Rückruffunktion 1 zurückgiebt, oder nicht gesetzt wurde, wird das Tastatur Ereignis von keiner weiteren Zeichnung verarbeitet
-        //! Es kann die Standartfunktion __ret1TE verwendet werden, die in TastaturEreignis.h definiert ist und immer 1 zurückgibt
-        //! Weitere Standartfunktionen sind _nurNummernTE und _nurHexTE ebenfals aus TastaturEreignis.h
-        //! \param ak Ein Zeiger auf die Rückruffunktion
-        DLLEXPORT void setNTastaturEreignis( TastaturAktion ak );
-        //! Verarbeitet ein Maus Ereignis. Wird vom Framework automatisch aufgerufen.
-        //! \param me Das Ereignis
-        DLLEXPORT virtual void doPublicMausEreignis( MausEreignis &me );
-        //! Verarbeitet ein Tastatur Ereignis. Wird vom Framework automatisch aufgerufen
-        //! \param te Das Ereignis
-        DLLEXPORT virtual void doTastaturEreignis( TastaturEreignis &te );
-        //! Verarbeitet die Zeit, die seit dem letzten aufruf dieser Funktion vergangen ist
-        //! \param tickVal Die vergangene Zeit in Sekunden
-        DLLEXPORT virtual bool tick( double tickval );
-        //! Setzt die Position der Zeichnung
-        //! \param pos Die Position in Pixeln
-        DLLEXPORT void setPosition( const Punkt &pos );
-        //! Setzt die X Position der Zeichnung
-        //! \param xPos Die Position in Pixeln
-        DLLEXPORT void setX( int xPos );
-        //! Setzt die Y Position der Zeichnung
-        //! \param yPos Die Position in Pixeln
-        DLLEXPORT void setY( int yPos );
-        //! Setzt die Größe der Zeichnung
-        //! \param gr Ein Punkt mit x als Breite und y als Höhe in Pixeln
-        DLLEXPORT void setSize( const Punkt &gr );
-        //! Setzt die Position der Zeichnung
-        //! \param x Die X Position in Pixeln
-        //! \param y Die Y Position in Pixeln
-        DLLEXPORT void setPosition( int x, int y );
-        //! Setzt die Größe der Zeichnung
-        //! \param br Die Breite in Pixeln
-        //! \param height Die Höhe in Pixeln
-        DLLEXPORT void setSize( int br, int height );
-        //! Setzt den Style der Zeichnung
-        //! \param style Der neue Style bestehend aus den Flags aus der zugehörigen Style Klasse
-        DLLEXPORT void setStyle( __int64 style );
-        //! Setzt den Style der Zeichnung
-        //! \param style Alle Style Flags, die verändert werden sollen
-        //! \param add_remove 1, falls der Style hinzugefügt werden soll. 0, falls der Style entfernt weden soll
-        DLLEXPORT void setStyle( __int64 style, bool add_remove );
-        //! Fügt Style Flags hinzu
-        //! \param style Der Style, der hinzugefügt werden soll
-        DLLEXPORT void addStyle( __int64 style );
-        //! Entfernt Style Flags
-        //! \param style Der Style, der entfernt werden soll
-        DLLEXPORT void removeStyle( __int64 style );
-        //! Zeichnet die Zeihnung in ein bestimmtes Bild
-        //! \param zRObj Das Bild, in das gezeichnet werden soll
-        DLLEXPORT virtual void render( Bild &zRObj );
-        //! Gibt zurück, ob eine Rückruffunktion für Maus Ereignisse gesetzt wurde
-        DLLEXPORT bool hatMausEreignis() const;
-        //! Gibt zurück, ob eine Rückruffunktion für Tastatur Ereignisse gesetzt wurde
-        DLLEXPORT bool hatTastaturEreignis() const;
-        //! Gibt die Position der Zeichnung in Pixeln zurück
-        DLLEXPORT const Punkt &getPosition() const;
-        //! Gibt die Größe der Zeichnung in Pixeln zurück. x für Breite und y für Höhe
-        DLLEXPORT const Punkt &getSize() const;
-        //! Gibt die Breite der Zeichnung in Pixeln zurück
-        DLLEXPORT int getBreite() const;
-        //! Gibt die Höhe der Zeichnung in Pixeln zurück
-        DLLEXPORT int getHeight() const;
-        //! Gibt die Breite des Innenraumes in der Zeichnung in Pixeln zurück
-        DLLEXPORT virtual int getInnenBreite() const;
-        //! Gibt die Höhe des Innenraumes in der Zeichnung in Pixeln zurück
-        DLLEXPORT virtual int getInnenHeight() const;
-        //! Gibt die X Position der Zeichnung in Pixeln zurück
-        DLLEXPORT int getX() const;
-        //! Gibt die Y Position der Zeichnung in Pixeln zurück
-        DLLEXPORT int getY() const;
-        //! Prüft, ob ein Punkt in diesem Objekt liegt
-        //! \param p der Punkt
-        //! \return 1, wenn der punkt innen ist, 0 sonst
-        DLLEXPORT virtual bool istPunktInnen( Punkt p ) const;
-        //! Prüft, ob ein Punkt in diesem Objekt liegt
-        //! \param x die x koordinate des punktes
-        //! \param y die y koordinate des punktes
-        //! \return 1, wenn der punkt innen ist, 0 sonst
-        DLLEXPORT virtual bool istPunktInnen( int x, int y ) const;
-        //! Gibt einen Zeiger auf das Tooltip Objekt zurück, walls es verwendet wird
-        DLLEXPORT ToolTip *getToolTip() const;
-        //! Gibt einen Zeiger auf das Tooltip Objekt ohne erhöhten Reference Counter zurück, walls es verwendet wird
-        DLLEXPORT ToolTip *zToolTip() const;
-        //! Gibt zurück, ob bestimmte Styles gesetzt wurden
-        //! \param style Die Styles, die überprüft werden sollen
-        //! \return 1, falls alle Styles in style gesetzt wurden
-        DLLEXPORT bool hatStyle( __int64 style ) const;
-        //! Gibt zurück, ob bestimmte Styles nicht gesetzt wurden
-        //! \param style Die Styles, die geprüft werden sollen
-        //! \return 1, falls alle Styles in style nicht gesetzt wurden
-        DLLEXPORT bool hatStyleNicht( __int64 style ) const;
-        //! Kopiert die Komplette Zeichnung, so dass sie ohne Effekt auf das Original verändert werden kann
-        DLLEXPORT virtual Zeichnung *dublizieren() const;
-    };
+	public:
+		//! Konstruktor 
+		DLLEXPORT Zeichnung();
+		//! Destruktor 
+		DLLEXPORT virtual ~Zeichnung();
+		//! Übergibt einen void Funktionszeiger auf eine Aktion die einmalig vom Hauptthread ausgeführt werden soll. Wird am ende von tick() aufgerufen
+		DLLEXPORT void postAction(std::function< void() > action);
+		//! Legt fest, ob sich die Zeichnung seit des letzten Bildes verändert hat und neu gezeichnet werden muss
+		DLLEXPORT void setRender();
+		//! Setzt den Text, der erscheint, wenn der Benutzer für längere Zeit mit der Maus in der Zeichnung verweilt
+		//! \param txt Der Text, der angezeigt werden soll
+		//! \param zScreen Ein Zeiger auf das Verwendete Bildschirm Objekt ohne erhöhten Reference Counter
+		//! \param zSchrift Ein Zeiger auf die Schrift, die verwendet werden soll ohne erhöhten Reference Counter
+		DLLEXPORT void setToolTipText(const char* txt, Bildschirm* zScreen, Schrift* zSchrift);
+		//! setzt eine Funktion, die aufgerufen wird, falls ein Tooltip benötigt wird und noch keiner gesetzt wurde
+		//! \param initToolTip die Funktion
+		DLLEXPORT void setNeedToolTipEvent(std::function< void(Zeichnung*, Punkt localPos) > onNeedTooltip);
+		//! legt den tooltip fest
+		//! \param tt der tooltip
+		DLLEXPORT void setToolTipZ(ToolTip* tt);
+		//! Dies ist notwendig, falls mehrere Threads gleichzeitig die Zeichnung benutzen.
+		//! Wenn lockZeichnung() von zwei threads aufgerufen wird, wartet der letzte so lange, bis der erste unlockZeichnung() aufgerufen hat.
+		DLLEXPORT void lockZeichnung();
+		//! Dies ist notwendig, falls mehrere Threads gleichzeitig die Zeichnung benutzen.
+		//! Wenn lockZeichnung() von zwei threads aufgerufen wird, wartet der letzte so lange, bis der erste unlockZeichnung() aufgerufen hat.
+		DLLEXPORT void unlockZeichnung();
+		//! setzt den Parameter, der bei einem Maus Ereignis an die Rückruffunktion übergeben wird
+		//! \param p Der Parameter
+		DLLEXPORT void setMausEreignisParameter(void* p);
+		//! Setzt den Parameter, der bei einem Tastatur Ereignis an die Rückruffunktion übergeben wird
+		//! \param p Der Parameter
+		DLLEXPORT void setTastaturEreignisParameter(void* p);
+		//! Setzt die Rückruffunktion, die bei einem Maus Ereignis aufgerufen werden soll.
+		//! Wenn die Rückruffunktion 0 zurückgiebt, oder nicht gesetzt wurde, wird ein Maus Ereignis von der Zeichnung nicht weiter beachtet
+		//! Es kann die Standartfunktion __ret1ME verwendet werden, die in MausEreignis.h definiert ist und immer 1 zurückgibt
+		//! \param ak Ein Zeiger auf die Rückruffunktion
+		DLLEXPORT void setMausEreignis(MausAktion ak);
+		//! Setzt die Rückruffunktion, die bei einem Tastatur Ereignis aufgerufen werdne soll.
+		//! Wenn die Rückruffunktion 0 zurückgiebt, oder nicht gesetzt wurde, wird ein Tastatur Ereignis von der Zeichnung nicht weiter beachtet
+		//! Es kann die Standartfunktion __ret1TE verwendet werden, die in TastaturEreignis.h definiert ist und immer 1 zurückgibt
+		//! Weitere Standartfunktionen sind _nurNummernTE und _nurHexTE ebenfals aus TastaturEreignis.h
+		//! \param ak Ein Zeiger auf die Rückruffunktion
+		DLLEXPORT void setTastaturEreignis(TastaturAktion ak);
+		//! setzt den Parameter, der bei einem Maus Ereignis an die Rückruffunktion übergeben wird, die aufgerufen wird, fals das Ereignis von der Zeichnung verarbeitet wurde
+		//! \param p Der Parameter
+		DLLEXPORT void setNMausEreignisParameter(void* p);
+		//! Setzt den Parameter, der bei einem Tastatur Ereignis an die Rückruffunktion übergeben wird, die aufgerufen wird, fals das Ereignis von der Zeichnung verarbeitet wurde
+		//! \param p Der Parameter
+		DLLEXPORT void setNTastaturEreignisParameter(void* p);
+		//! Setzt die Rückruffunktion, die bei einem Maus Ereignis aufgerufen werden soll, nachdem das Ereignis bereits von der Zeichnung verarbeitet wurde
+		//! Wenn die Rückruffunktion 1 zurückgiebt, oder nicht gesetzt wurde, wird das Maus Ereignis von keiner weiteren Zeichnung verarbeitet, die zum Beispiel hinter dieser Zeichnung liegen
+		//! Es kann die Standartfunktion __ret1ME verwendet werden, die in MausEreignis.h definiert ist und immer 1 zurückgibt
+		//! \param ak Ein Zeiger auf die Rückruffunktion
+		DLLEXPORT void setNMausEreignis(MausAktion ak);
+		//! Setzt die Rückruffunktion, die bei einem Tastatur Ereignis aufgerufen werdne soll, nachdem das Ereignis bereits von der Zeichnung verarbeitet wurde
+		//! Wenn die Rückruffunktion 1 zurückgiebt, oder nicht gesetzt wurde, wird das Tastatur Ereignis von keiner weiteren Zeichnung verarbeitet
+		//! Es kann die Standartfunktion __ret1TE verwendet werden, die in TastaturEreignis.h definiert ist und immer 1 zurückgibt
+		//! Weitere Standartfunktionen sind _nurNummernTE und _nurHexTE ebenfals aus TastaturEreignis.h
+		//! \param ak Ein Zeiger auf die Rückruffunktion
+		DLLEXPORT void setNTastaturEreignis(TastaturAktion ak);
+		//! Verarbeitet ein Maus Ereignis. Wird vom Framework automatisch aufgerufen.
+		//! \param me Das Ereignis
+		DLLEXPORT virtual void doPublicMausEreignis(MausEreignis& me);
+		//! Verarbeitet ein Tastatur Ereignis. Wird vom Framework automatisch aufgerufen
+		//! \param te Das Ereignis
+		DLLEXPORT virtual void doTastaturEreignis(TastaturEreignis& te);
+		//! Verarbeitet die Zeit, die seit dem letzten aufruf dieser Funktion vergangen ist
+		//! \param tickVal Die vergangene Zeit in Sekunden
+		DLLEXPORT virtual bool tick(double tickval);
+		//! Setzt die Position der Zeichnung
+		//! \param pos Die Position in Pixeln
+		DLLEXPORT void setPosition(const Punkt& pos);
+		//! Setzt die X Position der Zeichnung
+		//! \param xPos Die Position in Pixeln
+		DLLEXPORT void setX(int xPos);
+		//! Setzt die Y Position der Zeichnung
+		//! \param yPos Die Position in Pixeln
+		DLLEXPORT void setY(int yPos);
+		//! Setzt die Größe der Zeichnung
+		//! \param gr Ein Punkt mit x als Breite und y als Höhe in Pixeln
+		DLLEXPORT void setSize(const Punkt& gr);
+		//! Setzt die Position der Zeichnung
+		//! \param x Die X Position in Pixeln
+		//! \param y Die Y Position in Pixeln
+		DLLEXPORT void setPosition(int x, int y);
+		//! Setzt die Größe der Zeichnung
+		//! \param br Die Breite in Pixeln
+		//! \param height Die Höhe in Pixeln
+		DLLEXPORT void setSize(int br, int height);
+		//! Set the width in pixel
+		//! \param width the width
+		DLLEXPORT void setWidth(int width);
+		//! Set the height in pixel
+		//! \param width the height
+		DLLEXPORT void setHeight(int height);
+		//! Setzt den Style der Zeichnung
+		//! \param style Der neue Style bestehend aus den Flags aus der zugehörigen Style Klasse
+		DLLEXPORT void setStyle(__int64 style);
+		//! Setzt den Style der Zeichnung
+		//! \param style Alle Style Flags, die verändert werden sollen
+		//! \param add_remove 1, falls der Style hinzugefügt werden soll. 0, falls der Style entfernt weden soll
+		DLLEXPORT void setStyle(__int64 style, bool add_remove);
+		//! Fügt Style Flags hinzu
+		//! \param style Der Style, der hinzugefügt werden soll
+		DLLEXPORT void addStyle(__int64 style);
+		//! Entfernt Style Flags
+		//! \param style Der Style, der entfernt werden soll
+		DLLEXPORT void removeStyle(__int64 style);
+		//! Zeichnet die Zeihnung in ein bestimmtes Bild
+		//! \param zRObj Das Bild, in das gezeichnet werden soll
+		DLLEXPORT virtual void render(Bild& zRObj);
+		//! Gibt zurück, ob eine Rückruffunktion für Maus Ereignisse gesetzt wurde
+		DLLEXPORT bool hatMausEreignis() const;
+		//! Gibt zurück, ob eine Rückruffunktion für Tastatur Ereignisse gesetzt wurde
+		DLLEXPORT bool hatTastaturEreignis() const;
+		//! Gibt die Position der Zeichnung in Pixeln zurück
+		DLLEXPORT const Punkt& getPosition() const;
+		//! Gibt die Größe der Zeichnung in Pixeln zurück. x für Breite und y für Höhe
+		DLLEXPORT const Punkt& getSize() const;
+		//! Gibt die Breite der Zeichnung in Pixeln zurück
+		DLLEXPORT int getBreite() const;
+		//! Gibt die Höhe der Zeichnung in Pixeln zurück
+		DLLEXPORT int getHeight() const;
+		//! Gibt die Breite des Innenraumes in der Zeichnung in Pixeln zurück
+		DLLEXPORT virtual int getInnenBreite() const;
+		//! Gibt die Höhe des Innenraumes in der Zeichnung in Pixeln zurück
+		DLLEXPORT virtual int getInnenHeight() const;
+		//! Gibt die X Position der Zeichnung in Pixeln zurück
+		DLLEXPORT int getX() const;
+		//! Gibt die Y Position der Zeichnung in Pixeln zurück
+		DLLEXPORT int getY() const;
+		//! Prüft, ob ein Punkt in diesem Objekt liegt
+		//! \param p der Punkt
+		//! \return 1, wenn der punkt innen ist, 0 sonst
+		DLLEXPORT virtual bool istPunktInnen(Punkt p) const;
+		//! Prüft, ob ein Punkt in diesem Objekt liegt
+		//! \param x die x koordinate des punktes
+		//! \param y die y koordinate des punktes
+		//! \return 1, wenn der punkt innen ist, 0 sonst
+		DLLEXPORT virtual bool istPunktInnen(int x, int y) const;
+		//! Gibt einen Zeiger auf das Tooltip Objekt zurück, walls es verwendet wird
+		DLLEXPORT ToolTip* getToolTip() const;
+		//! Gibt einen Zeiger auf das Tooltip Objekt ohne erhöhten Reference Counter zurück, walls es verwendet wird
+		DLLEXPORT ToolTip* zToolTip() const;
+		//! Gibt zurück, ob bestimmte Styles gesetzt wurden
+		//! \param style Die Styles, die überprüft werden sollen
+		//! \return 1, falls alle Styles in style gesetzt wurden
+		DLLEXPORT bool hatStyle(__int64 style) const;
+		//! Gibt zurück, ob bestimmte Styles nicht gesetzt wurden
+		//! \param style Die Styles, die geprüft werden sollen
+		//! \return 1, falls alle Styles in style nicht gesetzt wurden
+		DLLEXPORT bool hatStyleNicht(__int64 style) const;
+		//! Kopiert die Komplette Zeichnung, so dass sie ohne Effekt auf das Original verändert werden kann
+		DLLEXPORT virtual Zeichnung* dublizieren() const;
+	};
 
-    //! Eine Zeichnung für das 2D GUI Framework mit Hintergrund, Rahmen und Scroll Balken
-    class ZeichnungHintergrund : public Zeichnung
-    {
-    public:
-        class Style : public Zeichnung::Style
-        {
-        public:
-            const static __int64 Rahmen = 0x00010; //! Wenn dieser Flag gesetzt wird, bekommt die Zeichnugn einen Rahmen
-            const static __int64 Hintergrund = 0x00020; //! Wenn dieser Flag gesetzt wird, bekommt die Zeichnung einen Hintergrund
-            const static __int64 HAlpha = 0x00040; //! Wenn dieser Flag gesetzt wird, wird der Hintergrund durchsichtig. Benötigt Flag Hintergrund
-            const static __int64 HBild = 0x00080; //! Wenn dieser Flag gesetzt wird, wird ein Bild als hintergrund verwendet. Benötigt Flag Hintergrund
-            const static __int64 Buffered = 0x00100; //! Wenn dieser Flag gesetzt wird, Erscheint ein Farbübergang als Rahmen
-            const static __int64 VScroll = 0x00200; //! Wenn dieser Flag gesetzt wird, erscheint eine Scrollbar am rechten Rand
-            const static __int64 HScroll = 0x00400; //! Wenn dieser Flag gesetzt wird, erscheint eine Scrollbar am unteren Rand
-        };
+	//! Eine Zeichnung für das 2D GUI Framework mit Hintergrund, Rahmen und Scroll Balken
+	class ZeichnungHintergrund : public Zeichnung
+	{
+	public:
+		class Style : public Zeichnung::Style
+		{
+		public:
+			const static __int64 Rahmen = 0x00010; //! Wenn dieser Flag gesetzt wird, bekommt die Zeichnugn einen Rahmen
+			const static __int64 Hintergrund = 0x00020; //! Wenn dieser Flag gesetzt wird, bekommt die Zeichnung einen Hintergrund
+			const static __int64 HAlpha = 0x00040; //! Wenn dieser Flag gesetzt wird, wird der Hintergrund durchsichtig. Benötigt Flag Hintergrund
+			const static __int64 HBild = 0x00080; //! Wenn dieser Flag gesetzt wird, wird ein Bild als hintergrund verwendet. Benötigt Flag Hintergrund
+			const static __int64 Buffered = 0x00100; //! Wenn dieser Flag gesetzt wird, Erscheint ein Farbübergang als Rahmen
+			const static __int64 VScroll = 0x00200; //! Wenn dieser Flag gesetzt wird, erscheint eine Scrollbar am rechten Rand
+			const static __int64 HScroll = 0x00400; //! Wenn dieser Flag gesetzt wird, erscheint eine Scrollbar am unteren Rand
+		};
 
-    protected:
-        int hintergrundFarbe;
-        Rahmen *rahmen;
-        Bild *hintergrundBild;
-        AlphaFeld *hintergrundFeld;
-        VScrollBar *vertikalScrollBar;
-        HScrollBar *horizontalScrollBar;
-        Punkt innenPosition;
-        Punkt innenSize;
+	protected:
+		int hintergrundFarbe;
+		Rahmen* rahmen;
+		Bild* hintergrundBild;
+		AlphaFeld* hintergrundFeld;
+		VScrollBar* vertikalScrollBar;
+		HScrollBar* horizontalScrollBar;
+		Punkt innenPosition;
+		Punkt innenSize;
 
-    public:
-        //! Konstruktor 
-        DLLEXPORT ZeichnungHintergrund();
-        //! Destruktor 
-        DLLEXPORT virtual ~ZeichnungHintergrund();
-        //! Setzt das Hintergrund Bild (benötigt Flag zum Zeichnen: Style::Hintergrund, HBild)
-        //! \param bild Das Bild wird kopiert und als Hintergrundbild verwendet
-        DLLEXPORT void setHintergrundBild( Bild *bild );
-        //! Setzt einen Zeiger auf das Hintergrund Bild (benötigt Flag zum Zeichnen: Style::Hintergrund)
-        //! \param bild Das Bild wid ohne es zu kopieren verwendet
-        DLLEXPORT void setHintergrundBildZ( Bild *bild );
-        //! Setzt die Hintergrund Farbe (benötigt Flag zum Zeichnen: Style::Hintergrund)
-        //! \param fc Die Hintergrundfarbe im A8R8G8B8 Format
-        DLLEXPORT void setHintergrundFarbe( int fc );
-        //! Setzt einen Zeiger auf das AlphaFeld (benötigt Flag zum Zeichnen: Style::Buffered)
-        //! \param buff Das AlphaFeld, das über den Hintergrund gezeichnet werden soll
-        DLLEXPORT void setAlphaFeldZ( AlphaFeld *buff );
-        //! Setzt die Stärke des AlphaFeldes (benötigt Flag zum Zeichnen: Style::Buffered)
-        //! \param st Die Stärke des AlphaFeldes, welches über dem Hintergrund gezeichnet werden soll
-        DLLEXPORT void setAlphaFeldStrength( int st );
-        //! Setzt die Farbe des AlphaFeldes (benötigt Flag zum Zeichnen: Style::Buffered)
-        //! \param fc Die Farbe des AlphaFeldes, welches über dem Hintergrund gezeichnet werden soll
-        DLLEXPORT void setAlphaFeldFarbe( int fc );
-        //! Setzt einen Zeiger zu dem Linien Rahmen, der um das TextFeld gezeichnet werden soll (benötigt Flag zum Zeichnen: Style::Rahmen)
-        //! \param ram Der Rahmen
-        DLLEXPORT void setRahmenZ( Rahmen *ram );
-        //! Setzt die Breite des Linien Rahmens (benötigt Flag zum Zeichnen: Style::Rahmen)
-        //! \param br Die Breite in Pixeln
-        DLLEXPORT void setRahmenBreite( int br );
-        //! Setzt die Farbe des Linien Rahmens (benötigt Flag zum Zeichnen: Style::Rahmen)
-        //! \param fc Die Farbe im A8R8G8B8 Format
-        DLLEXPORT void setRahmenFarbe( int fc );
-        //! Setzt die Scrollgeschwindigkeit der vertikalen ScrollBar (benötigt Flag zum Zeichnen: Style::VScroll)
-        //! \param ks Die Scrollgeschwindigkeit in Pixeln für jeden Maus Klick
-        DLLEXPORT void setVertikalKlickScroll( int ks );
-        //! Scrollt an eine Bestimmte Stelle bei der vertikalen ScrollBar (benötigt Flag zum Zeichnen: Style::VScroll)
-        //! \param pos Das Scroll Offset in Pixeln.
-        DLLEXPORT void setVertikalScrollPos( int pos );
-        //! Setzt die Farbe der vertikalen ScrollBar (benötigt Flag zum Zeichnen: Style::VScroll)
-        //! \param f Die Fordergrundfarbe der ScrollBar im A8R8G8B8 Format
-        //! \param bgF Die Hintergrundfarbe der ScrollBar im A8R8G8B8 Format
-        DLLEXPORT void setVertikalScrollFarbe( int f, int bgF );
-        //! Setzt die Scrollgeschwindigkeit der horizontalen ScrollBar (benötigt Flag zum Zeichnen: Style::HScroll)
-        //! \param ks Die Scrollgeschwindigkeit in Pixeln für jeden Maus Klick
-        DLLEXPORT void setHorizontalKlickScroll( int ks );
-        //! Scrollt an eine Bestimmte Stelle bei der horizontalen ScrollBar (benötigt Flag zum Zeichnen: Style::HScroll)
-        //! \param pos Das Scroll Offset in Pixeln.
-        DLLEXPORT void setHorizontalScrollPos( int pos );
-        //! Setzt die Farbe der horizontalen ScrollBar (benötigt Flag zum Zeichnen: Style::HScroll)
-        //! \param f Die Fordergrundfarbe der ScrollBar im A8R8G8B8 Format
-        //! \param bgF Die Hintergrundfarbe der ScrollBar im A8R8G8B8 Format
-        DLLEXPORT void setHorizontalScrollFarbe( int f, int bgF );
-        //! Updated den Zeichenhintergrund
-        //! \param tickVal Die vergangene Zeit in Sekunden, die seit dem Letzten Aufruf dieser Funktion verstrichen ist
-        //! \return 1, wenn das Bild neu gezeichnet werden muss. 0 sonnst
-        DLLEXPORT bool tick( double tickVal ) override;
-        //! Zeichnet den Hintergrund eines Zeichnunges nach rObj
-        DLLEXPORT void render( Bild &rObj ) override;
+	public:
+		//! Konstruktor 
+		DLLEXPORT ZeichnungHintergrund();
+		//! Destruktor 
+		DLLEXPORT virtual ~ZeichnungHintergrund();
+		//! Setzt das Hintergrund Bild (benötigt Flag zum Zeichnen: Style::Hintergrund, HBild)
+		//! \param bild Das Bild wird kopiert und als Hintergrundbild verwendet
+		DLLEXPORT void setHintergrundBild(Bild* bild);
+		//! Setzt einen Zeiger auf das Hintergrund Bild (benötigt Flag zum Zeichnen: Style::Hintergrund)
+		//! \param bild Das Bild wid ohne es zu kopieren verwendet
+		DLLEXPORT void setHintergrundBildZ(Bild* bild);
+		//! Setzt die Hintergrund Farbe (benötigt Flag zum Zeichnen: Style::Hintergrund)
+		//! \param fc Die Hintergrundfarbe im A8R8G8B8 Format
+		DLLEXPORT void setHintergrundFarbe(int fc);
+		//! Setzt einen Zeiger auf das AlphaFeld (benötigt Flag zum Zeichnen: Style::Buffered)
+		//! \param buff Das AlphaFeld, das über den Hintergrund gezeichnet werden soll
+		DLLEXPORT void setAlphaFeldZ(AlphaFeld* buff);
+		//! Setzt die Stärke des AlphaFeldes (benötigt Flag zum Zeichnen: Style::Buffered)
+		//! \param st Die Stärke des AlphaFeldes, welches über dem Hintergrund gezeichnet werden soll
+		DLLEXPORT void setAlphaFeldStrength(int st);
+		//! Setzt die Farbe des AlphaFeldes (benötigt Flag zum Zeichnen: Style::Buffered)
+		//! \param fc Die Farbe des AlphaFeldes, welches über dem Hintergrund gezeichnet werden soll
+		DLLEXPORT void setAlphaFeldFarbe(int fc);
+		//! Setzt einen Zeiger zu dem Linien Rahmen, der um das TextFeld gezeichnet werden soll (benötigt Flag zum Zeichnen: Style::Rahmen)
+		//! \param ram Der Rahmen
+		DLLEXPORT void setRahmenZ(Rahmen* ram);
+		//! Setzt die Breite des Linien Rahmens (benötigt Flag zum Zeichnen: Style::Rahmen)
+		//! \param br Die Breite in Pixeln
+		DLLEXPORT void setRahmenBreite(int br);
+		//! Setzt die Farbe des Linien Rahmens (benötigt Flag zum Zeichnen: Style::Rahmen)
+		//! \param fc Die Farbe im A8R8G8B8 Format
+		DLLEXPORT void setRahmenFarbe(int fc);
+		//! Setzt die Scrollgeschwindigkeit der vertikalen ScrollBar (benötigt Flag zum Zeichnen: Style::VScroll)
+		//! \param ks Die Scrollgeschwindigkeit in Pixeln für jeden Maus Klick
+		DLLEXPORT void setVertikalKlickScroll(int ks);
+		//! Scrollt an eine Bestimmte Stelle bei der vertikalen ScrollBar (benötigt Flag zum Zeichnen: Style::VScroll)
+		//! \param pos Das Scroll Offset in Pixeln.
+		DLLEXPORT void setVertikalScrollPos(int pos);
+		//! Setzt die Farbe der vertikalen ScrollBar (benötigt Flag zum Zeichnen: Style::VScroll)
+		//! \param f Die Fordergrundfarbe der ScrollBar im A8R8G8B8 Format
+		//! \param bgF Die Hintergrundfarbe der ScrollBar im A8R8G8B8 Format
+		DLLEXPORT void setVertikalScrollFarbe(int f, int bgF);
+		//! Setzt die Scrollgeschwindigkeit der horizontalen ScrollBar (benötigt Flag zum Zeichnen: Style::HScroll)
+		//! \param ks Die Scrollgeschwindigkeit in Pixeln für jeden Maus Klick
+		DLLEXPORT void setHorizontalKlickScroll(int ks);
+		//! Scrollt an eine Bestimmte Stelle bei der horizontalen ScrollBar (benötigt Flag zum Zeichnen: Style::HScroll)
+		//! \param pos Das Scroll Offset in Pixeln.
+		DLLEXPORT void setHorizontalScrollPos(int pos);
+		//! Setzt die Farbe der horizontalen ScrollBar (benötigt Flag zum Zeichnen: Style::HScroll)
+		//! \param f Die Fordergrundfarbe der ScrollBar im A8R8G8B8 Format
+		//! \param bgF Die Hintergrundfarbe der ScrollBar im A8R8G8B8 Format
+		DLLEXPORT void setHorizontalScrollFarbe(int f, int bgF);
+		//! Updated den Zeichenhintergrund
+		//! \param tickVal Die vergangene Zeit in Sekunden, die seit dem Letzten Aufruf dieser Funktion verstrichen ist
+		//! \return 1, wenn das Bild neu gezeichnet werden muss. 0 sonnst
+		DLLEXPORT bool tick(double tickVal) override;
+		//! Zeichnet den Hintergrund eines Zeichnunges nach rObj
+		DLLEXPORT void render(Bild& rObj) override;
 
-        //! Gibt die Breite des Innenraumes in der Zeichnung in Pixeln zurück
-        DLLEXPORT virtual int getInnenBreite() const override;
-        //! Gibt die Höhe des Innenraumes in der Zeichnung in Pixeln zurück
-        DLLEXPORT virtual int getInnenHeight() const override;
-        //! Gibt das Hintergrundbild zurück.
-        //! \return 0, falls kein Hintergrundbild verwendet wird
-        DLLEXPORT Bild *getHintergrundBild() const;
-        //! Gibt das Hintergrundbild ohne erhöhten reference Counter zurück.
-        //! \return 0, falls kein Hintergrundbild verwendet wird
-        DLLEXPORT Bild *zHintergrundBild() const;
-        //! Gibt die Hintergrundfarbe im A8R8G8B8 Format zurück
-        DLLEXPORT int getHintergrundFarbe() const;
-        //! Gibt das AlphaFeld zurück, das über den Hintergrund gezeichnet wird.
-        //! \return 0, falls das AlphaFeld nicht definiert wurde
-        DLLEXPORT AlphaFeld *getAlphaFeld() const;
-        //! Gibt das AlphaFeld ohne erhöhten Reference Counter zurück, das über den Hintergrund gezeichnet wird.
-        //! \return 0, falls das AlphaFeld nicht definiert wurde
-        DLLEXPORT AlphaFeld *zAlphaFeld() const;
-        //! Git die Stärke des Alphafeldes zurück
-        DLLEXPORT int getAlphaFeldStrength() const;
-        //! Gibt die Farbe des Alphafedes im A8R8G8B8 Format zurück
-        DLLEXPORT int getAlphaFeldFarbe() const;
-        //! Gibt den Rahmen zurück
-        //! \return 0, falls kein Rahmen definiert wurde
-        DLLEXPORT Rahmen *getRahmen() const;
-        //! Gibt den Rahmen ohne erhöhten Reference Counter zurück
-        //! \return 0, falls kein Rahmen definiert wurde
-        DLLEXPORT Rahmen *zRahmen() const;
-        //! Gibt die Breite des Rahmens in Pixeln zurück
-        DLLEXPORT int getRahmenBreite() const;
-        //! Gibt die Farbe des Rahmens im A8R8G8B8 Format zurück
-        DLLEXPORT int getRahmenFarbe() const;
-        //! Gibt die Scroll geschwindigkeit der vertikalen Scroll Bar zurück
-        DLLEXPORT int getVertikalKlickScroll() const;
-        //! Gibt die Scroll Position der vertikalen Scroll Bar zurück
-        DLLEXPORT int getVertikalScrollPos() const;
-        //! Gibt die Farbe der vertikalen Scroll Bar im A8R8G8B8 Format zurück
-        DLLEXPORT int getVertikalScrollFarbe() const;
-        //! Gibt die Hintergrundfarbe der vertikalen Scroll Bar im A8R8G8B8 Format zurück
-        DLLEXPORT int getVertikalScrollHintergrund() const;
-        //! Gibt die Scroll geschwindigkeit der horizontalen Scroll Bar zurück
-        DLLEXPORT int getHorizontalKlickScroll() const;
-        //! Gibt die Scroll Position der horizontalen Scroll Bar zurück
-        DLLEXPORT int getHorizontalScrollPos() const;
-        //! Gibt die Farbe der horizontalen Scroll Bar im A8R8G8B8 Format zurück
-        DLLEXPORT int getHorizontalScrollFarbe() const;
-        //! Gibt die Hintergrundfarbe der horizontalen Scroll Bar im A8R8G8B8 Format zurück
-        DLLEXPORT int getHorizontalScrollHintergrund() const;
-        //! Erzeugt eine Kopie der Zeichnung, die ohne Auswirkungen auf das Original verändert werden kann
-        DLLEXPORT virtual Zeichnung *dublizieren() const;
-    };
+		//! Gibt die Breite des Innenraumes in der Zeichnung in Pixeln zurück
+		DLLEXPORT virtual int getInnenBreite() const override;
+		//! Gibt die Höhe des Innenraumes in der Zeichnung in Pixeln zurück
+		DLLEXPORT virtual int getInnenHeight() const override;
+		//! Gibt das Hintergrundbild zurück.
+		//! \return 0, falls kein Hintergrundbild verwendet wird
+		DLLEXPORT Bild* getHintergrundBild() const;
+		//! Gibt das Hintergrundbild ohne erhöhten reference Counter zurück.
+		//! \return 0, falls kein Hintergrundbild verwendet wird
+		DLLEXPORT Bild* zHintergrundBild() const;
+		//! Gibt die Hintergrundfarbe im A8R8G8B8 Format zurück
+		DLLEXPORT int getHintergrundFarbe() const;
+		//! Gibt das AlphaFeld zurück, das über den Hintergrund gezeichnet wird.
+		//! \return 0, falls das AlphaFeld nicht definiert wurde
+		DLLEXPORT AlphaFeld* getAlphaFeld() const;
+		//! Gibt das AlphaFeld ohne erhöhten Reference Counter zurück, das über den Hintergrund gezeichnet wird.
+		//! \return 0, falls das AlphaFeld nicht definiert wurde
+		DLLEXPORT AlphaFeld* zAlphaFeld() const;
+		//! Git die Stärke des Alphafeldes zurück
+		DLLEXPORT int getAlphaFeldStrength() const;
+		//! Gibt die Farbe des Alphafedes im A8R8G8B8 Format zurück
+		DLLEXPORT int getAlphaFeldFarbe() const;
+		//! Gibt den Rahmen zurück
+		//! \return 0, falls kein Rahmen definiert wurde
+		DLLEXPORT Rahmen* getRahmen() const;
+		//! Gibt den Rahmen ohne erhöhten Reference Counter zurück
+		//! \return 0, falls kein Rahmen definiert wurde
+		DLLEXPORT Rahmen* zRahmen() const;
+		//! Gibt die Breite des Rahmens in Pixeln zurück
+		DLLEXPORT int getRahmenBreite() const;
+		//! Gibt die Farbe des Rahmens im A8R8G8B8 Format zurück
+		DLLEXPORT int getRahmenFarbe() const;
+		//! Gibt die Scroll geschwindigkeit der vertikalen Scroll Bar zurück
+		DLLEXPORT int getVertikalKlickScroll() const;
+		//! Gibt die Scroll Position der vertikalen Scroll Bar zurück
+		DLLEXPORT int getVertikalScrollPos() const;
+		//! Gibt die Farbe der vertikalen Scroll Bar im A8R8G8B8 Format zurück
+		DLLEXPORT int getVertikalScrollFarbe() const;
+		//! Gibt die Hintergrundfarbe der vertikalen Scroll Bar im A8R8G8B8 Format zurück
+		DLLEXPORT int getVertikalScrollHintergrund() const;
+		//! Gibt die Scroll geschwindigkeit der horizontalen Scroll Bar zurück
+		DLLEXPORT int getHorizontalKlickScroll() const;
+		//! Gibt die Scroll Position der horizontalen Scroll Bar zurück
+		DLLEXPORT int getHorizontalScrollPos() const;
+		//! Gibt die Farbe der horizontalen Scroll Bar im A8R8G8B8 Format zurück
+		DLLEXPORT int getHorizontalScrollFarbe() const;
+		//! Gibt die Hintergrundfarbe der horizontalen Scroll Bar im A8R8G8B8 Format zurück
+		DLLEXPORT int getHorizontalScrollHintergrund() const;
+		//! Erzeugt eine Kopie der Zeichnung, die ohne Auswirkungen auf das Original verändert werden kann
+		DLLEXPORT virtual Zeichnung* dublizieren() const;
+	};
 }
 
 #endif