summaryrefslogtreecommitdiff
path: root/Userland/Applications
diff options
context:
space:
mode:
authorkleines Filmröllchen <filmroellchen@serenityos.org>2022-08-16 22:43:11 +0200
committerLinus Groh <mail@linusgroh.de>2022-09-03 16:57:37 +0100
commitfe88fd22fa0dae51ae0b5d08e3bf99d8af9ebc55 (patch)
treecfd558fb10da84f98e2013c3911fc09fe605e6a3 /Userland/Applications
parent8b60305698f1d2fbd7083a9b370ea9af06133f68 (diff)
downloadserenity-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.txt1
-rw-r--r--Userland/Applications/PixelPaint/HistogramWidget.cpp40
-rw-r--r--Userland/Applications/PixelPaint/HistogramWidget.h15
-rw-r--r--Userland/Applications/PixelPaint/ScopeWidget.cpp41
-rw-r--r--Userland/Applications/PixelPaint/ScopeWidget.h34
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;
+};
+
+}