Serenity Operating System
at master 66 lines 1.7 kB view raw
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}