1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 10:37:45 +00:00

LibGUI+LibGfx: Improve focus rect appearance

Draw a dotted focus rect to make it stand out more. Also make it much
larger on regular text-only GUI::Buttons.
This commit is contained in:
Andreas Kling 2020-10-26 20:43:59 +01:00
parent f6084d42d9
commit b7dfa83223
6 changed files with 47 additions and 2 deletions

View file

@ -279,6 +279,37 @@ void Painter::draw_ellipse_intersecting(const IntRect& rect, Color color, int th
}
}
template<typename RectType, typename Callback>
static void for_each_pixel_around_rect_clockwise(const RectType& rect, Callback callback)
{
if (rect.is_empty())
return;
for (auto x = rect.left(); x <= rect.right(); ++x) {
callback(x, rect.top());
}
for (auto y = rect.top() + 1; y <= rect.bottom(); ++y) {
callback(rect.right(), y);
}
for (auto x = rect.right() - 1; x >= rect.left(); --x) {
callback(x, rect.bottom());
}
for (auto y = rect.bottom() - 1; y > rect.top(); --y) {
callback(rect.left(), y);
}
}
void Painter::draw_focus_rect(const IntRect& rect, Color color)
{
if (rect.is_empty())
return;
bool state = false;
for_each_pixel_around_rect_clockwise(rect, [&](auto x, auto y) {
if (state)
set_pixel(x, y, color);
state = !state;
});
}
void Painter::draw_rect(const IntRect& a_rect, Color color, bool rough)
{
IntRect rect = a_rect.translated(translation());

View file

@ -58,6 +58,7 @@ public:
void fill_rect_with_gradient(const IntRect&, Color gradient_start, Color gradient_end);
void fill_ellipse(const IntRect&, Color);
void draw_rect(const IntRect&, Color, bool rough = false);
void draw_focus_rect(const IntRect&, Color);
void draw_bitmap(const IntPoint&, const CharacterBitmap&, Color = Color());
void draw_bitmap(const IntPoint&, const GlyphBitmap&, Color = Color());
void draw_scaled_bitmap(const IntRect& dst_rect, const Gfx::Bitmap&, const IntRect& src_rect, float opacity = 1.0f);