Skip to content

Commit

Permalink
Merge branch 'master' into artist_2024_dev
Browse files Browse the repository at this point in the history
  • Loading branch information
djowel committed Jun 29, 2024
2 parents f8aa6b2 + 16e2765 commit c46fe70
Show file tree
Hide file tree
Showing 4 changed files with 101 additions and 1 deletion.
25 changes: 25 additions & 0 deletions lib/include/artist/color.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@ namespace cycfi::artist
constexpr bool operator==(color const& a, color const& b);
constexpr bool operator!=(color const& a, color const& b);

constexpr color operator+(color const& a, color const& b);
constexpr color operator-(color const& a, color const& b);
constexpr color operator*(color const& a, float b);
constexpr color operator*(float a, color const& b);

////////////////////////////////////////////////////////////////////////////
// Inlines
////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -176,6 +181,26 @@ namespace cycfi::artist
return r;
}

constexpr color operator+(color const& a, color const& b)
{
return color(a.red + b.red, a.green + b.green, a.blue + b.blue, a.alpha + b.alpha*(1.0-a.alpha));
}

constexpr color operator-(color const& a, color const& b)
{
return color(a.red - b.red, a.green - b.green, a.blue - b.blue, a.alpha + b.alpha*(1.0-a.alpha));
}

constexpr color operator*(color const& a, float b)
{
return color(a.red * b, a.green * b, a.blue * b, a.alpha);
}

constexpr color operator*(float a, color const& b)
{
return color(a * b.red, a * b.green, a * b.blue, b.alpha);
}

////////////////////////////////////////////////////////////////////////////
// Common colors
////////////////////////////////////////////////////////////////////////////
Expand Down
23 changes: 23 additions & 0 deletions lib/include/artist/point.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,16 @@

namespace cycfi::artist
{
////////////////////////////////////////////////////////////////////////////
// Axis
////////////////////////////////////////////////////////////////////////////
enum class axis : bool { x = false, y = true};

inline constexpr axis other(axis a)
{
return axis(! bool(a));
}

////////////////////////////////////////////////////////////////////////////
// Points
////////////////////////////////////////////////////////////////////////////
Expand All @@ -25,6 +35,9 @@ namespace cycfi::artist
constexpr point move_to(float x, float y) const;
constexpr point reflect(point p) const;

constexpr float& operator[](axis a);
constexpr float operator[](axis a) const;

float x;
float y;
};
Expand Down Expand Up @@ -86,6 +99,16 @@ namespace cycfi::artist
{
return {x + (x - p.x), y + (y - p.y)};
}

constexpr float& point::operator[](axis a)
{
return a==axis::x ? x : y;
}

constexpr float point::operator[](axis a) const
{
return a==axis::x ? x : y;
}
}

#endif
35 changes: 35 additions & 0 deletions lib/include/artist/rect.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,41 @@ namespace cycfi::artist
r.right = 0.0;
r.bottom = 0.0;
}

inline constexpr float axis_extent(rect const &r, axis a)
{
return a == axis::x ? r.width() : r.height();
}

inline constexpr float axis_min(rect const &r, axis a)
{
return a == axis::x ? r.left : r.top;
}

inline constexpr float axis_max(rect const &r, axis a)
{
return a == axis::x ? r.right : r.bottom;
}

inline constexpr float& axis_min(rect &r, axis a)
{
return a == axis::x ? r.left : r.top;
}

inline constexpr float& axis_max(rect &r, axis a)
{
return a == axis::x ? r.right : r.bottom;
}

inline constexpr auto make_rect(axis a, float this_axis_min, float other_axis_min, float this_axis_max, float other_axis_max) -> rect
{
if (a == axis::x) {
return rect(this_axis_min, other_axis_min, this_axis_max, other_axis_max);
}
else {
return rect(other_axis_min, this_axis_min, other_axis_max, this_axis_max);
}
}
}

#endif
19 changes: 18 additions & 1 deletion test/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1069,4 +1069,21 @@ TEST_CASE("Misc")
}



TEST_CASE("Color Maths")
{
color a(0.2, 0.25, 0.5, 1.0);
color b(0.5, 0.6, 0.1, 1.0);

auto check = [&](color result, color check)
{
REQUIRE_THAT(result.red, Catch::WithinRel(check.red, 0.001f));
REQUIRE_THAT(result.green, Catch::WithinRel(check.green, 0.001f));
REQUIRE_THAT(result.blue, Catch::WithinRel(check.blue, 0.001f));
REQUIRE_THAT(result.alpha, Catch::WithinRel(check.alpha, 0.001f));
};

check(a + b, color(0.7, 0.85, 0.6, 1.0));
check(a - b, color(-0.3, -0.35, 0.4, 1.0));
check(a * 2, color(0.4, 0.5, 1.0, 1.0));
check(2 * a, color(0.4, 0.5, 1.0, 1.0));
}

0 comments on commit c46fe70

Please sign in to comment.