summaryrefslogtreecommitdiff
path: root/LibGUI
diff options
context:
space:
mode:
authorAndreas Kling <awesomekling@gmail.com>2019-03-29 02:20:22 +0100
committerAndreas Kling <awesomekling@gmail.com>2019-03-29 02:20:22 +0100
commitd48f48663426d77da875dc0ae35bff649bc430bb (patch)
tree271de6f917cab706105c9b81b023dd507e52e363 /LibGUI
parent9d7a5136810f359dd5e889e5854e71c7497211da (diff)
downloadserenity-d48f48663426d77da875dc0ae35bff649bc430bb.zip
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. :^)
Diffstat (limited to 'LibGUI')
-rw-r--r--LibGUI/GFrame.cpp7
-rw-r--r--LibGUI/GStatusBar.cpp4
-rw-r--r--LibGUI/GToolBar.cpp2
-rw-r--r--LibGUI/GWidget.cpp15
-rw-r--r--LibGUI/GWidget.h2
5 files changed, 25 insertions, 5 deletions
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<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());
}
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; }