From 70a42c4c770e0514bee658c293669c1558296dcb Mon Sep 17 00:00:00 2001 From: David Capello Date: Thu, 10 Mar 2022 16:08:56 -0300 Subject: [PATCH] Add WheelAction to change InkType (related to #3195) Mockup contributed here: https://community.aseprite.org/t/2468/10 --- src/app/tools/ink_type.h | 4 +++ src/app/ui/editor/dragging_value_state.cpp | 4 +++ src/app/ui/editor/dragging_value_state.h | 2 ++ .../ui/editor/state_with_wheel_behavior.cpp | 26 +++++++++++++++++++ src/app/ui/editor/state_with_wheel_behavior.h | 2 ++ src/app/ui/key.h | 1 + src/app/ui/keyboard_shortcuts.cpp | 1 + 7 files changed, 40 insertions(+) diff --git a/src/app/tools/ink_type.h b/src/app/tools/ink_type.h index 09813a8fb..f743005cc 100644 --- a/src/app/tools/ink_type.h +++ b/src/app/tools/ink_type.h @@ -1,4 +1,5 @@ // Aseprite +// Copyright (C) 2022 Igara Studio S.A. // Copyright (C) 2001-2015 David Capello // // This program is distributed under the terms of @@ -20,6 +21,9 @@ namespace tools { COPY_COLOR = 2, LOCK_ALPHA = 3, SHADING = 4, + + FIRST = DEFAULT, + LAST = SHADING, }; inline bool inkHasOpacity(InkType inkType) { diff --git a/src/app/ui/editor/dragging_value_state.cpp b/src/app/ui/editor/dragging_value_state.cpp index 6e68c8cf7..4939a43ab 100644 --- a/src/app/ui/editor/dragging_value_state.cpp +++ b/src/app/ui/editor/dragging_value_state.cpp @@ -35,6 +35,7 @@ DraggingValueState::DraggingValueState(Editor* editor, const Keys& keys) , m_initialScroll(StateWithWheelBehavior::initialScroll(editor)) , m_initialZoom(StateWithWheelBehavior::initialZoom(editor)) , m_initialFrame(StateWithWheelBehavior::initialFrame(editor)) + , m_initialInkType(StateWithWheelBehavior::initialInkType(editor)) , m_initialInkOpacity(StateWithWheelBehavior::initialInkOpacity(editor)) , m_initialCelOpacity(StateWithWheelBehavior::initialCelOpacity(editor)) , m_initialLayerOpacity(StateWithWheelBehavior::initialLayerOpacity(editor)) @@ -96,6 +97,9 @@ bool DraggingValueState::onMouseMove(Editor* editor, MouseMessage* msg) // TODO we should change the direction of the wheel // information from the laf layer } + else if (key->wheelAction() == WheelAction::InkType) { + preciseWheel = false; + } processWheelAction(editor, key->wheelAction(), diff --git a/src/app/ui/editor/dragging_value_state.h b/src/app/ui/editor/dragging_value_state.h index 873ca39f9..727fe6af8 100644 --- a/src/app/ui/editor/dragging_value_state.h +++ b/src/app/ui/editor/dragging_value_state.h @@ -41,6 +41,7 @@ namespace app { render::Zoom initialZoom(Editor* editor) const override { return m_initialZoom; } doc::frame_t initialFrame(Editor* editor) const override { return m_initialFrame; } doc::layer_t initialLayer(Editor* editor) const override { return m_initialLayer; } + tools::InkType initialInkType(Editor* editor) const override { return m_initialInkType; } int initialInkOpacity(Editor* editor) const override { return m_initialInkOpacity; } int initialCelOpacity(Editor* editor) const override { return m_initialCelOpacity; } int initialLayerOpacity(Editor* editor) const override { return m_initialLayerOpacity; } @@ -60,6 +61,7 @@ namespace app { render::Zoom m_initialZoom; doc::frame_t m_initialFrame; doc::layer_t m_initialLayer; + tools::InkType m_initialInkType; int m_initialInkOpacity; int m_initialCelOpacity; int m_initialLayerOpacity; diff --git a/src/app/ui/editor/state_with_wheel_behavior.cpp b/src/app/ui/editor/state_with_wheel_behavior.cpp index 1022e7a3b..009309e28 100644 --- a/src/app/ui/editor/state_with_wheel_behavior.cpp +++ b/src/app/ui/editor/state_with_wheel_behavior.cpp @@ -20,6 +20,7 @@ #include "app/tools/active_tool.h" #include "app/tools/tool_box.h" #include "app/ui/color_bar.h" +#include "app/ui/context_bar.h" #include "app/ui/editor/editor.h" #include "app/ui/keyboard_shortcuts.h" #include "app/ui/toolbar.h" @@ -375,6 +376,24 @@ void StateWithWheelBehavior::processWheelAction( break; } + case WheelAction::InkType: { + int ink = int(initialInkType(editor)); + int deltaInk = int(dz); + if (preciseWheel) { + if (dz < 0.0) + deltaInk = +1; + else if (dz > 0.0) + deltaInk = -1; + } + ink += deltaInk; + ink = base::clamp(ink, + int(tools::InkType::FIRST), + int(tools::InkType::LAST)); + + App::instance()->contextBar()->setInkType(tools::InkType(ink)); + break; + } + case WheelAction::InkOpacity: { int opacity = initialInkOpacity(editor); adjust_value(preciseWheel, dz, opacity, 0, 255); @@ -619,6 +638,13 @@ doc::layer_t StateWithWheelBehavior::initialLayer(Editor* editor) const return doc::find_layer_index(browsableLayers(editor), editor->layer()); } +tools::InkType StateWithWheelBehavior::initialInkType(Editor* editor) const +{ + tools::Tool* tool = getActiveTool(); + auto& toolPref = Preferences::instance().tool(tool); + return toolPref.ink(); +} + int StateWithWheelBehavior::initialInkOpacity(Editor* editor) const { tools::Tool* tool = getActiveTool(); diff --git a/src/app/ui/editor/state_with_wheel_behavior.h b/src/app/ui/editor/state_with_wheel_behavior.h index f13a09b19..95b97b9c7 100644 --- a/src/app/ui/editor/state_with_wheel_behavior.h +++ b/src/app/ui/editor/state_with_wheel_behavior.h @@ -10,6 +10,7 @@ #pragma once #include "app/color.h" +#include "app/tools/ink_type.h" #include "app/ui/editor/editor_state.h" #include "app/ui/key.h" #include "doc/frame.h" @@ -54,6 +55,7 @@ namespace app { virtual render::Zoom initialZoom(Editor* editor) const; virtual doc::frame_t initialFrame(Editor* editor) const; virtual doc::layer_t initialLayer(Editor* editor) const; + virtual tools::InkType initialInkType(Editor* editor) const; virtual int initialInkOpacity(Editor* editor) const; virtual int initialCelOpacity(Editor* editor) const; virtual int initialLayerOpacity(Editor* editor) const; diff --git a/src/app/ui/key.h b/src/app/ui/key.h index d6a7d883a..582eff0f2 100644 --- a/src/app/ui/key.h +++ b/src/app/ui/key.h @@ -83,6 +83,7 @@ namespace app { ToolSameGroup, ToolOtherGroup, Layer, + InkType, InkOpacity, LayerOpacity, CelOpacity, diff --git a/src/app/ui/keyboard_shortcuts.cpp b/src/app/ui/keyboard_shortcuts.cpp index 17a99e482..ea7c89b98 100644 --- a/src/app/ui/keyboard_shortcuts.cpp +++ b/src/app/ui/keyboard_shortcuts.cpp @@ -104,6 +104,7 @@ namespace { { "ToolSameGroup" , "Change Tool (same group)" , Vec(8.0, 0.0) }, { "ToolOtherGroup" , "Change Tool" , Vec(0.0, -8.0) }, { "Layer" , "Change Layer" , Vec(0.0, 8.0) }, + { "InkType" , "Change Ink Type" , Vec(0.0, -16.0) }, { "InkOpacity" , "Change Ink Opacity" , Vec(0.0, 1.0) }, { "LayerOpacity" , "Change Layer Opacity" , Vec(0.0, 1.0) }, { "CelOpacity" , "Change Cel Opacity" , Vec(0.0, 1.0) },