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

LibGUI: Move frame painting from GFrame to StylePainter.

This way it can be used by others who might not have a GFrame object.
This commit is contained in:
Andreas Kling 2019-04-10 03:43:46 +02:00
parent e61dd994df
commit 4ab0cd5d4c
16 changed files with 93 additions and 88 deletions

View file

@ -80,8 +80,8 @@ public:
m_label->set_background_color(Color::from_rgb(0xdac7b5));
m_label->set_fill_with_background_color(true);
m_label->set_frame_thickness(1);
m_label->set_frame_shape(GFrame::Shape::Container);
m_label->set_frame_shadow(GFrame::Shadow::Plain);
m_label->set_frame_shape(FrameShape::Container);
m_label->set_frame_shadow(FrameShadow::Plain);
set_main_widget(m_label);
}

View file

@ -13,57 +13,10 @@ GFrame::~GFrame()
void GFrame::paint_event(GPaintEvent& event)
{
if (m_shape == Shape::NoFrame)
if (m_shape == FrameShape::NoFrame)
return;
GPainter painter(*this);
painter.add_clip_rect(event.rect());
Color top_left_color;
Color bottom_right_color;
Color dark_shade = Color::from_rgb(0x808080);
Color light_shade = Color::from_rgb(0xffffff);
if (m_shadow == Shadow::Raised) {
top_left_color = light_shade;
bottom_right_color = dark_shade;
} else if (m_shadow == Shadow::Sunken) {
top_left_color = dark_shade;
bottom_right_color = light_shade;
} else if (m_shadow == Shadow::Plain) {
top_left_color = dark_shade;
bottom_right_color = dark_shade;
}
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;
Color bottom_right_color;
Color dark_shade = Color::from_rgb(0x404040);
Color light_shade = Color::from_rgb(0xc0c0c0);
if (m_shadow == Shadow::Raised) {
top_left_color = light_shade;
bottom_right_color = dark_shade;
} else if (m_shadow == Shadow::Sunken) {
top_left_color = dark_shade;
bottom_right_color = light_shade;
} else if (m_shadow == Shadow::Plain) {
top_left_color = dark_shade;
bottom_right_color = dark_shade;
}
Rect inner_container_frame_rect = rect().shrunken(2, 2);
painter.draw_line(inner_container_frame_rect.top_left(), inner_container_frame_rect.top_right(), top_left_color);
painter.draw_line(inner_container_frame_rect.bottom_left(), inner_container_frame_rect.bottom_right(), bottom_right_color);
painter.draw_line(inner_container_frame_rect.top_left().translated(0, 1), inner_container_frame_rect.bottom_left().translated(0, -1), top_left_color);
painter.draw_line(inner_container_frame_rect.top_right(), inner_container_frame_rect.bottom_right().translated(0, -1), bottom_right_color);
}
StylePainter::paint_frame(painter, rect(), m_shape, m_shadow, m_thickness, spans_entire_window_horizontally());
}

View file

@ -1,23 +1,21 @@
#pragma once
#include <LibGUI/GWidget.h>
#include <SharedGraphics/StylePainter.h>
class GFrame : public GWidget {
public:
explicit GFrame(GWidget* parent = nullptr);
virtual ~GFrame() override;
enum Shadow { Plain, Raised, Sunken };
enum Shape { NoFrame, Container, Panel, VerticalLine, HorizontalLine };
int frame_thickness() const { return m_thickness; }
void set_frame_thickness(int thickness) { m_thickness = thickness; }
Shadow frame_shadow() const { return m_shadow; }
void set_frame_shadow(Shadow shadow) { m_shadow = shadow; }
FrameShadow frame_shadow() const { return m_shadow; }
void set_frame_shadow(FrameShadow shadow) { m_shadow = shadow; }
Shape frame_shape() const { return m_shape; }
void set_frame_shape(Shape shape) { m_shape = shape; }
FrameShape frame_shape() const { return m_shape; }
void set_frame_shape(FrameShape shape) { m_shape = shape; }
Rect frame_inner_rect_for_size(const Size& size) const { return { m_thickness, m_thickness, size.width() - m_thickness * 2, size.height() - m_thickness * 2 }; }
Rect frame_inner_rect() const { return frame_inner_rect_for_size(size()); }
@ -29,6 +27,6 @@ protected:
private:
int m_thickness { 0 };
Shadow m_shadow { Plain };
Shape m_shape { NoFrame };
FrameShadow m_shadow { FrameShadow::Plain };
FrameShape m_shape { FrameShape::NoFrame };
};

View file

@ -7,8 +7,8 @@
GItemView::GItemView(GWidget* parent)
: GAbstractView(parent)
{
set_frame_shape(GFrame::Shape::Container);
set_frame_shadow(GFrame::Shadow::Sunken);
set_frame_shape(FrameShape::Container);
set_frame_shadow(FrameShadow::Sunken);
set_frame_thickness(2);
horizontal_scrollbar().set_visible(false);
}

View file

@ -5,8 +5,8 @@
GProgressBar::GProgressBar(GWidget* parent)
: GFrame(parent)
{
set_frame_shape(GFrame::Shape::Container);
set_frame_shadow(GFrame::Shadow::Sunken);
set_frame_shape(FrameShape::Container);
set_frame_shadow(FrameShadow::Sunken);
set_frame_thickness(2);
}

View file

@ -13,8 +13,8 @@ GStatusBar::GStatusBar(GWidget* parent)
layout()->set_margins({ 2, 2, 2, 2 });
layout()->set_spacing(2);
m_label = new GLabel(this);
m_label->set_frame_shadow(GFrame::Shadow::Sunken);
m_label->set_frame_shape(GFrame::Shape::Panel);
m_label->set_frame_shadow(FrameShadow::Sunken);
m_label->set_frame_shape(FrameShape::Panel);
m_label->set_frame_thickness(1);
m_label->set_text_alignment(TextAlignment::CenterLeft);
}

View file

@ -7,8 +7,8 @@
GTableView::GTableView(GWidget* parent)
: GAbstractView(parent)
{
set_frame_shape(GFrame::Shape::Container);
set_frame_shadow(GFrame::Shadow::Sunken);
set_frame_shape(FrameShape::Container);
set_frame_shadow(FrameShadow::Sunken);
set_frame_thickness(2);
}

View file

@ -14,8 +14,8 @@ GTextEditor::GTextEditor(Type type, GWidget* parent)
: GScrollableWidget(parent)
, m_type(type)
{
set_frame_shape(GFrame::Shape::Container);
set_frame_shadow(GFrame::Shadow::Sunken);
set_frame_shape(FrameShape::Container);
set_frame_shadow(FrameShadow::Sunken);
set_frame_thickness(2);
set_scrollbars_enabled(is_multi_line());
m_ruler_visible = is_multi_line();

View file

@ -23,8 +23,8 @@ GTreeView::MetadataForIndex& GTreeView::ensure_metadata_for_index(const GModelIn
GTreeView::GTreeView(GWidget* parent)
: GAbstractView(parent)
{
set_frame_shape(GFrame::Shape::Container);
set_frame_shadow(GFrame::Shadow::Sunken);
set_frame_shape(FrameShape::Container);
set_frame_shadow(FrameShadow::Sunken);
set_frame_thickness(2);
m_expand_bitmap = GraphicsBitmap::load_from_file("/res/icons/treeview-expand.png");