mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 08:17:45 +00:00
LibGUI: Split OpacitySlider into vertical and horizontal helper classes
This commit is contained in:
parent
99624a8df4
commit
59028515c0
9 changed files with 56 additions and 11 deletions
|
@ -8,12 +8,13 @@ Defines a GUI opacity slider widget.
|
||||||
|
|
||||||
## Synopsis
|
## Synopsis
|
||||||
|
|
||||||
`@GUI::OpacitySlider`
|
`@GUI::HorizontalOpacitySlider`
|
||||||
|
`@GUI::VerticalOpacitySlider`
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
```gml
|
```gml
|
||||||
@GUI::OpacitySlider {
|
@GUI::HorizontalOpacitySlider {
|
||||||
name: "opacity_slider"
|
name: "opacity_slider"
|
||||||
tooltip: "Opacity Slider"
|
tooltip: "Opacity Slider"
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,7 +51,7 @@ LayerPropertiesWidget::LayerPropertiesWidget()
|
||||||
opacity_label.set_text_alignment(Gfx::TextAlignment::CenterLeft);
|
opacity_label.set_text_alignment(Gfx::TextAlignment::CenterLeft);
|
||||||
opacity_label.set_fixed_size(80, 20);
|
opacity_label.set_fixed_size(80, 20);
|
||||||
|
|
||||||
m_opacity_slider = opacity_container.add<GUI::OpacitySlider>();
|
m_opacity_slider = opacity_container.add<GUI::HorizontalOpacitySlider>();
|
||||||
m_opacity_slider->set_range(0, 100);
|
m_opacity_slider->set_range(0, 100);
|
||||||
m_opacity_slider->on_change = [this](int value) {
|
m_opacity_slider->on_change = [this](int value) {
|
||||||
if (m_layer)
|
if (m_layer)
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
spacing: 16
|
spacing: 16
|
||||||
}
|
}
|
||||||
|
|
||||||
@GUI::OpacitySlider {
|
@GUI::HorizontalOpacitySlider {
|
||||||
name: "background_opacity_slider"
|
name: "background_opacity_slider"
|
||||||
min: 0
|
min: 0
|
||||||
max: 255
|
max: 255
|
||||||
|
|
|
@ -104,7 +104,7 @@ TerminalSettingsViewWidget::TerminalSettingsViewWidget()
|
||||||
{
|
{
|
||||||
load_from_gml(terminal_settings_view_gml);
|
load_from_gml(terminal_settings_view_gml);
|
||||||
|
|
||||||
auto& slider = *find_descendant_of_type_named<GUI::OpacitySlider>("background_opacity_slider");
|
auto& slider = *find_descendant_of_type_named<GUI::HorizontalOpacitySlider>("background_opacity_slider");
|
||||||
m_opacity = Config::read_i32("Terminal"sv, "Window"sv, "Opacity"sv);
|
m_opacity = Config::read_i32("Terminal"sv, "Window"sv, "Opacity"sv);
|
||||||
m_original_opacity = m_opacity;
|
m_original_opacity = m_opacity;
|
||||||
slider.set_value(m_opacity);
|
slider.set_value(m_opacity);
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
margins: [8]
|
margins: [8]
|
||||||
}
|
}
|
||||||
|
|
||||||
@GUI::OpacitySlider {
|
@GUI::HorizontalOpacitySlider {
|
||||||
name: "opacity_slider"
|
name: "opacity_slider"
|
||||||
tooltip: "Opacity Slider"
|
tooltip: "Opacity Slider"
|
||||||
}
|
}
|
||||||
|
|
|
@ -215,7 +215,7 @@ GalleryWidget::GalleryWidget()
|
||||||
m_opacity_imagewidget = sliders_tab->find_descendant_of_type_named<GUI::ImageWidget>("opacity_imagewidget");
|
m_opacity_imagewidget = sliders_tab->find_descendant_of_type_named<GUI::ImageWidget>("opacity_imagewidget");
|
||||||
m_opacity_imagewidget->load_from_file("/res/graphics/brand-banner.png"sv);
|
m_opacity_imagewidget->load_from_file("/res/graphics/brand-banner.png"sv);
|
||||||
|
|
||||||
m_opacity_slider = sliders_tab->find_descendant_of_type_named<GUI::OpacitySlider>("opacity_slider");
|
m_opacity_slider = sliders_tab->find_descendant_of_type_named<GUI::HorizontalOpacitySlider>("opacity_slider");
|
||||||
|
|
||||||
m_opacity_slider->on_change = [&](auto percent) {
|
m_opacity_slider->on_change = [&](auto percent) {
|
||||||
m_opacity_imagewidget->set_opacity_percent(percent);
|
m_opacity_imagewidget->set_opacity_percent(percent);
|
||||||
|
|
|
@ -33,6 +33,7 @@ class Frame;
|
||||||
class GroupBox;
|
class GroupBox;
|
||||||
class HeaderView;
|
class HeaderView;
|
||||||
class HorizontalBoxLayout;
|
class HorizontalBoxLayout;
|
||||||
|
class HorizontalOpacitySlider;
|
||||||
class HorizontalSlider;
|
class HorizontalSlider;
|
||||||
class Icon;
|
class Icon;
|
||||||
class IconView;
|
class IconView;
|
||||||
|
@ -88,6 +89,7 @@ class TreeView;
|
||||||
class ValueSlider;
|
class ValueSlider;
|
||||||
class Variant;
|
class Variant;
|
||||||
class VerticalBoxLayout;
|
class VerticalBoxLayout;
|
||||||
|
class VerticalOpacitySlider;
|
||||||
class VerticalSlider;
|
class VerticalSlider;
|
||||||
class WMEvent;
|
class WMEvent;
|
||||||
class Widget;
|
class Widget;
|
||||||
|
|
|
@ -10,7 +10,8 @@
|
||||||
#include <LibGfx/Palette.h>
|
#include <LibGfx/Palette.h>
|
||||||
#include <LibGfx/StylePainter.h>
|
#include <LibGfx/StylePainter.h>
|
||||||
|
|
||||||
REGISTER_WIDGET(GUI, OpacitySlider)
|
REGISTER_WIDGET(GUI, HorizontalOpacitySlider)
|
||||||
|
REGISTER_WIDGET(GUI, VerticalOpacitySlider)
|
||||||
|
|
||||||
namespace GUI {
|
namespace GUI {
|
||||||
|
|
||||||
|
@ -20,7 +21,6 @@ OpacitySlider::OpacitySlider(Gfx::Orientation orientation)
|
||||||
set_min(0);
|
set_min(0);
|
||||||
set_max(100);
|
set_max(100);
|
||||||
set_value(100);
|
set_value(100);
|
||||||
set_fixed_height(20);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Gfx::IntRect OpacitySlider::frame_inner_rect() const
|
Gfx::IntRect OpacitySlider::frame_inner_rect() const
|
||||||
|
@ -182,4 +182,20 @@ void OpacitySlider::mousewheel_event(MouseEvent& event)
|
||||||
decrease_slider_by(event.wheel_delta_y());
|
decrease_slider_by(event.wheel_delta_y());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Optional<UISize> OpacitySlider::calculated_min_size() const
|
||||||
|
{
|
||||||
|
if (orientation() == Gfx::Orientation::Vertical)
|
||||||
|
return { { 20, 40 } };
|
||||||
|
else
|
||||||
|
return { { 40, 20 } };
|
||||||
|
}
|
||||||
|
|
||||||
|
Optional<UISize> OpacitySlider::calculated_preferred_size() const
|
||||||
|
{
|
||||||
|
if (orientation() == Gfx::Orientation::Vertical)
|
||||||
|
return { { SpecialDimension::Shrink, SpecialDimension::OpportunisticGrow } };
|
||||||
|
else
|
||||||
|
return { { SpecialDimension::OpportunisticGrow, SpecialDimension::Shrink } };
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,8 @@ public:
|
||||||
virtual ~OpacitySlider() override = default;
|
virtual ~OpacitySlider() override = default;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
explicit OpacitySlider(Gfx::Orientation);
|
||||||
|
|
||||||
virtual void paint_event(PaintEvent&) override;
|
virtual void paint_event(PaintEvent&) override;
|
||||||
virtual void mousedown_event(MouseEvent&) override;
|
virtual void mousedown_event(MouseEvent&) override;
|
||||||
virtual void mousemove_event(MouseEvent&) override;
|
virtual void mousemove_event(MouseEvent&) override;
|
||||||
|
@ -25,8 +27,6 @@ protected:
|
||||||
virtual void mousewheel_event(MouseEvent&) override;
|
virtual void mousewheel_event(MouseEvent&) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit OpacitySlider(Gfx::Orientation = Gfx::Orientation::Horizontal);
|
|
||||||
|
|
||||||
Gfx::IntRect frame_inner_rect() const;
|
Gfx::IntRect frame_inner_rect() const;
|
||||||
|
|
||||||
virtual Optional<UISize> calculated_min_size() const override;
|
virtual Optional<UISize> calculated_min_size() const override;
|
||||||
|
@ -37,4 +37,30 @@ private:
|
||||||
bool m_dragging { false };
|
bool m_dragging { false };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class VerticalOpacitySlider final : public OpacitySlider {
|
||||||
|
C_OBJECT(VerticalOpacitySlider);
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual ~VerticalOpacitySlider() override = default;
|
||||||
|
|
||||||
|
private:
|
||||||
|
VerticalOpacitySlider()
|
||||||
|
: OpacitySlider(Orientation::Vertical)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class HorizontalOpacitySlider final : public OpacitySlider {
|
||||||
|
C_OBJECT(HorizontalOpacitySlider);
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual ~HorizontalOpacitySlider() override = default;
|
||||||
|
|
||||||
|
private:
|
||||||
|
HorizontalOpacitySlider()
|
||||||
|
: OpacitySlider(Orientation::Horizontal)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue