1 | // Aseprite |
2 | // Copyright (C) 2001-2018 David Capello |
3 | // |
4 | // This program is distributed under the terms of |
5 | // the End-User License Agreement for Aseprite. |
6 | |
7 | #ifndef APP_COLOR_H_INCLUDED |
8 | #define APP_COLOR_H_INCLUDED |
9 | #pragma once |
10 | |
11 | #include "doc/color.h" |
12 | #include "doc/pixel_format.h" |
13 | |
14 | #include <string> |
15 | |
16 | namespace doc { |
17 | class Image; |
18 | class Layer; |
19 | } |
20 | |
21 | namespace app { |
22 | |
23 | using namespace doc; |
24 | |
25 | class Color { |
26 | public: |
27 | enum Type { |
28 | MaskType, |
29 | RgbType, |
30 | HsvType, |
31 | HslType, |
32 | GrayType, |
33 | IndexType, |
34 | }; |
35 | |
36 | enum HumanReadableString { |
37 | ShortHumanReadableString, |
38 | LongHumanReadableString |
39 | }; |
40 | |
41 | // Default ctor is mask color |
42 | Color() : m_type(MaskType) { } |
43 | |
44 | static Color fromMask(); |
45 | static Color fromRgb(int r, int g, int b, int a = 255); |
46 | static Color fromHsv(double h, double s, double v, int a = 255); // h=[0,360], s=[0,1], v=[0,1] |
47 | static Color fromHsl(double h, double s, double l, int a = 255); // h=[0,360], s=[0,1], v=[0,1] |
48 | static Color fromGray(int g, int a = 255); |
49 | static Color fromIndex(int index); |
50 | |
51 | static Color fromImage(PixelFormat pixelFormat, color_t c); |
52 | static Color fromImageGetPixel(Image* image, int x, int y); |
53 | static Color fromString(const std::string& str); |
54 | |
55 | Color toRgb() const; |
56 | std::string toString() const; |
57 | std::string toHumanReadableString(PixelFormat format, HumanReadableString type) const; |
58 | |
59 | bool operator==(const Color& other) const; |
60 | bool operator!=(const Color& other) const { |
61 | return !operator==(other); |
62 | } |
63 | |
64 | Type getType() const { |
65 | return m_type; |
66 | } |
67 | |
68 | bool isValid() const; |
69 | |
70 | // Getters |
71 | int getRed() const; |
72 | int getGreen() const; |
73 | int getBlue() const; |
74 | double getHsvHue() const; |
75 | double getHsvSaturation() const; |
76 | double getHsvValue() const; |
77 | double getHslHue() const; |
78 | double getHslSaturation() const; |
79 | double getHslLightness() const; |
80 | int getGray() const; |
81 | int getIndex() const; |
82 | int getAlpha() const; |
83 | |
84 | // Setters |
85 | void setAlpha(int alpha); |
86 | |
87 | private: |
88 | Color(Type type) : m_type(type) { } |
89 | |
90 | // Color type |
91 | Type m_type; |
92 | |
93 | // Color value |
94 | union { |
95 | struct { |
96 | int r, g, b, a; |
97 | } rgb; |
98 | struct { |
99 | double h, s, v; |
100 | int a; |
101 | } hsv; |
102 | struct { |
103 | double h, s, l; |
104 | int a; |
105 | } hsl; |
106 | struct { |
107 | int g, a; |
108 | } gray; |
109 | int index; |
110 | } m_value; |
111 | }; |
112 | |
113 | } // namespace app |
114 | |
115 | #endif |
116 | |