ValueSlider.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /*
  2. * Copyright (c) 2021, Marcus Nilsson <brainbomb@gmail.com>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <LibGUI/AbstractSlider.h>
  8. namespace GUI {
  9. class ValueSlider : public AbstractSlider {
  10. C_OBJECT(ValueSlider);
  11. public:
  12. enum class KnobStyle {
  13. Wide,
  14. Thin,
  15. };
  16. virtual ~ValueSlider() override;
  17. void set_suffix(String suffix) { m_suffix = move(suffix); }
  18. void set_knob_style(KnobStyle knobstyle) { m_knob_style = knobstyle; }
  19. virtual void set_value(int value, AllowCallback = AllowCallback::Yes) override;
  20. protected:
  21. virtual void paint_event(PaintEvent&) override;
  22. virtual void mousedown_event(MouseEvent&) override;
  23. virtual void mousemove_event(MouseEvent&) override;
  24. virtual void mouseup_event(MouseEvent&) override;
  25. virtual void mousewheel_event(MouseEvent&) override;
  26. virtual void leave_event(Core::Event&) override;
  27. private:
  28. explicit ValueSlider(Gfx::Orientation = Gfx::Orientation::Horizontal, String suffix = "");
  29. String formatted_value() const;
  30. int value_at(const Gfx::IntPoint& position) const;
  31. Gfx::IntRect bar_rect() const;
  32. Gfx::IntRect knob_rect() const;
  33. String m_suffix {};
  34. Orientation m_orientation { Orientation::Horizontal };
  35. KnobStyle m_knob_style { KnobStyle::Thin };
  36. RefPtr<GUI::TextBox> m_textbox;
  37. bool m_dragging { false };
  38. bool m_hovered { false };
  39. };
  40. }