From e5c869f27b8fc0ea894a4f770e5c9ad40e210322 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Fri, 23 Oct 2020 17:06:29 +0300 Subject: [PATCH] Add color lighting & darkening functions --- libs/gfx/include/psemek/gfx/color.hpp | 40 +++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/libs/gfx/include/psemek/gfx/color.hpp b/libs/gfx/include/psemek/gfx/color.hpp index c0ccd097..98998c87 100644 --- a/libs/gfx/include/psemek/gfx/color.hpp +++ b/libs/gfx/include/psemek/gfx/color.hpp @@ -100,4 +100,44 @@ namespace psemek::gfx static const generic_color magenta{{1.f, 0.f, 1.f, 1.f}}; static const generic_color yellow {{1.f, 1.f, 0.f, 1.f}}; + static const generic_color gray {{0.50f, 0.50f, 0.50f, 1.f}}; + + template + geom::vector light(geom::vector c, float lightness = 0.5f) + { + for (std::size_t i = 0; i < N; ++i) + c[i] = geom::lerp(c[i], 1.f, lightness); + return c; + } + + template + geom::vector dark(geom::vector c, float darkness = 0.5f) + { + for (std::size_t i = 0; i < N; ++i) + c[i] = geom::lerp(c[i], 0.f, darkness); + return c; + } + + template + geom::vector light(geom::vector c, float lightness = 0.5f) + { + return to_coloru8(light(to_colorf(c), lightness)); + } + + template + geom::vector dark(geom::vector c, float darkness = 0.5f) + { + return to_coloru8(dark(to_colorf(c), darkness)); + } + + inline generic_color light(generic_color const & c, float lightness = 0.5f) + { + return generic_color{light(c.c, lightness)}; + } + + inline generic_color dark(generic_color const & c, float darkness = 0.5f) + { + return generic_color{dark(c.c, darkness)}; + } + }