mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 07:08:10 +00:00
LibGUI: Don't draw left and right side of surfaces that span entire window.
In other words, if a surface stretches from the left side of the window all the way to the right side, skip shading and highlighting the sides. This makes widgets blend together just slightly with the window. :^)
This commit is contained in:
parent
9d7a513681
commit
d48f486634
7 changed files with 31 additions and 9 deletions
|
@ -38,9 +38,12 @@ void GFrame::paint_event(GPaintEvent& event)
|
|||
if (m_thickness >= 1) {
|
||||
painter.draw_line(rect().top_left(), rect().top_right(), top_left_color);
|
||||
painter.draw_line(rect().bottom_left(), rect().bottom_right(), bottom_right_color);
|
||||
|
||||
if (m_shape != Shape::Panel || !spans_entire_window_horizontally()) {
|
||||
painter.draw_line(rect().top_left().translated(0, 1), rect().bottom_left().translated(0, -1), top_left_color);
|
||||
painter.draw_line(rect().top_right(), rect().bottom_right().translated(0, -1), bottom_right_color);
|
||||
}
|
||||
}
|
||||
|
||||
if (m_shape == Shape::Container && m_thickness >= 2) {
|
||||
Color top_left_color;
|
||||
|
|
|
@ -10,7 +10,7 @@ GStatusBar::GStatusBar(GWidget* parent)
|
|||
set_size_policy(SizePolicy::Fill, SizePolicy::Fixed);
|
||||
set_preferred_size({ 0, 20 });
|
||||
set_layout(make<GBoxLayout>(Orientation::Horizontal));
|
||||
layout()->set_margins({ 4, 2, 4, 2 });
|
||||
layout()->set_margins({ 2, 2, 2, 2 });
|
||||
m_label = new GLabel(this);
|
||||
m_label->set_frame_shadow(GFrame::Shadow::Sunken);
|
||||
m_label->set_frame_shape(GFrame::Shape::Panel);
|
||||
|
@ -36,5 +36,5 @@ void GStatusBar::paint_event(GPaintEvent& event)
|
|||
{
|
||||
GPainter painter(*this);
|
||||
painter.set_clip_rect(event.rect());
|
||||
StylePainter::the().paint_surface(painter, rect());
|
||||
StylePainter::the().paint_surface(painter, rect(), !spans_entire_window_horizontally());
|
||||
}
|
||||
|
|
|
@ -79,5 +79,5 @@ void GToolBar::paint_event(GPaintEvent& event)
|
|||
{
|
||||
GPainter painter(*this);
|
||||
painter.set_clip_rect(event.rect());
|
||||
StylePainter::the().paint_surface(painter, rect());
|
||||
StylePainter::the().paint_surface(painter, rect(), !spans_entire_window_horizontally());
|
||||
}
|
||||
|
|
|
@ -353,3 +353,18 @@ void GWidget::set_visible(bool visible)
|
|||
if (m_visible)
|
||||
update();
|
||||
}
|
||||
|
||||
bool GWidget::spans_entire_window_horizontally() const
|
||||
{
|
||||
auto* w = window();
|
||||
if (!w)
|
||||
return false;
|
||||
auto* main_widget = w->main_widget();
|
||||
if (!main_widget)
|
||||
return false;
|
||||
if (main_widget == this)
|
||||
return true;
|
||||
auto wrr = window_relative_rect();
|
||||
dbgprintf("Checking %s{%p} wrr=%s, mwr=%s\n", class_name(), this, wrr.to_string().characters(), main_widget->rect().to_string().characters());
|
||||
return wrr.left() == main_widget->rect().left() && wrr.right() == main_widget->rect().right();
|
||||
}
|
||||
|
|
|
@ -139,6 +139,8 @@ public:
|
|||
bool is_visible() const { return m_visible; }
|
||||
void set_visible(bool);
|
||||
|
||||
bool spans_entire_window_horizontally() const;
|
||||
|
||||
private:
|
||||
virtual bool is_widget() const final { return true; }
|
||||
|
||||
|
|
|
@ -98,11 +98,13 @@ void StylePainter::paint_button(Painter& painter, const Rect& rect, ButtonStyle
|
|||
}
|
||||
}
|
||||
|
||||
void StylePainter::paint_surface(Painter& painter, const Rect& rect)
|
||||
void StylePainter::paint_surface(Painter& painter, const Rect& rect, bool paint_vertical_lines)
|
||||
{
|
||||
painter.fill_rect({ rect.x(), rect.y() + 1, rect.width(), rect.height() - 2 }, Color::LightGray);
|
||||
painter.draw_line(rect.top_left(), rect.top_right(), Color::White);
|
||||
painter.draw_line(rect.bottom_left(), rect.bottom_right(), Color::MidGray);
|
||||
if (paint_vertical_lines) {
|
||||
painter.draw_line(rect.top_left().translated(0, 1), rect.bottom_left().translated(0, -1), Color::White);
|
||||
painter.draw_line(rect.top_right(), rect.bottom_right().translated(0, -1), Color::MidGray);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@ public:
|
|||
static StylePainter& the();
|
||||
|
||||
void paint_button(Painter&, const Rect&, ButtonStyle, bool pressed, bool hovered = false);
|
||||
void paint_surface(Painter&, const Rect&);
|
||||
void paint_surface(Painter&, const Rect&, bool paint_vertical_lines = true);
|
||||
|
||||
private:
|
||||
StylePainter();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue