PageRenderTime 41ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/binding/win32/gdipluscolor.d

http://github.com/wilkie/djehuty
D | 307 lines | 231 code | 37 blank | 39 comment | 0 complexity | 975185ea9adae65b01449bf4a804de3d MD5 | raw file
  1. /*
  2. * gdicolorplus.d
  3. *
  4. * This module binds GdiPlusColor.h to D. The original copyright notice
  5. * is preserved below.
  6. *
  7. * Author: Dave Wilkinson
  8. * Originated: November 25th, 2009
  9. *
  10. */
  11. module binding.win32.gdicolorplus;
  12. import binding.win32.windef;
  13. import binding.win32.winbase;
  14. import binding.win32.winnt;
  15. import binding.win32.wingdi;
  16. import binding.win32.gdiplustypes;
  17. import binding.win32.gdipluspixelformats;
  18. /**************************************************************************\
  19. *
  20. * Copyright (c) 1998-2001, Microsoft Corp. All Rights Reserved.
  21. *
  22. * Module Name:
  23. *
  24. * GdiplusColor.h
  25. *
  26. * Abstract:
  27. *
  28. * GDI+ Color Object
  29. *
  30. \**************************************************************************/
  31. extern(System):
  32. //----------------------------------------------------------------------------
  33. // Color mode
  34. //----------------------------------------------------------------------------
  35. enum ColorMode {
  36. ColorModeARGB32 = 0,
  37. ColorModeARGB64 = 1
  38. }
  39. //----------------------------------------------------------------------------
  40. // Color Channel flags
  41. //----------------------------------------------------------------------------
  42. enum ColorChannelFlags {
  43. ColorChannelFlagsC = 0,
  44. ColorChannelFlagsM,
  45. ColorChannelFlagsY,
  46. ColorChannelFlagsK,
  47. ColorChannelFlagsLast
  48. }
  49. //----------------------------------------------------------------------------
  50. // Color
  51. //----------------------------------------------------------------------------
  52. class Color {
  53. // Construct an opaque Color object with
  54. // the specified Red, Green, Blue values.
  55. //
  56. // Color values are not premultiplied.
  57. this() {
  58. }
  59. this(in BYTE r, in BYTE g, in BYTE b) {
  60. this(MakeARGB(255, r, g, b));
  61. }
  62. this(in BYTE a, in BYTE r, in BYTE g, in BYTE b) {
  63. this(MakeARGB(a, r, g, b));
  64. }
  65. this(in ARGB argb) {
  66. Argb = argb;
  67. }
  68. BYTE GetAlpha() {
  69. return cast(BYTE) (Argb >> AlphaShift);
  70. }
  71. BYTE GetA() {
  72. return GetAlpha();
  73. }
  74. BYTE GetRed() {
  75. return cast(BYTE) (Argb >> RedShift);
  76. }
  77. BYTE GetR() {
  78. return GetRed();
  79. }
  80. BYTE GetGreen() {
  81. return cast(BYTE) (Argb >> GreenShift);
  82. }
  83. BYTE GetG() {
  84. return GetGreen();
  85. }
  86. BYTE GetBlue() {
  87. return cast(BYTE) (Argb >> BlueShift);
  88. }
  89. BYTE GetB() {
  90. return GetBlue();
  91. }
  92. ARGB GetValue() {
  93. return Argb;
  94. }
  95. VOID SetValue(in ARGB argb) {
  96. Argb = argb;
  97. }
  98. VOID SetFromCOLORREF(in COLORREF rgb) {
  99. Argb = MakeARGB(255, GetRValue(rgb), GetGValue(rgb), GetBValue(rgb));
  100. }
  101. COLORREF ToCOLORREF() {
  102. return (cast(COLORREF)((cast(BYTE)(GetRed())|(cast(WORD)(cast(BYTE)(GetGreen()))<<8))|((cast(DWORD)cast(BYTE)(GetBlue()))<<16)));
  103. }
  104. // Common color constants
  105. enum : ARGB {
  106. AliceBlue = 0xFFF0F8FF,
  107. AntiqueWhite = 0xFFFAEBD7,
  108. Aqua = 0xFF00FFFF,
  109. Aquamarine = 0xFF7FFFD4,
  110. Azure = 0xFFF0FFFF,
  111. Beige = 0xFFF5F5DC,
  112. Bisque = 0xFFFFE4C4,
  113. Black = 0xFF000000,
  114. BlanchedAlmond = 0xFFFFEBCD,
  115. Blue = 0xFF0000FF,
  116. BlueViolet = 0xFF8A2BE2,
  117. Brown = 0xFFA52A2A,
  118. BurlyWood = 0xFFDEB887,
  119. CadetBlue = 0xFF5F9EA0,
  120. Chartreuse = 0xFF7FFF00,
  121. Chocolate = 0xFFD2691E,
  122. Coral = 0xFFFF7F50,
  123. CornflowerBlue = 0xFF6495ED,
  124. Cornsilk = 0xFFFFF8DC,
  125. Crimson = 0xFFDC143C,
  126. Cyan = 0xFF00FFFF,
  127. DarkBlue = 0xFF00008B,
  128. DarkCyan = 0xFF008B8B,
  129. DarkGoldenrod = 0xFFB8860B,
  130. DarkGray = 0xFFA9A9A9,
  131. DarkGreen = 0xFF006400,
  132. DarkKhaki = 0xFFBDB76B,
  133. DarkMagenta = 0xFF8B008B,
  134. DarkOliveGreen = 0xFF556B2F,
  135. DarkOrange = 0xFFFF8C00,
  136. DarkOrchid = 0xFF9932CC,
  137. DarkRed = 0xFF8B0000,
  138. DarkSalmon = 0xFFE9967A,
  139. DarkSeaGreen = 0xFF8FBC8B,
  140. DarkSlateBlue = 0xFF483D8B,
  141. DarkSlateGray = 0xFF2F4F4F,
  142. DarkTurquoise = 0xFF00CED1,
  143. DarkViolet = 0xFF9400D3,
  144. DeepPink = 0xFFFF1493,
  145. DeepSkyBlue = 0xFF00BFFF,
  146. DimGray = 0xFF696969,
  147. DodgerBlue = 0xFF1E90FF,
  148. Firebrick = 0xFFB22222,
  149. FloralWhite = 0xFFFFFAF0,
  150. ForestGreen = 0xFF228B22,
  151. Fuchsia = 0xFFFF00FF,
  152. Gainsboro = 0xFFDCDCDC,
  153. GhostWhite = 0xFFF8F8FF,
  154. Gold = 0xFFFFD700,
  155. Goldenrod = 0xFFDAA520,
  156. Gray = 0xFF808080,
  157. Green = 0xFF008000,
  158. GreenYellow = 0xFFADFF2F,
  159. Honeydew = 0xFFF0FFF0,
  160. HotPink = 0xFFFF69B4,
  161. IndianRed = 0xFFCD5C5C,
  162. Indigo = 0xFF4B0082,
  163. Ivory = 0xFFFFFFF0,
  164. Khaki = 0xFFF0E68C,
  165. Lavender = 0xFFE6E6FA,
  166. LavenderBlush = 0xFFFFF0F5,
  167. LawnGreen = 0xFF7CFC00,
  168. LemonChiffon = 0xFFFFFACD,
  169. LightBlue = 0xFFADD8E6,
  170. LightCoral = 0xFFF08080,
  171. LightCyan = 0xFFE0FFFF,
  172. LightGoldenrodYellow = 0xFFFAFAD2,
  173. LightGray = 0xFFD3D3D3,
  174. LightGreen = 0xFF90EE90,
  175. LightPink = 0xFFFFB6C1,
  176. LightSalmon = 0xFFFFA07A,
  177. LightSeaGreen = 0xFF20B2AA,
  178. LightSkyBlue = 0xFF87CEFA,
  179. LightSlateGray = 0xFF778899,
  180. LightSteelBlue = 0xFFB0C4DE,
  181. LightYellow = 0xFFFFFFE0,
  182. Lime = 0xFF00FF00,
  183. LimeGreen = 0xFF32CD32,
  184. Linen = 0xFFFAF0E6,
  185. Magenta = 0xFFFF00FF,
  186. Maroon = 0xFF800000,
  187. MediumAquamarine = 0xFF66CDAA,
  188. MediumBlue = 0xFF0000CD,
  189. MediumOrchid = 0xFFBA55D3,
  190. MediumPurple = 0xFF9370DB,
  191. MediumSeaGreen = 0xFF3CB371,
  192. MediumSlateBlue = 0xFF7B68EE,
  193. MediumSpringGreen = 0xFF00FA9A,
  194. MediumTurquoise = 0xFF48D1CC,
  195. MediumVioletRed = 0xFFC71585,
  196. MidnightBlue = 0xFF191970,
  197. MintCream = 0xFFF5FFFA,
  198. MistyRose = 0xFFFFE4E1,
  199. Moccasin = 0xFFFFE4B5,
  200. NavajoWhite = 0xFFFFDEAD,
  201. Navy = 0xFF000080,
  202. OldLace = 0xFFFDF5E6,
  203. Olive = 0xFF808000,
  204. OliveDrab = 0xFF6B8E23,
  205. Orange = 0xFFFFA500,
  206. OrangeRed = 0xFFFF4500,
  207. Orchid = 0xFFDA70D6,
  208. PaleGoldenrod = 0xFFEEE8AA,
  209. PaleGreen = 0xFF98FB98,
  210. PaleTurquoise = 0xFFAFEEEE,
  211. PaleVioletRed = 0xFFDB7093,
  212. PapayaWhip = 0xFFFFEFD5,
  213. PeachPuff = 0xFFFFDAB9,
  214. Peru = 0xFFCD853F,
  215. Pink = 0xFFFFC0CB,
  216. Plum = 0xFFDDA0DD,
  217. PowderBlue = 0xFFB0E0E6,
  218. Purple = 0xFF800080,
  219. Red = 0xFFFF0000,
  220. RosyBrown = 0xFFBC8F8F,
  221. RoyalBlue = 0xFF4169E1,
  222. SaddleBrown = 0xFF8B4513,
  223. Salmon = 0xFFFA8072,
  224. SandyBrown = 0xFFF4A460,
  225. SeaGreen = 0xFF2E8B57,
  226. SeaShell = 0xFFFFF5EE,
  227. Sienna = 0xFFA0522D,
  228. Silver = 0xFFC0C0C0,
  229. SkyBlue = 0xFF87CEEB,
  230. SlateBlue = 0xFF6A5ACD,
  231. SlateGray = 0xFF708090,
  232. Snow = 0xFFFFFAFA,
  233. SpringGreen = 0xFF00FF7F,
  234. SteelBlue = 0xFF4682B4,
  235. Tan = 0xFFD2B48C,
  236. Teal = 0xFF008080,
  237. Thistle = 0xFFD8BFD8,
  238. Tomato = 0xFFFF6347,
  239. Transparent = 0x00FFFFFF,
  240. Turquoise = 0xFF40E0D0,
  241. Violet = 0xFFEE82EE,
  242. Wheat = 0xFFF5DEB3,
  243. White = 0xFFFFFFFF,
  244. WhiteSmoke = 0xFFF5F5F5,
  245. Yellow = 0xFFFFFF00,
  246. YellowGreen = 0xFF9ACD32
  247. }
  248. // Shift count and bit mask for A, R, G, B components
  249. enum {
  250. AlphaShift = 24,
  251. RedShift = 16,
  252. GreenShift = 8,
  253. BlueShift = 0
  254. }
  255. enum {
  256. AlphaMask = 0xff000000,
  257. RedMask = 0x00ff0000,
  258. GreenMask = 0x0000ff00,
  259. BlueMask = 0x000000ff
  260. }
  261. // Assemble A, R, G, B values into a 32-bit integer
  262. static ARGB MakeARGB(in BYTE a, in BYTE r, in BYTE g, in BYTE b) {
  263. return ((cast(ARGB) (b) << BlueShift) |
  264. (cast(ARGB) (g) << GreenShift) |
  265. (cast(ARGB) (r) << RedShift) |
  266. (cast(ARGB) (a) << AlphaShift));
  267. }
  268. protected:
  269. ARGB Argb = Black;
  270. }