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
16namespace doc {
17 class Image;
18 class Layer;
19}
20
21namespace 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