OpacitySlider.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /*
  2. * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
  3. * Copyright (c) 2022, the SerenityOS developers.
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <LibGUI/AbstractSlider.h>
  9. namespace GUI {
  10. class OpacitySlider : public AbstractSlider {
  11. C_OBJECT(OpacitySlider);
  12. public:
  13. virtual ~OpacitySlider() override = default;
  14. void set_base_color(Gfx::Color);
  15. Gfx::Color base_color() { return m_base_color; }
  16. protected:
  17. explicit OpacitySlider(Gfx::Orientation);
  18. virtual void paint_event(PaintEvent&) override;
  19. virtual void mousedown_event(MouseEvent&) override;
  20. virtual void mousemove_event(MouseEvent&) override;
  21. virtual void mouseup_event(MouseEvent&) override;
  22. virtual void mousewheel_event(MouseEvent&) override;
  23. private:
  24. Gfx::IntRect frame_inner_rect() const;
  25. Gfx::Color m_base_color { 0, 0, 0 };
  26. virtual Optional<UISize> calculated_min_size() const override;
  27. virtual Optional<UISize> calculated_preferred_size() const override;
  28. int value_at(Gfx::IntPoint) const;
  29. bool m_dragging { false };
  30. };
  31. class VerticalOpacitySlider final : public OpacitySlider {
  32. C_OBJECT(VerticalOpacitySlider);
  33. public:
  34. virtual ~VerticalOpacitySlider() override = default;
  35. private:
  36. VerticalOpacitySlider()
  37. : OpacitySlider(Orientation::Vertical)
  38. {
  39. }
  40. };
  41. class HorizontalOpacitySlider final : public OpacitySlider {
  42. C_OBJECT(HorizontalOpacitySlider);
  43. public:
  44. virtual ~HorizontalOpacitySlider() override = default;
  45. private:
  46. HorizontalOpacitySlider()
  47. : OpacitySlider(Orientation::Horizontal)
  48. {
  49. }
  50. };
  51. }