diff --git a/Userland/Libraries/LibWeb/Painting/BorderPainting.cpp b/Userland/Libraries/LibWeb/Painting/BorderPainting.cpp index 2f89ae2453..3eb8de9d68 100644 --- a/Userland/Libraries/LibWeb/Painting/BorderPainting.cpp +++ b/Userland/Libraries/LibWeb/Painting/BorderPainting.cpp @@ -57,6 +57,24 @@ BorderRadiiData normalized_border_radii_data(Layout::Node const& node, CSSPixelR return BorderRadiiData { top_left_radius_px, top_right_radius_px, bottom_right_radius_px, bottom_left_radius_px }; } +static constexpr double dark_light_absolute_value_difference = 1. / 3; + +static Color light_color_for_inset_and_outset(Color const& color) +{ + auto hsv = color.to_hsv(); + if (hsv.value >= dark_light_absolute_value_difference) + return Color::from_hsv(hsv); + return Color::from_hsv({ hsv.hue, hsv.saturation, hsv.value + dark_light_absolute_value_difference }); +} + +static Color dark_color_for_inset_and_outset(Color const& color) +{ + auto hsv = color.to_hsv(); + if (hsv.value < dark_light_absolute_value_difference) + return Color::from_hsv(hsv); + return Color::from_hsv({ hsv.hue, hsv.saturation, hsv.value - dark_light_absolute_value_difference }); +} + Gfx::Color border_color(BorderEdge edge, BordersData const& borders_data) { auto const& border_data = [&] { @@ -75,12 +93,12 @@ Gfx::Color border_color(BorderEdge edge, BordersData const& borders_data) }(); if (border_data.line_style == CSS::LineStyle::Inset) { - auto top_left_color = Color::from_rgb(0x5a5a5a); - auto bottom_right_color = Color::from_rgb(0x888888); + auto top_left_color = dark_color_for_inset_and_outset(border_data.color); + auto bottom_right_color = light_color_for_inset_and_outset(border_data.color); return (edge == BorderEdge::Left || edge == BorderEdge::Top) ? top_left_color : bottom_right_color; } else if (border_data.line_style == CSS::LineStyle::Outset) { - auto top_left_color = Color::from_rgb(0x888888); - auto bottom_right_color = Color::from_rgb(0x5a5a5a); + auto top_left_color = light_color_for_inset_and_outset(border_data.color); + auto bottom_right_color = dark_color_for_inset_and_outset(border_data.color); return (edge == BorderEdge::Left || edge == BorderEdge::Top) ? top_left_color : bottom_right_color; }