[aseprite] 77/196: New command to add foreground/background color in the palette

Tobias Hansen thansen at moszumanska.debian.org
Wed Apr 20 18:50:03 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 f626837cb5dc18a74191a38b46f8754c7d151de3
Author: David Capello <davidcapello at gmail.com>
Date:   Thu Mar 17 10:47:50 2016 -0300

    New command to add foreground/background color in the palette
---
 data/gui.xml                       |   6 ++
 src/app/CMakeLists.txt             |   1 +
 src/app/commands/cmd_add_color.cpp | 156 +++++++++++++++++++++++++++++++++++++
 src/app/commands/commands_list.h   |   3 +-
 src/app/ui/color_bar.cpp           |  53 ++-----------
 5 files changed, 170 insertions(+), 49 deletions(-)

diff --git a/data/gui.xml b/data/gui.xml
index 8c53f21..9b71f13 100644
--- a/data/gui.xml
+++ b/data/gui.xml
@@ -392,6 +392,12 @@
       <key command="LoadPalette" />
       <key command="SavePalette" />
       <key command="ColorQuantization" />
+      <key command="AddColor">
+	<param name="source" value="fg" />
+      </key>
+      <key command="AddColor">
+        <param name="source" value="bg" />
+      </key>
     </commands>
 
     <!-- Keyboard shortcuts to select tools -->
diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt
index a302b20..5d3f1a5 100644
--- a/src/app/CMakeLists.txt
+++ b/src/app/CMakeLists.txt
@@ -162,6 +162,7 @@ add_library(app-lib
   color_picker.cpp
   color_utils.cpp
   commands/cmd_about.cpp
+  commands/cmd_add_color.cpp
   commands/cmd_advanced_mode.cpp
   commands/cmd_background_from_layer.cpp
   commands/cmd_cancel.cpp
diff --git a/src/app/commands/cmd_add_color.cpp b/src/app/commands/cmd_add_color.cpp
new file mode 100644
index 0000000..17c4f37
--- /dev/null
+++ b/src/app/commands/cmd_add_color.cpp
@@ -0,0 +1,156 @@
+// 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.
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "app/app.h"
+#include "app/cmd/set_palette.h"
+#include "app/commands/command.h"
+#include "app/commands/params.h"
+#include "app/console.h"
+#include "app/context.h"
+#include "app/context_access.h"
+#include "app/modules/palettes.h"
+#include "app/transaction.h"
+#include "app/ui/color_bar.h"
+#include "app/ui/context_bar.h"
+#include "app/ui/editor/editor.h"
+#include "app/ui/main_window.h"
+#include "doc/palette.h"
+
+namespace app {
+
+class AddColorCommand : public Command {
+public:
+  enum class Source { Fg, Bg, Color };
+
+  AddColorCommand();
+
+protected:
+  void onLoadParams(const Params& params) override;
+  bool onEnabled(Context* ctx) override;
+  void onExecute(Context* ctx) override;
+  std::string onGetFriendlyName() const override;
+
+  Source m_source;
+  app::Color m_color;
+};
+
+AddColorCommand::AddColorCommand()
+  : Command("AddColor",
+            "Add Color",
+            CmdUIOnlyFlag)
+  , m_source(Source::Fg)
+{
+}
+
+void AddColorCommand::onLoadParams(const Params& params)
+{
+  std::string source = params.get("source");
+  if (source == "fg")
+    m_source = Source::Fg;
+  else if (source == "bg")
+    m_source = Source::Bg;
+  else
+    m_source = Source::Color;
+
+  if (m_source == Source::Color)
+    m_color = app::Color::fromString(params.get("color"));
+  else
+    m_color = app::Color::fromMask();
+}
+
+bool AddColorCommand::onEnabled(Context* ctx)
+{
+  return ctx->checkFlags(ContextFlags::ActiveDocumentIsWritable);
+}
+
+void AddColorCommand::onExecute(Context* ctx)
+{
+  app::Color appColor;
+
+  switch (m_source) {
+    case Source::Fg:
+      appColor = ColorBar::instance()->getFgColor();
+      break;
+    case Source::Bg:
+      appColor = ColorBar::instance()->getBgColor();
+      break;
+    case Source::Color:
+      appColor = m_color;
+      break;
+  }
+
+  try {
+    Palette* newPalette = get_current_palette(); // System current pal
+    color_t color = doc::rgba(
+      appColor.getRed(),
+      appColor.getGreen(),
+      appColor.getBlue(),
+      appColor.getAlpha());
+    int index = newPalette->findExactMatch(
+      appColor.getRed(),
+      appColor.getGreen(),
+      appColor.getBlue(),
+      appColor.getAlpha(), -1);
+
+    // It should be -1, because the user has pressed the warning
+    // button that is available only when the color isn't in the
+    // palette.
+    ASSERT(index < 0);
+    if (index >= 0)
+      return;
+
+    ContextWriter writer(ctx, 500);
+    Document* document(writer.document());
+    Sprite* sprite = writer.sprite();
+    if (!document || !sprite) {
+      ASSERT(false);
+      return;
+    }
+
+    newPalette->addEntry(color);
+    index = newPalette->size()-1;
+
+    if (document) {
+      frame_t frame = writer.frame();
+
+      Transaction transaction(writer.context(), "Add Color", ModifyDocument);
+      transaction.execute(new cmd::SetPalette(sprite, frame, newPalette));
+      transaction.commit();
+    }
+
+    set_current_palette(newPalette, true);
+    ui::Manager::getDefault()->invalidate();
+  }
+  catch (base::Exception& e) {
+    Console::showException(e);
+  }
+}
+
+std::string AddColorCommand::onGetFriendlyName() const
+{
+  std::string text = "Add ";
+
+  switch (m_source) {
+    case Source::Fg: text += "Foreground"; break;
+    case Source::Bg: text += "Background"; break;
+    case Source::Color: text += "Specific"; break;
+  }
+
+  text += " Color to Palette";
+  return text;
+}
+
+Command* CommandFactory::createAddColorCommand()
+{
+  return new AddColorCommand;
+}
+
+} // namespace app
diff --git a/src/app/commands/commands_list.h b/src/app/commands/commands_list.h
index 7a685b1..684802e 100644
--- a/src/app/commands/commands_list.h
+++ b/src/app/commands/commands_list.h
@@ -1,11 +1,12 @@
 // 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
 // published by the Free Software Foundation.
 
 FOR_EACH_COMMAND(About)
+FOR_EACH_COMMAND(AddColor)
 FOR_EACH_COMMAND(AdvancedMode)
 FOR_EACH_COMMAND(AutocropSprite)
 FOR_EACH_COMMAND(BackgroundFromLayer)
diff --git a/src/app/ui/color_bar.cpp b/src/app/ui/color_bar.cpp
index 8fbf0ff..c353ff8 100644
--- a/src/app/ui/color_bar.cpp
+++ b/src/app/ui/color_bar.cpp
@@ -997,55 +997,12 @@ void ColorBar::onCancel(Context* ctx)
 
 void ColorBar::onFixWarningClick(ColorButton* colorButton, ui::Button* warningIcon)
 {
-  try {
-    Palette* newPalette = get_current_palette(); // System current pal
-    app::Color appColor = colorButton->getColor();
-    color_t color = doc::rgba(
-      appColor.getRed(),
-      appColor.getGreen(),
-      appColor.getBlue(),
-      appColor.getAlpha());
-    int index = newPalette->findExactMatch(
-      appColor.getRed(),
-      appColor.getGreen(),
-      appColor.getBlue(),
-      appColor.getAlpha(), -1);
-
-    // It should be -1, because the user has pressed the warning
-    // button that is available only when the color isn't in the
-    // palette.
-    ASSERT(index < 0);
-    if (index >= 0)
-      return;
-
-    ContextWriter writer(UIContext::instance(), 500);
-    Document* document(writer.document());
-    Sprite* sprite = writer.sprite();
-    if (!document || !sprite) {
-      ASSERT(false);
-      return;
-    }
-
-    newPalette->addEntry(color);
-    index = newPalette->size()-1;
-
-    if (document) {
-      frame_t frame = writer.frame();
+  Command* command = CommandsModule::instance()->getCommandByName(CommandId::AddColor);
+  Params params;
+  params.set("source", "color");
+  params.set("color", colorButton->getColor().toString().c_str());
 
-      Transaction transaction(writer.context(), "Add palette entry", ModifyDocument);
-      transaction.execute(new cmd::SetPalette(sprite, frame, newPalette));
-      transaction.commit();
-    }
-
-    set_current_palette(newPalette, true);
-    ui::Manager::getDefault()->invalidate();
-
-    warningIcon->setVisible(false);
-    warningIcon->parent()->layout();
-  }
-  catch (base::Exception& e) {
-    Console::showException(e);
-  }
+  UIContext::instance()->executeCommand(command, params);
 }
 
 void ColorBar::updateWarningIcon(const app::Color& color, ui::Button* warningIcon)

-- 
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