Serenity Operating System
at master 54 lines 1.9 kB view raw
1/* 2 * Copyright (c) 2021-2023, the SerenityOS developers. 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include "ZoomTool.h" 8#include "../ImageEditor.h" 9#include <LibGUI/BoxLayout.h> 10#include <LibGUI/Label.h> 11#include <LibGUI/ValueSlider.h> 12 13namespace PixelPaint { 14 15void ZoomTool::on_mousedown(Layer*, MouseEvent& event) 16{ 17 auto& raw_event = event.raw_event(); 18 if (raw_event.button() != GUI::MouseButton::Primary && raw_event.button() != GUI::MouseButton::Secondary) 19 return; 20 21 auto scale_factor = (raw_event.button() == GUI::MouseButton::Primary) ? m_sensitivity : -m_sensitivity; 22 auto new_scale = m_editor->scale() * AK::exp2(scale_factor); 23 m_editor->scale_centered(new_scale, raw_event.position()); 24} 25 26ErrorOr<GUI::Widget*> ZoomTool::get_properties_widget() 27{ 28 if (!m_properties_widget) { 29 auto properties_widget = TRY(GUI::Widget::try_create()); 30 (void)TRY(properties_widget->try_set_layout<GUI::VerticalBoxLayout>()); 31 32 auto sensitivity_container = TRY(properties_widget->try_add<GUI::Widget>()); 33 sensitivity_container->set_fixed_height(20); 34 (void)TRY(sensitivity_container->try_set_layout<GUI::HorizontalBoxLayout>()); 35 36 auto sensitivity_label = TRY(sensitivity_container->try_add<GUI::Label>("Sensitivity:")); 37 sensitivity_label->set_text_alignment(Gfx::TextAlignment::CenterLeft); 38 sensitivity_label->set_fixed_size(80, 20); 39 40 auto sensitivity_slider = TRY(sensitivity_container->try_add<GUI::ValueSlider>(Orientation::Horizontal, "%"_short_string)); 41 sensitivity_slider->set_range(1, 100); 42 sensitivity_slider->set_value(100 * m_sensitivity); 43 44 sensitivity_slider->on_change = [this](int value) { 45 m_sensitivity = value / 100.0f; 46 }; 47 set_primary_slider(sensitivity_slider); 48 m_properties_widget = properties_widget; 49 } 50 51 return m_properties_widget.ptr(); 52} 53 54}