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

LibGUI: Add HorizontalSlider and VerticalSlider convenience classes

This commit is contained in:
Andreas Kling 2020-02-06 14:43:16 +01:00
parent 6a71ba1deb
commit dccf335d5b
5 changed files with 39 additions and 15 deletions

View file

@ -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) {

View file

@ -156,7 +156,7 @@ RefPtr<GUI::Window> 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);

View file

@ -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<GUI::HBoxLayout>());
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);

View file

@ -133,7 +133,7 @@ static RefPtr<GUI::Widget> 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;

View file

@ -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)
{
}
};
}