summaryrefslogtreecommitdiff
path: root/src/helpers/Color.cpp
blob: fe217c0f12e767e7a5cbf7b144d9e8b0246108fc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "Color.hpp"

#define ALPHA(c) ((double)(((c) >> 24) & 0xff) / 255.0)
#define RED(c)   ((double)(((c) >> 16) & 0xff) / 255.0)
#define GREEN(c) ((double)(((c) >> 8) & 0xff) / 255.0)
#define BLUE(c)  ((double)(((c)) & 0xff) / 255.0)

CHyprColor::CHyprColor() {}

CHyprColor::CHyprColor(float r_, float g_, float b_, float a_) {
    r = r_;
    g = g_;
    b = b_;
    a = a_;

    okLab = Hyprgraphics::CColor(Hyprgraphics::CColor::SSRGB{r, g, b}).asOkLab();
}

CHyprColor::CHyprColor(uint64_t hex) {
    r = RED(hex);
    g = GREEN(hex);
    b = BLUE(hex);
    a = ALPHA(hex);

    okLab = Hyprgraphics::CColor(Hyprgraphics::CColor::SSRGB{r, g, b}).asOkLab();
}

CHyprColor::CHyprColor(const Hyprgraphics::CColor& color, float a_) {
    const auto SRGB = color.asRgb();
    r               = SRGB.r;
    g               = SRGB.g;
    b               = SRGB.b;
    a               = a_;

    okLab = color.asOkLab();
}

uint32_t CHyprColor::getAsHex() const {
    return (uint32_t)(a * 255.f) * 0x1000000 + (uint32_t)(r * 255.f) * 0x10000 + (uint32_t)(g * 255.f) * 0x100 + (uint32_t)(b * 255.f) * 0x1;
}

Hyprgraphics::CColor::SSRGB CHyprColor::asRGB() const {
    return {r, g, b};
}

Hyprgraphics::CColor::SOkLab CHyprColor::asOkLab() const {
    return okLab;
}

Hyprgraphics::CColor::SHSL CHyprColor::asHSL() const {
    return Hyprgraphics::CColor(okLab).asHSL();
}

CHyprColor CHyprColor::stripA() const {
    return {r, g, b, 1.F};
}