diff --git a/LibGUI/GFrame.cpp b/LibGUI/GFrame.cpp index 528666012c..ac82e11936 100644 --- a/LibGUI/GFrame.cpp +++ b/LibGUI/GFrame.cpp @@ -38,8 +38,11 @@ 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); - 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::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) { diff --git a/LibGUI/GStatusBar.cpp b/LibGUI/GStatusBar.cpp index e0e92be646..6a72ec32f8 100644 --- a/LibGUI/GStatusBar.cpp +++ b/LibGUI/GStatusBar.cpp @@ -10,7 +10,7 @@ GStatusBar::GStatusBar(GWidget* parent) set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); set_preferred_size({ 0, 20 }); set_layout(make(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()); } diff --git a/LibGUI/GToolBar.cpp b/LibGUI/GToolBar.cpp index 3acc17108d..53e50ec093 100644 --- a/LibGUI/GToolBar.cpp +++ b/LibGUI/GToolBar.cpp @@ -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()); } diff --git a/LibGUI/GWidget.cpp b/LibGUI/GWidget.cpp index e22dd03b59..8a13b8ecae 100644 --- a/LibGUI/GWidget.cpp +++ b/LibGUI/GWidget.cpp @@ -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(); +} diff --git a/LibGUI/GWidget.h b/LibGUI/GWidget.h index 6dfb00fde6..b05bcfa024 100644 --- a/LibGUI/GWidget.h +++ b/LibGUI/GWidget.h @@ -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; } diff --git a/SharedGraphics/StylePainter.cpp b/SharedGraphics/StylePainter.cpp index 2c12bf8caa..5d1cf6e1cc 100644 --- a/SharedGraphics/StylePainter.cpp +++ b/SharedGraphics/StylePainter.cpp @@ -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); - 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); + 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); + } } diff --git a/SharedGraphics/StylePainter.h b/SharedGraphics/StylePainter.h index 7e6ad5f955..d11affb344 100644 --- a/SharedGraphics/StylePainter.h +++ b/SharedGraphics/StylePainter.h @@ -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();