https://git.reactos.org/?p=reactos.git;a=commitdiff;h=1674307fd1e94b526f6fe…
commit 1674307fd1e94b526f6fe5b208099a08c6faed95
Author:     Katayama Hirofumi MZ <katayama.hirofumi.mz(a)gmail.com>
AuthorDate: Mon Dec 30 18:07:13 2019 +0900
Commit:     GitHub <noreply(a)github.com>
CommitDate: Mon Dec 30 18:07:13 2019 +0900
    [SDK][INCLUDE] Improve gdipluscolor.h (#2195)
    CORE-16585
---
 sdk/include/psdk/gdipluscolor.h | 233 ++++++++++++++++++++++++++++++++++------
 1 file changed, 200 insertions(+), 33 deletions(-)
diff --git a/sdk/include/psdk/gdipluscolor.h b/sdk/include/psdk/gdipluscolor.h
index 8d493272a53..e78b07bb027 100644
--- a/sdk/include/psdk/gdipluscolor.h
+++ b/sdk/include/psdk/gdipluscolor.h
@@ -1,6 +1,7 @@
 /*
  * Copyright (C) 2008 Google (Lei Zhang)
  *               2015 Benedikt Freisen
+ *               2019 Katayama Hirofumi MZ
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -20,81 +21,86 @@
 #ifndef _GDIPLUSCOLOR_H
 #define _GDIPLUSCOLOR_H
-enum ColorChannelFlags
+typedef enum ColorChannelFlags
 {
     ColorChannelFlagsC,
     ColorChannelFlagsM,
     ColorChannelFlagsY,
     ColorChannelFlagsK,
     ColorChannelFlagsLast
-};
+} ColorChannelFlags;
 #ifdef __cplusplus
 class Color
 {
   public:
-    Color(VOID)
+    Color() : Argb(0xff000000)
     {
-        Argb = 0xff000000;
     }
-    Color(ARGB argb)
+    Color(ARGB argb) : Argb(argb)
     {
-        Argb = argb;
     }
-    Color(BYTE r, BYTE g, BYTE b)
+    Color(BYTE r, BYTE g, BYTE b) : Argb(MakeARGB(0xFF, r, g, b))
     {
-        Argb = 0xff << 24 | r << 16 | g << 8 | b;
     }
-    Color(BYTE a, BYTE r, BYTE g, BYTE b)
+    Color(BYTE a, BYTE r, BYTE g, BYTE b) : Argb(MakeARGB(a, r, g, b))
     {
-        Argb = a << 24 | r << 16 | g << 8 | b;
     }
-    BYTE GetA(VOID) const
+    BYTE
+    GetA() const
     {
-        return (Argb >> 24) & 0xff;
+        return (BYTE)(Argb >> 24);
     }
-    BYTE GetAlpha(VOID) const
+    BYTE
+    GetAlpha() const
     {
-        return (Argb >> 24) & 0xff;
+        return (BYTE)(Argb >> 24);
     }
-    BYTE GetB(VOID) const
+    BYTE
+    GetB() const
     {
-        return Argb & 0xff;
+        return (BYTE)Argb;
     }
-    BYTE GetBlue(VOID) const
+    BYTE
+    GetBlue() const
     {
-        return Argb & 0xff;
+        return (BYTE)Argb;
     }
-    BYTE GetG(VOID) const
+    BYTE
+    GetG() const
     {
-        return (Argb >> 8) & 0xff;
+        return (BYTE)(Argb >> 8);
     }
-    BYTE GetGreen(VOID) const
+    BYTE
+    GetGreen() const
     {
-        return (Argb >> 8) & 0xff;
+        return (BYTE)(Argb >> 8);
     }
-    BYTE GetR(VOID) const
+    BYTE
+    GetR() const
     {
-        return (Argb >> 16) & 0xff;
+        return (BYTE)(Argb >> 16);
     }
-    BYTE GetRed(VOID) const
+    BYTE
+    GetRed() const
     {
-        return (Argb >> 16) & 0xff;
+        return (BYTE)(Argb >> 16);
     }
-    ARGB GetValue(VOID) const
+    ARGB
+    GetValue() const
     {
         return Argb;
     }
@@ -102,13 +108,14 @@ class Color
     static ARGB
     MakeARGB(BYTE a, BYTE r, BYTE g, BYTE b)
     {
-        return a << 24 | r << 16 | g << 8 | b;
+        ARGB a0 = a, r0 = r, g0 = g, b0 = b;
+        return (a0 << AlphaShift) | (r0 << RedShift) | (g0 <<
GreenShift) | (b0 << BlueShift);
     }
     VOID
     SetFromCOLORREF(COLORREF rgb)
     {
-        Argb = 0xff000000 | (rgb & 0x000000ff) << 16 | (rgb & 0x0000ff00) |
(rgb & 0x00ff0000) >> 16;
+        Argb = MakeARGB(0xFF, GetRValue(rgb), GetGValue(rgb), GetBValue(rgb));
     }
     VOID
@@ -117,11 +124,173 @@ class Color
         Argb = argb;
     }
-    COLORREF ToCOLORREF(VOID) const
+    COLORREF
+    ToCOLORREF() const
     {
-        return (Argb & 0x000000ff) << 16 | (Argb & 0x0000ff00) | (Argb
& 0x00ff0000) >> 16;
+        return RGB(GetRed(), GetGreen(), GetBlue());
     }
+    enum
+    {
+        AlphaShift = 24,
+        RedShift = 16,
+        GreenShift = 8,
+        BlueShift = 0
+    };
+
+    enum
+    {
+        AlphaMask = 0xFF000000,
+        RedMask = 0x00FF0000,
+        GreenMask = 0x0000FF00,
+        BlueMask = 0x000000FF
+    };
+
+    enum
+    {
+        AliceBlue = 0xFFF0F8FF,
+        AntiqueWhite = 0xFFFAEBD7,
+        Aqua = 0xFF00FFFF,
+        Aquamarine = 0xFF7FFFD4,
+        Azure = 0xFFF0FFFF,
+        Beige = 0xFFF5F5DC,
+        Bisque = 0xFFFFE4C4,
+        Black = 0xFF000000,
+        BlanchedAlmond = 0xFFFFEBCD,
+        Blue = 0xFF0000FF,
+        BlueViolet = 0xFF8A2BE2,
+        Brown = 0xFFA52A2A,
+        BurlyWood = 0xFFDEB887,
+        CadetBlue = 0xFF5F9EA0,
+        Chartreuse = 0xFF7FFF00,
+        Chocolate = 0xFFD2691E,
+        Coral = 0xFFFF7F50,
+        CornflowerBlue = 0xFF6495ED,
+        Cornsilk = 0xFFFFF8DC,
+        Crimson = 0xFFDC143C,
+        Cyan = 0xFF00FFFF,
+        DarkBlue = 0xFF00008B,
+        DarkCyan = 0xFF008B8B,
+        DarkGoldenrod = 0xFFB8860B,
+        DarkGray = 0xFFA9A9A9,
+        DarkGreen = 0xFF006400,
+        DarkKhaki = 0xFFBDB76B,
+        DarkMagenta = 0xFF8B008B,
+        DarkOliveGreen = 0xFF556B2F,
+        DarkOrange = 0xFFFF8C00,
+        DarkOrchid = 0xFF9932CC,
+        DarkRed = 0xFF8B0000,
+        DarkSalmon = 0xFFE9967A,
+        DarkSeaGreen = 0xFF8FBC8F,
+        DarkSlateBlue = 0xFF483D8B,
+        DarkSlateGray = 0xFF2F4F4F,
+        DarkTurquoise = 0xFF00CED1,
+        DarkViolet = 0xFF9400D3,
+        DeepPink = 0xFFFF1493,
+        DeepSkyBlue = 0xFF00BFFF,
+        DimGray = 0xFF696969,
+        DodgerBlue = 0xFF1E90FF,
+        Firebrick = 0xFFB22222,
+        FloralWhite = 0xFFFFFAF0,
+        ForestGreen = 0xFF228B22,
+        Fuchsia = 0xFFFF00FF,
+        Gainsboro = 0xFFDCDCDC,
+        GhostWhite = 0xFFF8F8FF,
+        Gold = 0xFFFFD700,
+        Goldenrod = 0xFFDAA520,
+        Gray = 0xFF808080,
+        Green = 0xFF008000,
+        GreenYellow = 0xFFADFF2F,
+        Honeydew = 0xFFF0FFF0,
+        HotPink = 0xFFFF69B4,
+        IndianRed = 0xFFCD5C5C,
+        Indigo = 0xFF4B0082,
+        Ivory = 0xFFFFFFF0,
+        Khaki = 0xFFF0E68C,
+        Lavender = 0xFFE6E6FA,
+        LavenderBlush = 0xFFFFF0F5,
+        LawnGreen = 0xFF7CFC00,
+        LemonChiffon = 0xFFFFFACD,
+        LightBlue = 0xFFADD8E6,
+        LightCoral = 0xFFF08080,
+        LightCyan = 0xFFE0FFFF,
+        LightGoldenrodYellow = 0xFFFAFAD2,
+        LightGray = 0xFFD3D3D3,
+        LightGreen = 0xFF90EE90,
+        LightPink = 0xFFFFB6C1,
+        LightSalmon = 0xFFFFA07A,
+        LightSeaGreen = 0xFF20B2AA,
+        LightSkyBlue = 0xFF87CEFA,
+        LightSlateGray = 0xFF778899,
+        LightSteelBlue = 0xFFB0C4DE,
+        LightYellow = 0xFFFFFFE0,
+        Lime = 0xFF00FF00,
+        LimeGreen = 0xFF32CD32,
+        Linen = 0xFFFAF0E6,
+        Magenta = 0xFFFF00FF,
+        Maroon = 0xFF800000,
+        MediumAquamarine = 0xFF66CDAA,
+        MediumBlue = 0xFF0000CD,
+        MediumOrchid = 0xFFBA55D3,
+        MediumPurple = 0xFF9370DB,
+        MediumSeaGreen = 0xFF3CB371,
+        MediumSlateBlue = 0xFF7B68EE,
+        MediumSpringGreen = 0xFF00FA9A,
+        MediumTurquoise = 0xFF48D1CC,
+        MediumVioletRed = 0xFFC71585,
+        MidnightBlue = 0xFF191970,
+        MintCream = 0xFFF5FFFA,
+        MistyRose = 0xFFFFE4E1,
+        Moccasin = 0xFFFFE4B5,
+        NavajoWhite = 0xFFFFDEAD,
+        Navy = 0xFF000080,
+        OldLace = 0xFFFDF5E6,
+        Olive = 0xFF808000,
+        OliveDrab = 0xFF6B8E23,
+        Orange = 0xFFFFA500,
+        OrangeRed = 0xFFFF4500,
+        Orchid = 0xFFDA70D6,
+        PaleGoldenrod = 0xFFEEE8AA,
+        PaleGreen = 0xFF98FB98,
+        PaleTurquoise = 0xFFAFEEEE,
+        PaleVioletRed = 0xFFDB7093,
+        PapayaWhip = 0xFFFFEFD5,
+        PeachPuff = 0xFFFFDAB9,
+        Peru = 0xFFCD853F,
+        Pink = 0xFFFFC0CB,
+        Plum = 0xFFDDA0DD,
+        PowderBlue = 0xFFB0E0E6,
+        Purple = 0xFF800080,
+        Red = 0xFFFF0000,
+        RosyBrown = 0xFFBC8F8F,
+        RoyalBlue = 0xFF4169E1,
+        SaddleBrown = 0xFF8B4513,
+        Salmon = 0xFFFA8072,
+        SandyBrown = 0xFFF4A460,
+        SeaGreen = 0xFF2E8B57,
+        SeaShell = 0xFFFFF5EE,
+        Sienna = 0xFFA0522D,
+        Silver = 0xFFC0C0C0,
+        SkyBlue = 0xFF87CEEB,
+        SlateBlue = 0xFF6A5ACD,
+        SlateGray = 0xFF708090,
+        Snow = 0xFFFFFAFA,
+        SpringGreen = 0xFF00FF7F,
+        SteelBlue = 0xFF4682B4,
+        Tan = 0xFFD2B48C,
+        Teal = 0xFF008080,
+        Thistle = 0xFFD8BFD8,
+        Tomato = 0xFFFF6347,
+        Transparent = 0x00FFFFFF,
+        Turquoise = 0xFF40E0D0,
+        Violet = 0xFFEE82EE,
+        Wheat = 0xFFF5DEB3,
+        White = 0xFFFFFFFF,
+        WhiteSmoke = 0xFFF5F5F5,
+        Yellow = 0xFFFFFF00,
+        YellowGreen = 0xFF9ACD32
+    };
+
   protected:
     ARGB Argb;
 };
@@ -133,8 +302,6 @@ typedef struct Color
     ARGB Argb;
 } Color;
-typedef enum ColorChannelFlags ColorChannelFlags;
-
 #endif /* end of c typedefs */
 #endif /* _GDIPLUSCOLOR_H */