Add Shift+F7 to toggle other layers visibility on Preview window

This commit is contained in:
David Capello 2023-07-19 10:56:16 -03:00
parent 32009723c5
commit 11644a7d16
8 changed files with 148 additions and 9 deletions

View File

@ -303,6 +303,12 @@
<key command="LayerOpacity"><param name="opacity" value="224" /></key>
<key command="LayerOpacity" shortcut="Shift+4"><param name="opacity" value="255" /></key>
<key command="ToggleOtherLayersOpacity" />
<key command="ToggleOtherLayersOpacity" shortcut="Shift+F7">
<param name="preview" value="true" />
<param name="checkedIfZero" value="true" />
</key>
<!-- Scroll to center -->
<key command="ScrollCenter" shortcut="Shift+Z" />
<key command="FitScreen" shortcut="Ctrl+0" mac="Cmd+0" />
@ -1017,7 +1023,14 @@
<item command="Timeline" text="@.view_timeline">
<param name="switch" value="true" />
</item>
<item command="TogglePreview" text="@.view_preview" />
<menu text="@.view_preview">
<item command="TogglePreview" text="@.view_preview" />
<separator />
<item command="ToggleOtherLayersOpacity" text="@.view_preview_hide_other_layers">
<param name="preview" value="true" />
<param name="checkedIfZero" value="true" />
</item>
</menu>
<item command="AdvancedMode" text="@.view_advanced_mode" />
<item command="FullscreenMode" text="@.view_full_screen_mode" />
<item command="FullscreenPreview" text="@.view_full_screen_preview" />

View File

@ -234,6 +234,7 @@
<option id="load_wintab_driver" type="bool" default="false" />
<option id="flash_layer" type="bool" default="false" />
<option id="nonactive_layers_opacity" type="int" default="255" />
<option id="nonactive_layers_opacity_preview" type="int" default="255" />
</section>
<section id="news">
<option id="cache_file" type="std::string" />

View File

@ -601,6 +601,8 @@ SwitchNonactiveLayersOpacity = Switch Nonactive Layers Opacity
SymmetryMode = Symmetry Mode
TiledMode = Tiled Mode
Timeline = Switch Timeline
ToggleOtherLayersOpacity = Toggle Other Layers Opacity
ToggleOtherLayersOpacity_PreviewEditor = Toggle Other Layers Opacity in Preview
TogglePlayAll = Play All Frames (Ignore Tags)
TogglePlayOnce = Play Once
TogglePlaySubtags = Play Subtags & Repetitions
@ -1350,6 +1352,7 @@ view_set_loop_section = Set &Loop Section
view_show_onion_skin = Show &Onion Skin
view_timeline = &Timeline
view_preview = Previe&w
view_preview_hide_other_layers = &Hide Other Layers
view_advanced_mode = &Advanced Mode
view_full_screen_mode = &Full Screen Mode
view_full_screen_preview = F&ull Screen Preview

View File

@ -330,6 +330,7 @@ if(ENABLE_UI)
commands/set_playback_speed.cpp
commands/show_menu.cpp
commands/tileset_mode.cpp
commands/toggle_other_layers_opacity.cpp
commands/toggle_play_option.cpp
file_selector.cpp
modules/gfx.cpp

View File

@ -168,6 +168,7 @@ FOR_EACH_COMMAND(SymmetryMode)
FOR_EACH_COMMAND(TiledMode)
FOR_EACH_COMMAND(TilesetMode)
FOR_EACH_COMMAND(Timeline)
FOR_EACH_COMMAND(ToggleOtherLayersOpacity)
FOR_EACH_COMMAND(TogglePlayAll)
FOR_EACH_COMMAND(TogglePlayOnce)
FOR_EACH_COMMAND(TogglePlaySubtags)

View File

@ -0,0 +1,114 @@
// Aseprite
// Copyright (C) 2023 Igara Studio S.A.
//
// This program is distributed under the terms of
// the End-User License Agreement for Aseprite.
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "app/app.h"
#include "app/commands/new_params.h"
#include "app/i18n/strings.h"
#include "app/ui/editor/editor.h"
#include "app/ui/main_window.h"
#include "app/ui/preview_editor.h"
#include "fmt/format.h"
#include "ui/system.h"
namespace app {
struct ToggleOtherLayersOpacityParams : public NewParams {
Param<bool> preview { this, false, "preview" };
Param<int> opacity { this, 255, "opacity" };
// Can be used if the option is presend as "Hide Others", so it's
// checked when the configured opacity == 0
Param<bool> checkedIfZero { this, false, "checkedIfZero" };
};
class ToggleOtherLayersOpacityCommand : public CommandWithNewParams<ToggleOtherLayersOpacityParams> {
public:
ToggleOtherLayersOpacityCommand();
private:
bool onChecked(Context* ctx) override;
void onExecute(Context* ctx) override;
std::string onGetFriendlyName() const override;
};
ToggleOtherLayersOpacityCommand::ToggleOtherLayersOpacityCommand()
: CommandWithNewParams<ToggleOtherLayersOpacityParams>(
CommandId::ToggleOtherLayersOpacity(), CmdUIOnlyFlag)
{
}
bool ToggleOtherLayersOpacityCommand::onChecked(Context* ctx)
{
if (params().checkedIfZero.isSet()) {
auto& pref = Preferences::instance();
auto& option =
(params().preview() ?
pref.experimental.nonactiveLayersOpacityPreview:
pref.experimental.nonactiveLayersOpacity);
return (option() == 0);
}
return false;
}
void ToggleOtherLayersOpacityCommand::onExecute(Context* ctx)
{
auto& pref = Preferences::instance();
auto& option =
(params().preview() ?
pref.experimental.nonactiveLayersOpacityPreview:
pref.experimental.nonactiveLayersOpacity);
// If we want to toggle the other layers in the preview window, and
// the preview window is hidden, we just show it with the "other
// layers" hidden.
if (params().preview()) {
PreviewEditorWindow* previewWin =
App::instance()->mainWindow()->getPreviewEditor();
if (!previewWin->isPreviewEnabled()) {
option(0);
previewWin->setPreviewEnabled(true);
return;
}
}
if (params().opacity.isSet()) {
option(params().opacity());
}
else {
option(option() == 0 ? 255: 0);
}
// TODO make the editors listen the opacity change
if (params().preview()) {
PreviewEditorWindow* previewWin =
App::instance()->mainWindow()->getPreviewEditor();
previewWin->previewEditor()->invalidate();
}
else {
app_refresh_screen();
}
}
std::string ToggleOtherLayersOpacityCommand::onGetFriendlyName() const
{
std::string text;
if (params().preview())
text = Strings::commands_ToggleOtherLayersOpacity_PreviewEditor();
else
text = Strings::commands_ToggleOtherLayersOpacity();
if (params().opacity.isSet())
text = fmt::format("{} ({})", text, params().opacity());
return text;
}
Command* CommandFactory::createToggleOtherLayersOpacityCommand()
{
return new ToggleOtherLayersOpacityCommand;
}
} // namespace app

View File

@ -383,7 +383,7 @@ void Editor::setLayer(const Layer* layer)
// If the user want to see the active layer edges...
m_docPref.show.layerEdges() ||
// If there is a different opacity for nonactive-layers
Preferences::instance().experimental.nonactiveLayersOpacity() < 255 ||
otherLayersOpacity() < 255 ||
// If the automatic cel guides are visible...
m_showGuidesThisCel ||
// If grid settings changed
@ -672,10 +672,7 @@ void Editor::drawOneSpriteUnclippedRect(ui::Graphics* g, const gfx::Rect& sprite
m_renderEngine->setNewBlendMethod(pref.experimental.newBlend());
m_renderEngine->setRefLayersVisiblity(true);
m_renderEngine->setSelectedLayer(m_layer);
if (m_flags & Editor::kUseNonactiveLayersOpacityWhenEnabled)
m_renderEngine->setNonactiveLayersOpacity(pref.experimental.nonactiveLayersOpacity());
else
m_renderEngine->setNonactiveLayersOpacity(255);
m_renderEngine->setNonactiveLayersOpacity(otherLayersOpacity());
m_renderEngine->setupBackground(m_document, IMAGE_RGB);
m_renderEngine->disableOnionskin();
@ -2978,9 +2975,18 @@ void Editor::updateAutoCelGuides(ui::Message* msg)
}
}
int Editor::otherLayersOpacity() const
{
if (m_docView && m_docView->isPreview())
return Preferences::instance().experimental.nonactiveLayersOpacityPreview();
else
return Preferences::instance().experimental.nonactiveLayersOpacity();
}
// static
void Editor::registerCommands()
{
// TODO merge with ToggleOtherLayersOpacity
Commands::instance()
->add(
new QuickCommand(

View File

@ -90,15 +90,13 @@ namespace app {
kShowDecorators = 16,
kShowSymmetryLine = 32,
kShowSlices = 64,
kUseNonactiveLayersOpacityWhenEnabled = 128,
kDefaultEditorFlags = (kShowGrid |
kShowMask |
kShowOnionskin |
kShowOutside |
kShowDecorators |
kShowSymmetryLine |
kShowSlices |
kUseNonactiveLayersOpacityWhenEnabled)
kShowSlices)
};
enum class ZoomBehavior {
@ -398,6 +396,8 @@ namespace app {
void invalidateIfActive();
void updateAutoCelGuides(ui::Message* msg);
int otherLayersOpacity() const;
// Stack of states. The top element in the stack is the current state (m_state).
EditorStatesHistory m_statesHistory;
EditorStatesHistory m_deletedStates;