Serenity Operating System
1/*
2 * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
3 * Copyright (c) 2022, the SerenityOS developers.
4 *
5 * SPDX-License-Identifier: BSD-2-Clause
6 */
7
8#include <AK/Assertions.h>
9#include <AK/StdLibExtras.h>
10#include <LibGUI/Painter.h>
11#include <LibGUI/Slider.h>
12#include <LibGfx/Palette.h>
13
14namespace GUI {
15
16AbstractSlider::AbstractSlider(Orientation orientation)
17 : m_orientation(orientation)
18{
19 REGISTER_INT_PROPERTY("value", value, set_value);
20 REGISTER_INT_PROPERTY("min", min, set_min);
21 REGISTER_INT_PROPERTY("max", max, set_max);
22 REGISTER_INT_PROPERTY("step", step, set_step);
23 REGISTER_INT_PROPERTY("page_step", page_step, set_page_step);
24 REGISTER_ENUM_PROPERTY("orientation", this->orientation, set_orientation, Orientation,
25 { Orientation::Horizontal, "Horizontal" },
26 { Orientation::Vertical, "Vertical" });
27}
28
29void AbstractSlider::set_orientation(Orientation value)
30{
31 if (m_orientation == value)
32 return;
33 m_orientation = value;
34 update();
35}
36
37void AbstractSlider::set_page_step(int page_step)
38{
39 m_page_step = AK::max(0, page_step);
40}
41
42void AbstractSlider::set_range(int min, int max)
43{
44 VERIFY(min <= max);
45 if (m_min == min && m_max == max)
46 return;
47 m_min = min;
48 m_max = max;
49 m_value = clamp(m_value, m_min, m_max);
50 update();
51}
52
53void AbstractSlider::set_value(int value, AllowCallback allow_callback, DoClamp do_clamp)
54{
55 if (do_clamp == DoClamp::Yes)
56 value = clamp(value, m_min, m_max);
57 if (m_value == value)
58 return;
59 m_value = value;
60 update();
61
62 if (on_change && allow_callback == AllowCallback::Yes)
63 on_change(m_value);
64}
65
66}