From aaf49be654322af7e630bbeca25b5b4f85932679 Mon Sep 17 00:00:00 2001 From: David Capello Date: Fri, 27 Nov 2015 01:35:31 -0300 Subject: [PATCH] Add commands to change ink type (#787) By default there are no shortcuts to change the ink type. --- data/gui.xml | 5 ++ src/app/CMakeLists.txt | 2 + src/app/commands/cmd_set_ink_type.cpp | 79 +++++++++++++++++++++++++++ src/app/commands/commands_list.h | 1 + src/app/tools/ink_type.cpp | 30 ++++++++++ src/app/tools/ink_type.h | 4 ++ src/app/ui/context_bar.cpp | 57 ++++++++++--------- src/app/ui/context_bar.h | 3 + 8 files changed, 155 insertions(+), 26 deletions(-) create mode 100644 src/app/commands/cmd_set_ink_type.cpp create mode 100644 src/app/tools/ink_type.cpp diff --git a/data/gui.xml b/data/gui.xml index e1738d0b4..a464f843e 100644 --- a/data/gui.xml +++ b/data/gui.xml @@ -368,6 +368,11 @@ + + + + + diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt index dac5aa067..c75ecaf40 100644 --- a/src/app/CMakeLists.txt +++ b/src/app/CMakeLists.txt @@ -243,6 +243,7 @@ add_library(app-lib commands/cmd_save_palette.cpp commands/cmd_scroll.cpp commands/cmd_set_color_selector.cpp + commands/cmd_set_ink_type.cpp commands/cmd_set_loop_section.cpp commands/cmd_set_palette.cpp commands/cmd_set_palette_entry_size.cpp @@ -315,6 +316,7 @@ add_library(app-lib shell.cpp snap_to_grid.cpp thumbnail_generator.cpp + tools/ink_type.cpp tools/intertwine.cpp tools/pick_ink.cpp tools/point_shape.cpp diff --git a/src/app/commands/cmd_set_ink_type.cpp b/src/app/commands/cmd_set_ink_type.cpp new file mode 100644 index 000000000..b53774c3d --- /dev/null +++ b/src/app/commands/cmd_set_ink_type.cpp @@ -0,0 +1,79 @@ +// Aseprite +// Copyright (C) 2001-2015 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/commands/command.h" +#include "app/commands/commands.h" +#include "app/commands/params.h" +#include "app/tools/ink_type.h" +#include "app/ui/context_bar.h" +#include "app/ui/main_window.h" + +namespace app { + +class SetInkTypeCommand : public Command { +public: + SetInkTypeCommand(); + Command* clone() const override { return new SetInkTypeCommand(*this); } + +protected: + void onLoadParams(const Params& params) override; + void onExecute(Context* context) override; + std::string onGetFriendlyName() const override; + +private: + tools::InkType m_type; +}; + +SetInkTypeCommand::SetInkTypeCommand() + : Command("SetInkType", + "Set Ink Type", + CmdUIOnlyFlag) + , m_type(tools::InkType::DEFAULT) +{ +} + +void SetInkTypeCommand::onLoadParams(const Params& params) +{ + std::string typeStr = params.get("type"); + if (typeStr == "simple") + m_type = tools::InkType::SIMPLE; + else if (typeStr == "alpha-compositing") + m_type = tools::InkType::ALPHA_COMPOSITING; + else if (typeStr == "copy-color") + m_type = tools::InkType::COPY_COLOR; + else if (typeStr == "lock-alpha") + m_type = tools::InkType::LOCK_ALPHA; + else if (typeStr == "shading") + m_type = tools::InkType::SHADING; + else + m_type = tools::InkType::DEFAULT; +} + +void SetInkTypeCommand::onExecute(Context* context) +{ + App::instance() + ->getMainWindow() + ->getContextBar() + ->setInkType(m_type); +} + +std::string SetInkTypeCommand::onGetFriendlyName() const +{ + return "Set Ink Type: " + tools::ink_type_to_string(m_type); +} + +Command* CommandFactory::createSetInkTypeCommand() +{ + return new SetInkTypeCommand; +} + +} // namespace app diff --git a/src/app/commands/commands_list.h b/src/app/commands/commands_list.h index 0d488ce7a..fb778f045 100644 --- a/src/app/commands/commands_list.h +++ b/src/app/commands/commands_list.h @@ -105,6 +105,7 @@ FOR_EACH_COMMAND(SavePalette) FOR_EACH_COMMAND(Scroll) FOR_EACH_COMMAND(SelectionAsGrid) FOR_EACH_COMMAND(SetColorSelector) +FOR_EACH_COMMAND(SetInkType) FOR_EACH_COMMAND(SetLoopSection) FOR_EACH_COMMAND(SetPalette) FOR_EACH_COMMAND(SetPaletteEntrySize) diff --git a/src/app/tools/ink_type.cpp b/src/app/tools/ink_type.cpp new file mode 100644 index 000000000..577cdabdc --- /dev/null +++ b/src/app/tools/ink_type.cpp @@ -0,0 +1,30 @@ +// Aseprite +// Copyright (C) 2001-2015 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/tools/ink_type.h" + +namespace app { +namespace tools { + +std::string ink_type_to_string(InkType inkType) +{ + switch (inkType) { + case tools::InkType::SIMPLE: return "Simple Ink"; + case tools::InkType::ALPHA_COMPOSITING: return "Alpha Compositing"; + case tools::InkType::COPY_COLOR: return "Copy Color+Alpha"; + case tools::InkType::LOCK_ALPHA: return "Lock Alpha"; + case tools::InkType::SHADING: return "Shading"; + } + return "Unknown"; +} + +} // namespace tools +} // namespace app diff --git a/src/app/tools/ink_type.h b/src/app/tools/ink_type.h index e5f11618c..7d92b4366 100644 --- a/src/app/tools/ink_type.h +++ b/src/app/tools/ink_type.h @@ -9,6 +9,8 @@ #define APP_TOOLS_INK_TYPE_H_INCLUDED #pragma once +#include + namespace app { namespace tools { @@ -26,6 +28,8 @@ namespace tools { inkType == InkType::LOCK_ALPHA); } + std::string ink_type_to_string(InkType inkType); + } // namespace tools } // namespace app diff --git a/src/app/ui/context_bar.cpp b/src/app/ui/context_bar.cpp index 67cf0f7a0..86408c760 100644 --- a/src/app/ui/context_bar.cpp +++ b/src/app/ui/context_bar.cpp @@ -341,6 +341,21 @@ public: } void setInkType(InkType inkType) { + Preferences& pref = Preferences::instance(); + + if (pref.shared.shareInk()) { + for (Tool* tool : *App::instance()->getToolBox()) + pref.tool(tool).ink(inkType); + } + else { + Tool* tool = App::instance()->activeTool(); + pref.tool(tool).ink(inkType); + } + + m_owner->updateForCurrentTool(); + } + + void setInkTypeIcon(InkType inkType) { SkinTheme* theme = SkinTheme::instance(); SkinPartPtr part = theme->parts.inkSimple(); @@ -363,11 +378,11 @@ protected: Menu menu; MenuItem - simple("Simple Ink"), - alphacompo("Alpha Compositing"), - copycolor("Copy Color+Alpha"), - lockalpha("Lock Alpha"), - shading("Shading"), + simple(tools::ink_type_to_string(tools::InkType::SIMPLE)), + alphacompo(tools::ink_type_to_string(tools::InkType::ALPHA_COMPOSITING)), + copycolor(tools::ink_type_to_string(tools::InkType::COPY_COLOR)), + lockalpha(tools::ink_type_to_string(tools::InkType::LOCK_ALPHA)), + shading(tools::ink_type_to_string(tools::InkType::SHADING)), alltools("Same in all Tools"); menu.addChild(&simple); menu.addChild(&alphacompo); @@ -387,11 +402,11 @@ protected: } alltools.setSelected(Preferences::instance().shared.shareInk()); - simple.Click.connect(Bind(&InkTypeField::selectInk, this, InkType::SIMPLE)); - alphacompo.Click.connect(Bind(&InkTypeField::selectInk, this, InkType::ALPHA_COMPOSITING)); - copycolor.Click.connect(Bind(&InkTypeField::selectInk, this, InkType::COPY_COLOR)); - lockalpha.Click.connect(Bind(&InkTypeField::selectInk, this, InkType::LOCK_ALPHA)); - shading.Click.connect(Bind(&InkTypeField::selectInk, this, InkType::SHADING)); + simple.Click.connect(Bind(&InkTypeField::setInkType, this, InkType::SIMPLE)); + alphacompo.Click.connect(Bind(&InkTypeField::setInkType, this, InkType::ALPHA_COMPOSITING)); + copycolor.Click.connect(Bind(&InkTypeField::setInkType, this, InkType::COPY_COLOR)); + lockalpha.Click.connect(Bind(&InkTypeField::setInkType, this, InkType::LOCK_ALPHA)); + shading.Click.connect(Bind(&InkTypeField::setInkType, this, InkType::SHADING)); alltools.Click.connect(Bind(&InkTypeField::onSameInAllTools, this)); menu.showPopup(gfx::Point(bounds.x, bounds.y+bounds.h)); @@ -399,21 +414,6 @@ protected: deselectItems(); } - void selectInk(InkType inkType) { - Preferences& pref = Preferences::instance(); - - if (pref.shared.shareInk()) { - for (Tool* tool : *App::instance()->getToolBox()) - pref.tool(tool).ink(inkType); - } - else { - Tool* tool = App::instance()->activeTool(); - pref.tool(tool).ink(inkType); - } - - m_owner->updateForCurrentTool(); - } - void onSameInAllTools() { Preferences& pref = Preferences::instance(); bool newState = !pref.shared.shareInk(); @@ -1535,7 +1535,7 @@ void ContextBar::updateForTool(tools::Tool* tool) m_stopAtGrid->setSelected( toolPref->floodfill.stopAtGrid() == app::gen::StopAtGrid::IF_VISIBLE ? true: false); - m_inkType->setInkType(toolPref->ink()); + m_inkType->setInkTypeIcon(toolPref->ink()); m_inkOpacity->setTextf("%d", toolPref->opacity()); hasInkWithOpacity = @@ -1806,4 +1806,9 @@ void ContextBar::reverseShadeColors() m_inkShades->reverseShadeColors(); } +void ContextBar::setInkType(tools::InkType type) +{ + m_inkType->setInkType(type); +} + } // namespace app diff --git a/src/app/ui/context_bar.h b/src/app/ui/context_bar.h index ead11725a..56c80b1a0 100644 --- a/src/app/ui/context_bar.h +++ b/src/app/ui/context_bar.h @@ -10,6 +10,7 @@ #pragma once #include "app/pref/preferences.h" +#include "app/tools/ink_type.h" #include "app/tools/selection_mode.h" #include "app/ui/context_bar_observer.h" #include "base/connection.h" @@ -73,6 +74,8 @@ namespace app { doc::Remap* createShadeRemap(bool left); void reverseShadeColors(); + void setInkType(tools::InkType type); + // Signals Signal0 BrushChange;