diff options
author | kleines Filmröllchen <filmroellchen@serenityos.org> | 2022-08-16 22:43:11 +0200 |
---|---|---|
committer | Linus Groh <mail@linusgroh.de> | 2022-09-03 16:57:37 +0100 |
commit | fe88fd22fa0dae51ae0b5d08e3bf99d8af9ebc55 (patch) | |
tree | cfd558fb10da84f98e2013c3911fc09fe605e6a3 /Userland/Applications | |
parent | 8b60305698f1d2fbd7083a9b370ea9af06133f68 (diff) | |
download | serenity-fe88fd22fa0dae51ae0b5d08e3bf99d8af9ebc55.zip |
PixelPaint: Extract common scope code into a generic ScopeWidget
When we add more scopes, this will facilitate code sharing.
Diffstat (limited to 'Userland/Applications')
-rw-r--r-- | Userland/Applications/PixelPaint/CMakeLists.txt | 1 | ||||
-rw-r--r-- | Userland/Applications/PixelPaint/HistogramWidget.cpp | 40 | ||||
-rw-r--r-- | Userland/Applications/PixelPaint/HistogramWidget.h | 15 | ||||
-rw-r--r-- | Userland/Applications/PixelPaint/ScopeWidget.cpp | 41 | ||||
-rw-r--r-- | Userland/Applications/PixelPaint/ScopeWidget.h | 34 |
5 files changed, 86 insertions, 45 deletions
diff --git a/Userland/Applications/PixelPaint/CMakeLists.txt b/Userland/Applications/PixelPaint/CMakeLists.txt index 55596694c4..48525211e7 100644 --- a/Userland/Applications/PixelPaint/CMakeLists.txt +++ b/Userland/Applications/PixelPaint/CMakeLists.txt @@ -52,6 +52,7 @@ set(SOURCES ProjectLoader.cpp ResizeImageDialog.cpp ResizeImageDialogGML.h + ScopeWidget.cpp Selection.cpp ToolPropertiesWidget.cpp ToolboxWidget.cpp diff --git a/Userland/Applications/PixelPaint/HistogramWidget.cpp b/Userland/Applications/PixelPaint/HistogramWidget.cpp index 6a9e7de66b..fb940caf76 100644 --- a/Userland/Applications/PixelPaint/HistogramWidget.cpp +++ b/Userland/Applications/PixelPaint/HistogramWidget.cpp @@ -16,25 +16,6 @@ REGISTER_WIDGET(PixelPaint, HistogramWidget); namespace PixelPaint { -HistogramWidget::~HistogramWidget() -{ - if (m_image) - m_image->remove_client(*this); -} - -void HistogramWidget::set_image(Image* image) -{ - if (m_image == image) - return; - if (m_image) - m_image->remove_client(*this); - m_image = image; - if (m_image) - m_image->add_client(*this); - - (void)rebuild_histogram_data(); -} - ErrorOr<void> HistogramWidget::rebuild_histogram_data() { if (!m_image) @@ -81,16 +62,15 @@ ErrorOr<void> HistogramWidget::rebuild_histogram_data() } // Scale the frequency values to fit the widgets height. - m_widget_height = height(); + auto widget_height = height(); for (int i = 0; i < 256; i++) { - m_data.red[i] = m_data.red[i] != 0 ? (static_cast<float>(m_data.red[i]) / max_color_frequency) * m_widget_height : 0; - m_data.green[i] = m_data.green[i] != 0 ? (static_cast<float>(m_data.green[i]) / max_color_frequency) * m_widget_height : 0; - m_data.blue[i] = m_data.blue[i] != 0 ? (static_cast<float>(m_data.blue[i]) / max_color_frequency) * m_widget_height : 0; - m_data.brightness[i] = m_data.brightness[i] != 0 ? (static_cast<float>(m_data.brightness[i]) / max_brightness_frequency) * m_widget_height : 0; + m_data.red[i] = m_data.red[i] != 0 ? (static_cast<float>(m_data.red[i]) / max_color_frequency) * widget_height : 0; + m_data.green[i] = m_data.green[i] != 0 ? (static_cast<float>(m_data.green[i]) / max_color_frequency) * widget_height : 0; + m_data.blue[i] = m_data.blue[i] != 0 ? (static_cast<float>(m_data.blue[i]) / max_color_frequency) * widget_height : 0; + m_data.brightness[i] = m_data.brightness[i] != 0 ? (static_cast<float>(m_data.brightness[i]) / max_brightness_frequency) * widget_height : 0; } - update(); return {}; } @@ -102,7 +82,7 @@ void HistogramWidget::paint_event(GUI::PaintEvent& event) if (!m_image) return; - int bottom_line = m_widget_height - 1; + int bottom_line = height() - 1; float step_width = static_cast<float>(width()) / 256; Gfx::Path brightness_path; @@ -153,14 +133,6 @@ void HistogramWidget::paint_event(GUI::PaintEvent& event) void HistogramWidget::image_changed() { (void)rebuild_histogram_data(); -} - -void HistogramWidget::set_color_at_mouseposition(Color color) -{ - if (m_color_at_mouseposition == color) - return; - - m_color_at_mouseposition = color; update(); } diff --git a/Userland/Applications/PixelPaint/HistogramWidget.h b/Userland/Applications/PixelPaint/HistogramWidget.h index c50ff90d4f..6e581d1502 100644 --- a/Userland/Applications/PixelPaint/HistogramWidget.h +++ b/Userland/Applications/PixelPaint/HistogramWidget.h @@ -7,21 +7,17 @@ #pragma once #include "Image.h" -#include <LibGUI/AbstractScrollableWidget.h> +#include "ScopeWidget.h" namespace PixelPaint { class HistogramWidget final - : public GUI::Frame - , ImageClient { + : public ScopeWidget { C_OBJECT(HistogramWidget); public: - virtual ~HistogramWidget() override; - - void set_image(Image*); - void image_changed(); - void set_color_at_mouseposition(Color); + virtual ~HistogramWidget() = default; + virtual void image_changed() override; private: HistogramWidget() = default; @@ -29,9 +25,6 @@ private: virtual void paint_event(GUI::PaintEvent&) override; ErrorOr<void> rebuild_histogram_data(); - int m_widget_height = 0; - Color m_color_at_mouseposition = Color::Transparent; - RefPtr<Image> m_image; struct HistogramData { Vector<int> red; diff --git a/Userland/Applications/PixelPaint/ScopeWidget.cpp b/Userland/Applications/PixelPaint/ScopeWidget.cpp new file mode 100644 index 0000000000..afa69a7965 --- /dev/null +++ b/Userland/Applications/PixelPaint/ScopeWidget.cpp @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2022, kleines Filmröllchen <filmroellchen@serenityos.org> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include "ScopeWidget.h" +#include "Layer.h" + +namespace PixelPaint { + +ScopeWidget::~ScopeWidget() +{ + if (m_image) + m_image->remove_client(*this); +} + +void ScopeWidget::set_image(Image* image) +{ + if (m_image == image) + return; + if (m_image) + m_image->remove_client(*this); + m_image = image; + if (m_image) + m_image->add_client(*this); + + image_changed(); + update(); +} + +void ScopeWidget::set_color_at_mouseposition(Color color) +{ + if (m_color_at_mouseposition == color) + return; + + m_color_at_mouseposition = color; + update(); +} + +} diff --git a/Userland/Applications/PixelPaint/ScopeWidget.h b/Userland/Applications/PixelPaint/ScopeWidget.h new file mode 100644 index 0000000000..527320d2ff --- /dev/null +++ b/Userland/Applications/PixelPaint/ScopeWidget.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2022, kleines Filmröllchen <filmroellchen@serenityos.org> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include "Image.h" +#include <LibCore/Object.h> +#include <LibGUI/Frame.h> + +namespace PixelPaint { + +class ScopeWidget + : public GUI::Frame + , public ImageClient { + C_OBJECT_ABSTRACT(ScopeWidget); + +public: + virtual ~ScopeWidget() override; + + void set_image(Image*); + virtual void image_changed() = 0; + void set_color_at_mouseposition(Color); + +protected: + virtual void paint_event(GUI::PaintEvent&) override = 0; + + Color m_color_at_mouseposition = Color::Transparent; + RefPtr<Image> m_image; +}; + +} |