[core] Move Color::gradient to cpp to avoid duplicate code (#12348)
This commit is contained in:
@@ -6,4 +6,18 @@ namespace esphome {
|
||||
constinit const Color Color::BLACK(0, 0, 0, 0);
|
||||
constinit const Color Color::WHITE(255, 255, 255, 255);
|
||||
|
||||
Color Color::gradient(const Color &to_color, uint8_t amnt) {
|
||||
Color new_color;
|
||||
float amnt_f = float(amnt) / 255.0f;
|
||||
new_color.r = amnt_f * (to_color.r - this->r) + this->r;
|
||||
new_color.g = amnt_f * (to_color.g - this->g) + this->g;
|
||||
new_color.b = amnt_f * (to_color.b - this->b) + this->b;
|
||||
new_color.w = amnt_f * (to_color.w - this->w) + this->w;
|
||||
return new_color;
|
||||
}
|
||||
|
||||
Color Color::fade_to_white(uint8_t amnt) { return this->gradient(Color::WHITE, amnt); }
|
||||
|
||||
Color Color::fade_to_black(uint8_t amnt) { return this->gradient(Color::BLACK, amnt); }
|
||||
|
||||
} // namespace esphome
|
||||
|
||||
@@ -174,17 +174,9 @@ struct Color {
|
||||
uint8_t((uint16_t(b) * 255U / max_rgb)), w);
|
||||
}
|
||||
|
||||
Color gradient(const Color &to_color, uint8_t amnt) {
|
||||
Color new_color;
|
||||
float amnt_f = float(amnt) / 255.0f;
|
||||
new_color.r = amnt_f * (to_color.r - (*this).r) + (*this).r;
|
||||
new_color.g = amnt_f * (to_color.g - (*this).g) + (*this).g;
|
||||
new_color.b = amnt_f * (to_color.b - (*this).b) + (*this).b;
|
||||
new_color.w = amnt_f * (to_color.w - (*this).w) + (*this).w;
|
||||
return new_color;
|
||||
}
|
||||
Color fade_to_white(uint8_t amnt) { return (*this).gradient(Color::WHITE, amnt); }
|
||||
Color fade_to_black(uint8_t amnt) { return (*this).gradient(Color::BLACK, amnt); }
|
||||
Color gradient(const Color &to_color, uint8_t amnt);
|
||||
Color fade_to_white(uint8_t amnt);
|
||||
Color fade_to_black(uint8_t amnt);
|
||||
|
||||
Color lighten(uint8_t delta) { return *this + delta; }
|
||||
Color darken(uint8_t delta) { return *this - delta; }
|
||||
|
||||
Reference in New Issue
Block a user