From dccf335d5b1aa06e44f9262c95b176c42ba2cf1e Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Thu, 6 Feb 2020 14:43:16 +0100 Subject: [PATCH] LibGUI: Add HorizontalSlider and VerticalSlider convenience classes --- Applications/Piano/KnobsWidget.cpp | 14 ++++++------ Applications/Terminal/main.cpp | 2 +- Demos/WidgetGallery/main.cpp | 12 +++++------ DevTools/VisualBuilder/VBWidgetRegistry.cpp | 2 +- Libraries/LibGUI/GSlider.h | 24 +++++++++++++++++++++ 5 files changed, 39 insertions(+), 15 deletions(-) diff --git a/Applications/Piano/KnobsWidget.cpp b/Applications/Piano/KnobsWidget.cpp index a5cf1ac204..8f53f0b8b0 100644 --- a/Applications/Piano/KnobsWidget.cpp +++ b/Applications/Piano/KnobsWidget.cpp @@ -74,7 +74,7 @@ KnobsWidget::KnobsWidget(GUI::Widget* parent, AudioEngine& audio_engine, MainWid // FIXME: Implement vertical flipping in GSlider, not here. - m_octave_knob = GUI::Slider::construct(Orientation::Vertical, m_knobs_container); + m_octave_knob = GUI::VerticalSlider::construct(m_knobs_container); m_octave_knob->set_tooltip("Z: octave down, X: octave up"); m_octave_knob->set_range(octave_min - 1, octave_max - 1); m_octave_knob->set_value((octave_max - 1) - (m_audio_engine.octave() - 1)); @@ -86,7 +86,7 @@ KnobsWidget::KnobsWidget(GUI::Widget* parent, AudioEngine& audio_engine, MainWid m_octave_value->set_text(String::number(new_octave)); }; - m_wave_knob = GUI::Slider::construct(Orientation::Vertical, m_knobs_container); + m_wave_knob = GUI::VerticalSlider::construct(m_knobs_container); m_wave_knob->set_tooltip("C: cycle through waveforms"); m_wave_knob->set_range(0, last_wave); m_wave_knob->set_value(last_wave - m_audio_engine.wave()); @@ -98,7 +98,7 @@ KnobsWidget::KnobsWidget(GUI::Widget* parent, AudioEngine& audio_engine, MainWid }; constexpr int max_attack = 1000; - m_attack_knob = GUI::Slider::construct(Orientation::Vertical, m_knobs_container); + m_attack_knob = GUI::VerticalSlider::construct(m_knobs_container); m_attack_knob->set_range(0, max_attack); m_attack_knob->set_value(max_attack - m_audio_engine.attack()); m_attack_knob->on_value_changed = [this](int value) { @@ -109,7 +109,7 @@ KnobsWidget::KnobsWidget(GUI::Widget* parent, AudioEngine& audio_engine, MainWid }; constexpr int max_decay = 1000; - m_decay_knob = GUI::Slider::construct(Orientation::Vertical, m_knobs_container); + m_decay_knob = GUI::VerticalSlider::construct(m_knobs_container); m_decay_knob->set_range(0, max_decay); m_decay_knob->set_value(max_decay - m_audio_engine.decay()); m_decay_knob->on_value_changed = [this](int value) { @@ -120,7 +120,7 @@ KnobsWidget::KnobsWidget(GUI::Widget* parent, AudioEngine& audio_engine, MainWid }; constexpr int max_sustain = 1000; - m_sustain_knob = GUI::Slider::construct(Orientation::Vertical, m_knobs_container); + m_sustain_knob = GUI::VerticalSlider::construct(m_knobs_container); m_sustain_knob->set_range(0, max_sustain); m_sustain_knob->set_value(max_sustain - m_audio_engine.sustain()); m_sustain_knob->on_value_changed = [this](int value) { @@ -131,7 +131,7 @@ KnobsWidget::KnobsWidget(GUI::Widget* parent, AudioEngine& audio_engine, MainWid }; constexpr int max_release = 1000; - m_release_knob = GUI::Slider::construct(Orientation::Vertical, m_knobs_container); + m_release_knob = GUI::VerticalSlider::construct(m_knobs_container); m_release_knob->set_range(0, max_release); m_release_knob->set_value(max_release - m_audio_engine.release()); m_release_knob->on_value_changed = [this](int value) { @@ -142,7 +142,7 @@ KnobsWidget::KnobsWidget(GUI::Widget* parent, AudioEngine& audio_engine, MainWid }; constexpr int max_delay = 8; - m_delay_knob = GUI::Slider::construct(Orientation::Vertical, m_knobs_container); + m_delay_knob = GUI::VerticalSlider::construct(m_knobs_container); m_delay_knob->set_range(0, max_delay); m_delay_knob->set_value(max_delay - (m_audio_engine.delay() / m_audio_engine.tick())); m_delay_knob->on_value_changed = [this](int value) { diff --git a/Applications/Terminal/main.cpp b/Applications/Terminal/main.cpp index 0ac4a8edaf..78151b324d 100644 --- a/Applications/Terminal/main.cpp +++ b/Applications/Terminal/main.cpp @@ -156,7 +156,7 @@ RefPtr create_settings_window(TerminalWidget& terminal) slider_container->layout()->set_margins({ 6, 16, 6, 6 }); slider_container->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); slider_container->set_preferred_size(100, 50); - auto slider = GUI::Slider::construct(Orientation::Horizontal, slider_container); + auto slider = GUI::HorizontalSlider::construct(slider_container); slider->on_value_changed = [&terminal](int value) { terminal.set_opacity(value); diff --git a/Demos/WidgetGallery/main.cpp b/Demos/WidgetGallery/main.cpp index bc5a85f20b..a969df399f 100644 --- a/Demos/WidgetGallery/main.cpp +++ b/Demos/WidgetGallery/main.cpp @@ -96,19 +96,19 @@ int main(int argc, char** argv) vertical_slider_container->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); vertical_slider_container->set_preferred_size(0, 100); vertical_slider_container->set_layout(make()); - auto vslider1 = GUI::Slider::construct(Orientation::Vertical, vertical_slider_container); + auto vslider1 = GUI::VerticalSlider::construct(vertical_slider_container); (void)vslider1; - auto vslider2 = GUI::Slider::construct(Orientation::Vertical, vertical_slider_container); + auto vslider2 = GUI::VerticalSlider::construct(vertical_slider_container); vslider2->set_enabled(false); - auto vslider3 = GUI::Slider::construct(Orientation::Vertical, vertical_slider_container); + auto vslider3 = GUI::VerticalSlider::construct(vertical_slider_container); vslider3->set_max(5); vslider3->set_knob_size_mode(GUI::Slider::KnobSizeMode::Proportional); - auto slider1 = GUI::Slider::construct(Orientation::Horizontal, main_widget); + auto slider1 = GUI::HorizontalSlider::construct(main_widget); (void)slider1; - auto slider2 = GUI::Slider::construct(Orientation::Horizontal, main_widget); + auto slider2 = GUI::HorizontalSlider::construct(main_widget); slider2->set_enabled(false); - auto slider3 = GUI::Slider::construct(Orientation::Horizontal, main_widget); + auto slider3 = GUI::HorizontalSlider::construct(main_widget); slider3->set_max(5); slider3->set_knob_size_mode(GUI::Slider::KnobSizeMode::Proportional); diff --git a/DevTools/VisualBuilder/VBWidgetRegistry.cpp b/DevTools/VisualBuilder/VBWidgetRegistry.cpp index a62d24984e..076c2f7e9f 100644 --- a/DevTools/VisualBuilder/VBWidgetRegistry.cpp +++ b/DevTools/VisualBuilder/VBWidgetRegistry.cpp @@ -133,7 +133,7 @@ static RefPtr build_gwidget(VBWidgetType type, GUI::Widget* parent) return bar; } case VBWidgetType::GSlider: { - auto slider = GUI::Slider::construct(Orientation::Horizontal, parent); + auto slider = GUI::HorizontalSlider::construct(parent); slider->set_range(0, 100); slider->set_value(50); return slider; diff --git a/Libraries/LibGUI/GSlider.h b/Libraries/LibGUI/GSlider.h index bb3c52b9ae..d3bbc06e0e 100644 --- a/Libraries/LibGUI/GSlider.h +++ b/Libraries/LibGUI/GSlider.h @@ -96,4 +96,28 @@ private: Orientation m_orientation { Orientation::Horizontal }; }; +class VerticalSlider final : public Slider { + C_OBJECT(VerticalSlider) +public: + virtual ~VerticalSlider() override {} + +private: + explicit VerticalSlider(Widget* parent) + : Slider(Orientation::Vertical, parent) + { + } +}; + +class HorizontalSlider final : public Slider { + C_OBJECT(HorizontalSlider) +public: + virtual ~HorizontalSlider() override {} + +private: + explicit HorizontalSlider(Widget* parent) + : Slider(Orientation::Horizontal, parent) + { + } +}; + }