LibGUI: Split OpacitySlider into vertical and horizontal helper classes
This commit is contained in:
parent
99624a8df4
commit
59028515c0
Notes:
sideshowbarker
2024-07-17 04:03:27 +09:00
Author: https://github.com/frhun Commit: https://github.com/SerenityOS/serenity/commit/59028515c0 Pull-request: https://github.com/SerenityOS/serenity/pull/16369 Reviewed-by: https://github.com/MacDue ✅
9 changed files with 56 additions and 11 deletions
|
@ -8,12 +8,13 @@ Defines a GUI opacity slider widget.
|
|||
|
||||
## Synopsis
|
||||
|
||||
`@GUI::OpacitySlider`
|
||||
`@GUI::HorizontalOpacitySlider`
|
||||
`@GUI::VerticalOpacitySlider`
|
||||
|
||||
## Examples
|
||||
|
||||
```gml
|
||||
@GUI::OpacitySlider {
|
||||
@GUI::HorizontalOpacitySlider {
|
||||
name: "opacity_slider"
|
||||
tooltip: "Opacity Slider"
|
||||
}
|
||||
|
|
|
@ -51,7 +51,7 @@ LayerPropertiesWidget::LayerPropertiesWidget()
|
|||
opacity_label.set_text_alignment(Gfx::TextAlignment::CenterLeft);
|
||||
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->on_change = [this](int value) {
|
||||
if (m_layer)
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
spacing: 16
|
||||
}
|
||||
|
||||
@GUI::OpacitySlider {
|
||||
@GUI::HorizontalOpacitySlider {
|
||||
name: "background_opacity_slider"
|
||||
min: 0
|
||||
max: 255
|
||||
|
|
|
@ -104,7 +104,7 @@ TerminalSettingsViewWidget::TerminalSettingsViewWidget()
|
|||
{
|
||||
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_original_opacity = m_opacity;
|
||||
slider.set_value(m_opacity);
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
margins: [8]
|
||||
}
|
||||
|
||||
@GUI::OpacitySlider {
|
||||
@GUI::HorizontalOpacitySlider {
|
||||
name: "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->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_imagewidget->set_opacity_percent(percent);
|
||||
|
|
|
@ -33,6 +33,7 @@ class Frame;
|
|||
class GroupBox;
|
||||
class HeaderView;
|
||||
class HorizontalBoxLayout;
|
||||
class HorizontalOpacitySlider;
|
||||
class HorizontalSlider;
|
||||
class Icon;
|
||||
class IconView;
|
||||
|
@ -88,6 +89,7 @@ class TreeView;
|
|||
class ValueSlider;
|
||||
class Variant;
|
||||
class VerticalBoxLayout;
|
||||
class VerticalOpacitySlider;
|
||||
class VerticalSlider;
|
||||
class WMEvent;
|
||||
class Widget;
|
||||
|
|
|
@ -10,7 +10,8 @@
|
|||
#include <LibGfx/Palette.h>
|
||||
#include <LibGfx/StylePainter.h>
|
||||
|
||||
REGISTER_WIDGET(GUI, OpacitySlider)
|
||||
REGISTER_WIDGET(GUI, HorizontalOpacitySlider)
|
||||
REGISTER_WIDGET(GUI, VerticalOpacitySlider)
|
||||
|
||||
namespace GUI {
|
||||
|
||||
|
@ -20,7 +21,6 @@ OpacitySlider::OpacitySlider(Gfx::Orientation orientation)
|
|||
set_min(0);
|
||||
set_max(100);
|
||||
set_value(100);
|
||||
set_fixed_height(20);
|
||||
}
|
||||
|
||||
Gfx::IntRect OpacitySlider::frame_inner_rect() const
|
||||
|
@ -182,4 +182,20 @@ void OpacitySlider::mousewheel_event(MouseEvent& event)
|
|||
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;
|
||||
|
||||
protected:
|
||||
explicit OpacitySlider(Gfx::Orientation);
|
||||
|
||||
virtual void paint_event(PaintEvent&) override;
|
||||
virtual void mousedown_event(MouseEvent&) override;
|
||||
virtual void mousemove_event(MouseEvent&) override;
|
||||
|
@ -25,8 +27,6 @@ protected:
|
|||
virtual void mousewheel_event(MouseEvent&) override;
|
||||
|
||||
private:
|
||||
explicit OpacitySlider(Gfx::Orientation = Gfx::Orientation::Horizontal);
|
||||
|
||||
Gfx::IntRect frame_inner_rect() const;
|
||||
|
||||
virtual Optional<UISize> calculated_min_size() const override;
|
||||
|
@ -37,4 +37,30 @@ private:
|
|||
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
Reference in a new issue