2016-10-30 20:21:24 -04:00
|
|
|
#pragma once
|
|
|
|
|
2017-01-24 06:37:19 -05:00
|
|
|
#include <cstdlib>
|
|
|
|
|
2016-10-30 20:21:24 -04:00
|
|
|
#include "common.hpp"
|
|
|
|
|
2016-11-19 00:22:44 -05:00
|
|
|
POLYBAR_NS
|
2016-10-30 20:21:24 -04:00
|
|
|
|
2020-11-27 14:35:31 -05:00
|
|
|
/**
|
|
|
|
* Represents immutable 32-bit color values.
|
|
|
|
*/
|
|
|
|
class rgba {
|
|
|
|
public:
|
|
|
|
enum color_type { NONE, ARGB, ALPHA_ONLY };
|
2017-01-18 23:38:42 -05:00
|
|
|
|
2019-10-27 17:06:25 -04:00
|
|
|
explicit rgba();
|
|
|
|
explicit rgba(uint32_t value, color_type type = ARGB);
|
|
|
|
explicit rgba(string hex);
|
|
|
|
|
|
|
|
operator string() const;
|
|
|
|
operator uint32_t() const;
|
|
|
|
bool operator==(const rgba& other) const;
|
|
|
|
|
2020-11-27 14:35:31 -05:00
|
|
|
uint32_t value() const;
|
|
|
|
color_type type() const;
|
|
|
|
|
2020-11-27 15:05:50 -05:00
|
|
|
double alpha_d() const;
|
|
|
|
double red_d() const;
|
|
|
|
double green_d() const;
|
|
|
|
double blue_d() const;
|
2019-10-27 17:06:25 -04:00
|
|
|
|
2020-11-27 15:05:50 -05:00
|
|
|
uint8_t alpha_i() const;
|
|
|
|
uint8_t red_i() const;
|
|
|
|
uint8_t green_i() const;
|
|
|
|
uint8_t blue_i() const;
|
2019-10-27 17:06:25 -04:00
|
|
|
|
|
|
|
bool has_color() const;
|
2020-12-01 08:49:41 -05:00
|
|
|
rgba apply_alpha_to(rgba other) const;
|
|
|
|
rgba try_apply_alpha_to(rgba other) const;
|
2020-11-27 14:35:31 -05:00
|
|
|
|
|
|
|
private:
|
|
|
|
/**
|
|
|
|
* Color value in the form ARGB or A000 depending on the type
|
|
|
|
*
|
|
|
|
* Cannot be const because we have to assign to it in the constructor and initializer lists are not possible.
|
|
|
|
*/
|
|
|
|
uint32_t m_value;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* NONE marks this instance as invalid. If such a color is encountered, it
|
|
|
|
* should be treated as if no color was set.
|
|
|
|
*
|
|
|
|
* ALPHA_ONLY is used for color strings that only have an alpha channel (#AA)
|
|
|
|
* these kinds should be combined with another color that has RGB channels
|
|
|
|
* before they are used to render anything.
|
|
|
|
*
|
|
|
|
* Cannot be const because we have to assign to it in the constructor and initializer lists are not possible.
|
|
|
|
*/
|
|
|
|
color_type m_type{NONE};
|
2017-01-18 23:38:42 -05:00
|
|
|
};
|
|
|
|
|
2019-10-27 17:06:25 -04:00
|
|
|
namespace color_util {
|
|
|
|
string simplify_hex(string hex);
|
|
|
|
} // namespace color_util
|
|
|
|
|
2016-11-19 00:22:44 -05:00
|
|
|
POLYBAR_NS_END
|