1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 14:57: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. // 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_tooltip("Z: octave down, X: octave up");
m_octave_knob->set_range(octave_min - 1, octave_max - 1); m_octave_knob->set_range(octave_min - 1, octave_max - 1);
m_octave_knob->set_value((octave_max - 1) - (m_audio_engine.octave() - 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_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_tooltip("C: cycle through waveforms");
m_wave_knob->set_range(0, last_wave); m_wave_knob->set_range(0, last_wave);
m_wave_knob->set_value(last_wave - m_audio_engine.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; 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_range(0, max_attack);
m_attack_knob->set_value(max_attack - m_audio_engine.attack()); m_attack_knob->set_value(max_attack - m_audio_engine.attack());
m_attack_knob->on_value_changed = [this](int value) { 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; 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_range(0, max_decay);
m_decay_knob->set_value(max_decay - m_audio_engine.decay()); m_decay_knob->set_value(max_decay - m_audio_engine.decay());
m_decay_knob->on_value_changed = [this](int value) { 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; 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_range(0, max_sustain);
m_sustain_knob->set_value(max_sustain - m_audio_engine.sustain()); m_sustain_knob->set_value(max_sustain - m_audio_engine.sustain());
m_sustain_knob->on_value_changed = [this](int value) { 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; 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_range(0, max_release);
m_release_knob->set_value(max_release - m_audio_engine.release()); m_release_knob->set_value(max_release - m_audio_engine.release());
m_release_knob->on_value_changed = [this](int value) { 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; 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_range(0, max_delay);
m_delay_knob->set_value(max_delay - (m_audio_engine.delay() / m_audio_engine.tick())); m_delay_knob->set_value(max_delay - (m_audio_engine.delay() / m_audio_engine.tick()));
m_delay_knob->on_value_changed = [this](int value) { 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->layout()->set_margins({ 6, 16, 6, 6 });
slider_container->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); slider_container->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed);
slider_container->set_preferred_size(100, 50); 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) { slider->on_value_changed = [&terminal](int value) {
terminal.set_opacity(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_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed);
vertical_slider_container->set_preferred_size(0, 100); vertical_slider_container->set_preferred_size(0, 100);
vertical_slider_container->set_layout(make<GUI::HBoxLayout>()); 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; (void)vslider1;
auto vslider2 = GUI::Slider::construct(Orientation::Vertical, vertical_slider_container); auto vslider2 = GUI::VerticalSlider::construct(vertical_slider_container);
vslider2->set_enabled(false); 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_max(5);
vslider3->set_knob_size_mode(GUI::Slider::KnobSizeMode::Proportional); 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; (void)slider1;
auto slider2 = GUI::Slider::construct(Orientation::Horizontal, main_widget); auto slider2 = GUI::HorizontalSlider::construct(main_widget);
slider2->set_enabled(false); 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_max(5);
slider3->set_knob_size_mode(GUI::Slider::KnobSizeMode::Proportional); 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; return bar;
} }
case VBWidgetType::GSlider: { case VBWidgetType::GSlider: {
auto slider = GUI::Slider::construct(Orientation::Horizontal, parent); auto slider = GUI::HorizontalSlider::construct(parent);
slider->set_range(0, 100); slider->set_range(0, 100);
slider->set_value(50); slider->set_value(50);
return slider; return slider;

View file

@ -96,4 +96,28 @@ private:
Orientation m_orientation { Orientation::Horizontal }; 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)
{
}
};
} }