[aseprite] 83/196: Add app::IColorSource interface to get pixels from widgets from mouse pos
Tobias Hansen
thansen at moszumanska.debian.org
Wed Apr 20 18:50:04 UTC 2016
This is an automated email from the git hooks/post-receive script.
thansen pushed a commit to branch master
in repository aseprite.
commit 07b67a66f7951d1d55a67434ada0e0ddb0582658
Author: David Capello <davidcapello at gmail.com>
Date: Thu Mar 17 17:16:35 2016 -0300
Add app::IColorSource interface to get pixels from widgets from mouse pos
This is consumed by ColorButton which can be dragged to use a eyedropper
in different widgets.
---
src/app/ui/color_button.cpp | 29 +++++++++--------------------
src/app/ui/color_button.h | 7 ++++++-
src/app/ui/color_source.h | 25 +++++++++++++++++++++++++
src/app/ui/editor/editor.cpp | 15 +++++++++++++++
src/app/ui/editor/editor.h | 7 ++++++-
src/app/ui/palette_view.cpp | 10 +---------
src/app/ui/palette_view.h | 11 ++++++-----
7 files changed, 68 insertions(+), 36 deletions(-)
diff --git a/src/app/ui/color_button.cpp b/src/app/ui/color_button.cpp
index edb87e9..59e1976 100644
--- a/src/app/ui/color_button.cpp
+++ b/src/app/ui/color_button.cpp
@@ -13,7 +13,6 @@
#include "app/app.h"
#include "app/color.h"
-#include "app/color_picker.h"
#include "app/color_utils.h"
#include "app/modules/editors.h"
#include "app/modules/gfx.h"
@@ -94,6 +93,12 @@ void ColorButton::setColor(const app::Color& color)
invalidate();
}
+app::Color ColorButton::getColorByPosition(const gfx::Point& pos)
+{
+ // Ignore the position
+ return m_color;
+}
+
bool ColorButton::onProcessMessage(Message* msg)
{
switch (msg->type()) {
@@ -118,25 +123,9 @@ bool ColorButton::onProcessMessage(Message* msg)
app::Color color = m_color;
if (picked && picked != this) {
- // Pick a color from another color-button
- if (ColorButton* pickedColBut = dynamic_cast<ColorButton*>(picked)) {
- color = pickedColBut->getColor();
- }
- // Pick a color from the color-bar
- else if (picked->type() == palette_view_type()) {
- color = ((PaletteView*)picked)->getColorByPosition(mousePos);
- }
- // Pick a color from a editor
- else if (picked->type() == editor_type()) {
- Editor* editor = static_cast<Editor*>(picked);
- Site site = editor->getSite();
- if (site.sprite()) {
- gfx::Point editorPos = editor->screenToEditor(mousePos);
-
- ColorPicker picker;
- picker.pickColor(site, editorPos, ColorPicker::FromComposition);
- color = picker.color();
- }
+ // Pick a color from a IColorSource
+ if (IColorSource* colorSource = dynamic_cast<IColorSource*>(picked)) {
+ color = colorSource->getColorByPosition(mousePos);
}
}
diff --git a/src/app/ui/color_button.h b/src/app/ui/color_button.h
index 7507f28..5a6fe0d 100644
--- a/src/app/ui/color_button.h
+++ b/src/app/ui/color_button.h
@@ -10,6 +10,7 @@
#pragma once
#include "app/color.h"
+#include "app/ui/color_source.h"
#include "base/signal.h"
#include "doc/context_observer.h"
#include "doc/pixel_format.h"
@@ -19,7 +20,8 @@ namespace app {
class ColorPopup;
class ColorButton : public ui::ButtonBase
- , public doc::ContextObserver {
+ , public doc::ContextObserver
+ , public IColorSource {
public:
ColorButton(const app::Color& color, PixelFormat pixelFormat);
~ColorButton();
@@ -30,6 +32,9 @@ namespace app {
app::Color getColor() const;
void setColor(const app::Color& color);
+ // IColorSource
+ app::Color getColorByPosition(const gfx::Point& pos) override;
+
// Signals
base::Signal1<void, const app::Color&> Change;
diff --git a/src/app/ui/color_source.h b/src/app/ui/color_source.h
new file mode 100644
index 0000000..e02c851
--- /dev/null
+++ b/src/app/ui/color_source.h
@@ -0,0 +1,25 @@
+// Aseprite
+// Copyright (C) 2016 David Capello
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License version 2 as
+// published by the Free Software Foundation.
+
+#ifndef APP_UI_COLOR_SOURCE_H_INCLUDED
+#define APP_UI_COLOR_SOURCE_H_INCLUDED
+#pragma once
+
+#include "app/color.h"
+#include "gfx/point.h"
+
+namespace app {
+
+ class IColorSource {
+ public:
+ virtual ~IColorSource() { }
+ virtual app::Color getColorByPosition(const gfx::Point& pos) = 0;
+ };
+
+} // namespace app
+
+#endif
diff --git a/src/app/ui/editor/editor.cpp b/src/app/ui/editor/editor.cpp
index 7a6eab8..6bfcaeb 100644
--- a/src/app/ui/editor/editor.cpp
+++ b/src/app/ui/editor/editor.cpp
@@ -13,6 +13,7 @@
#include "app/app.h"
#include "app/color.h"
+#include "app/color_picker.h"
#include "app/color_utils.h"
#include "app/commands/commands.h"
#include "app/commands/params.h"
@@ -1201,6 +1202,20 @@ void Editor::updateContextBarFromModifiers()
}
}
+app::Color Editor::getColorByPosition(const gfx::Point& mousePos)
+{
+ Site site = getSite();
+ if (site.sprite()) {
+ gfx::Point editorPos = screenToEditor(mousePos);
+
+ ColorPicker picker;
+ picker.pickColor(site, editorPos, ColorPicker::FromComposition);
+ return picker.color();
+ }
+ else
+ return app::Color::fromMask();
+}
+
//////////////////////////////////////////////////////////////////////
// Message handler for the editor
diff --git a/src/app/ui/editor/editor.h b/src/app/ui/editor/editor.h
index e1d2f97..cc278d2 100644
--- a/src/app/ui/editor/editor.h
+++ b/src/app/ui/editor/editor.h
@@ -14,6 +14,7 @@
#include "app/document.h"
#include "app/pref/option.h"
#include "app/tools/selection_mode.h"
+#include "app/ui/color_source.h"
#include "app/ui/editor/brush_preview.h"
#include "app/ui/editor/editor_observers.h"
#include "app/ui/editor/editor_state.h"
@@ -60,7 +61,8 @@ namespace app {
};
class Editor : public ui::Widget,
- public doc::DocumentObserver {
+ public doc::DocumentObserver
+ , public IColorSource {
public:
enum EditorFlags {
kNoneFlag = 0,
@@ -220,6 +222,9 @@ namespace app {
AppRender& renderEngine() { return m_renderEngine; }
+ // IColorSource
+ app::Color getColorByPosition(const gfx::Point& pos) override;
+
protected:
bool onProcessMessage(ui::Message* msg) override;
void onSizeHint(ui::SizeHintEvent& ev) override;
diff --git a/src/app/ui/palette_view.cpp b/src/app/ui/palette_view.cpp
index 7a8a0d2..29abad1 100644
--- a/src/app/ui/palette_view.cpp
+++ b/src/app/ui/palette_view.cpp
@@ -50,16 +50,8 @@ namespace app {
using namespace ui;
using namespace app::skin;
-WidgetType palette_view_type()
-{
- static WidgetType type = kGenericWidget;
- if (type == kGenericWidget)
- type = register_widget_type();
- return type;
-}
-
PaletteView::PaletteView(bool editable, PaletteViewStyle style, PaletteViewDelegate* delegate, int boxsize)
- : Widget(palette_view_type())
+ : Widget(kGenericWidget)
, m_state(State::WAITING)
, m_editable(editable)
, m_style(style)
diff --git a/src/app/ui/palette_view.h b/src/app/ui/palette_view.h
index 409fbb0..8800eda 100644
--- a/src/app/ui/palette_view.h
+++ b/src/app/ui/palette_view.h
@@ -1,5 +1,5 @@
// Aseprite
-// Copyright (C) 2001-2015 David Capello
+// Copyright (C) 2001-2016 David Capello
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
@@ -10,6 +10,7 @@
#pragma once
#include "app/color.h"
+#include "app/ui/color_source.h"
#include "app/ui/marching_ants.h"
#include "base/connection.h"
#include "doc/palette_picks.h"
@@ -44,7 +45,8 @@ namespace app {
};
class PaletteView : public ui::Widget
- , public MarchingAnts {
+ , public MarchingAnts
+ , public IColorSource {
public:
enum PaletteViewStyle {
SelectOneColor,
@@ -68,7 +70,8 @@ namespace app {
void getSelectedEntries(doc::PalettePicks& entries) const;
int getSelectedEntriesCount() const;
- app::Color getColorByPosition(const gfx::Point& pos);
+ // IColorSource
+ app::Color getColorByPosition(const gfx::Point& pos) override;
int getBoxSize() const;
void setBoxSize(int boxsize);
@@ -154,8 +157,6 @@ namespace app {
bool m_copy;
};
- ui::WidgetType palette_view_type();
-
} // namespace app
#endif
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/aseprite.git
More information about the Pkg-games-commits
mailing list