OSDN Git Service

023e4732b33c37c28a42cad9deccd1437929b4ae
[winmerge-jp/winmerge-jp.git] / Externals / crystaledit / editlib / cecolor.h
1 // Copyright (c) 2023 Takashi Sawanaka
2 // SPDX-License-Identifier: BSL-1.0
3 #pragma once
4
5 #include <cstdint>
6
7 class CEColor
8 {
9 public:
10         CEColor() : m_value(0) {}
11         CEColor(uint32_t value) : m_value(value) {}
12         CEColor(uint8_t r, uint8_t g, uint8_t b) : m_value((b << 16) | (g << 8) | r) {}
13         inline uint8_t GetBVal() const { return (m_value >> 16 & 0xff); }
14         inline uint8_t GetGVal() const { return (m_value >> 8) & 0xff; }
15         inline uint8_t GetRVal() const { return (m_value) & 0xff; }
16         inline operator uint32_t() const { return m_value; }
17         static CEColor GetDarkenColor(CEColor a, float l)
18         {
19                 const uint8_t R = static_cast<uint8_t>(a.GetRVal() * l);
20                 const uint8_t G = static_cast<uint8_t>(a.GetGVal() * l);
21                 const uint8_t B = static_cast<uint8_t>(a.GetBVal() * l);
22                 return { R, G, B };
23         }
24         static CEColor GetIntermediateColor(CEColor a, CEColor b, float ratio)
25         {
26                 const uint8_t R = static_cast<uint8_t>((a.GetRVal() - b.GetRVal()) * ratio) + b.GetRVal();
27                 const uint8_t G = static_cast<uint8_t>((a.GetGVal() - b.GetGVal()) * ratio) + b.GetGVal();
28                 const uint8_t B = static_cast<uint8_t>((a.GetBVal() - b.GetBVal()) * ratio) + b.GetBVal();
29                 return { R, G, B };
30         }
31 private:
32         uint32_t m_value;
33 };
34