Serenity Operating System
1/*
2 * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
3 * Copyright (c) 2021, Mustafa Quraish <mustafa@serenityos.org>
4 * Copyright (c) 2022, the SerenityOS developers.
5 *
6 * SPDX-License-Identifier: BSD-2-Clause
7 */
8
9#include "PickerTool.h"
10#include "../ImageEditor.h"
11#include "../Layer.h"
12#include <LibGUI/BoxLayout.h>
13#include <LibGUI/CheckBox.h>
14
15namespace PixelPaint {
16
17void PickerTool::on_mousedown(Layer* layer, MouseEvent& event)
18{
19 if (!layer)
20 return;
21 auto layer_event = event.layer_event();
22 m_editor->set_editor_color_to_color_at_mouse_position(layer_event, m_sample_all_layers);
23}
24
25void PickerTool::on_mouseup(Layer*, MouseEvent& event)
26{
27 auto layer_event = event.layer_event();
28 if (layer_event.buttons() & GUI::MouseButton::Primary || layer_event.buttons() & GUI::MouseButton::Secondary)
29 return;
30}
31
32void PickerTool::on_mousemove(Layer* layer, MouseEvent& event)
33{
34 if (!layer)
35 return;
36 auto layer_event = event.layer_event();
37 m_editor->set_status_info_to_color_at_mouse_position(layer_event.position(), m_sample_all_layers);
38
39 if (!(layer_event.buttons() & GUI::MouseButton::Primary || layer_event.buttons() & GUI::MouseButton::Secondary))
40 return;
41 m_editor->set_editor_color_to_color_at_mouse_position(layer_event, m_sample_all_layers);
42}
43
44ErrorOr<GUI::Widget*> PickerTool::get_properties_widget()
45{
46 if (!m_properties_widget) {
47 auto properties_widget = TRY(GUI::Widget::try_create());
48 (void)TRY(properties_widget->try_set_layout<GUI::VerticalBoxLayout>());
49
50 auto sample_checkbox = TRY(properties_widget->try_add<GUI::CheckBox>(TRY("Sample all layers"_string)));
51 sample_checkbox->set_checked(m_sample_all_layers);
52 sample_checkbox->on_checked = [this](bool value) {
53 m_sample_all_layers = value;
54 };
55 m_properties_widget = properties_widget;
56 }
57
58 return m_properties_widget.ptr();
59}
60
61}