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

LibGUI: Add GUI::AbstractSlider and move generic parts of Slider there

This will allow us to share some code between Slider and ScrollBar.
This commit is contained in:
Andreas Kling 2020-12-30 14:28:22 +01:00
parent 761169f5c0
commit fa836a4dda
5 changed files with 172 additions and 77 deletions

View file

@ -26,12 +26,13 @@
#pragma once
#include <LibGUI/Widget.h>
#include <LibGUI/AbstractSlider.h>
namespace GUI {
class Slider : public Widget {
C_OBJECT(Slider)
class Slider : public AbstractSlider {
C_OBJECT(Slider);
public:
enum class KnobSizeMode {
Fixed,
@ -40,21 +41,6 @@ public:
virtual ~Slider() override;
void set_orientation(Orientation value);
Orientation orientation() const { return m_orientation; }
int value() const { return m_value; }
int min() const { return m_min; }
int max() const { return m_max; }
int step() const { return m_step; }
void set_range(int min, int max);
void set_value(int);
void set_min(int min) { set_range(min, max()); }
void set_max(int max) { set_range(min(), max); }
void set_step(int step) { m_step = step; }
void set_knob_size_mode(KnobSizeMode mode) { m_knob_size_mode = mode; }
KnobSizeMode knob_size_mode() const { return m_knob_size_mode; }
@ -72,8 +58,6 @@ public:
return rect().shrunken(0, 20);
}
Function<void(int)> on_value_changed;
protected:
explicit Slider(Orientation = Orientation::Vertical);
@ -88,20 +72,16 @@ protected:
private:
void set_knob_hovered(bool);
int m_value { 0 };
int m_min { 0 };
int m_max { 100 };
int m_step { 1 };
bool m_knob_hovered { false };
bool m_dragging { false };
int m_drag_origin_value { 0 };
Gfx::IntPoint m_drag_origin;
KnobSizeMode m_knob_size_mode { KnobSizeMode::Fixed };
Orientation m_orientation { Orientation::Horizontal };
};
class VerticalSlider final : public Slider {
C_OBJECT(VerticalSlider)
C_OBJECT(VerticalSlider);
public:
virtual ~VerticalSlider() override { }
@ -113,7 +93,8 @@ private:
};
class HorizontalSlider final : public Slider {
C_OBJECT(HorizontalSlider)
C_OBJECT(HorizontalSlider);
public:
virtual ~HorizontalSlider() override { }