[aseprite] 99/196: Add option to toggle the selection edges visibility (fix #861)

Tobias Hansen thansen at moszumanska.debian.org
Wed Apr 20 18:50:06 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 2af47fe9071c0b25ec4e720dac78840c8fa4b586
Author: David Capello <davidcapello at gmail.com>
Date:   Thu Mar 24 13:04:35 2016 -0300

    Add option to toggle the selection edges visibility (fix #861)
---
 data/gui.xml                         |  34 +++++----
 data/pref.xml                        |   7 +-
 src/app/CMakeLists.txt               |   1 +
 src/app/commands/cmd_grid.cpp        |  66 +++-------------
 src/app/commands/cmd_show.cpp        | 141 +++++++++++++++++++++++++++++++++++
 src/app/commands/commands_list.h     |   2 +
 src/app/ui/editor/editor.cpp         |  99 ++++++++++++------------
 src/app/ui/editor/editor.h           |   7 +-
 src/app/ui/editor/tool_loop_impl.cpp |   9 ++-
 9 files changed, 239 insertions(+), 127 deletions(-)

diff --git a/data/gui.xml b/data/gui.xml
index 2ebc57b..dd365d9 100644
--- a/data/gui.xml
+++ b/data/gui.xml
@@ -111,6 +111,7 @@
       <key command="PaletteEditor" shortcut="F4">
         <param name="switch" value="true" />
       </key>
+      <key command="ShowExtras" shortcut="Ctrl+H" />
       <!-- Tabs -->
       <key command="GotoNextTab" shortcut="Ctrl+Tab" />
       <key command="GotoPreviousTab" shortcut="Ctrl+Shift+Tab" />
@@ -718,28 +719,35 @@
         <item command="SaveMask" text="&Save to MSK file" />
       </menu>
       <menu text="&View">
-	<item command="DuplicateView" text="Duplicate &View" />
+        <item command="DuplicateView" text="Duplicate &View" />
         <separator />
-        <item command="ShowPixelGrid" text="Show &Pixel Grid" />
-        <item command="ShowGrid" text="Show &Grid" />
-        <item command="SnapToGrid" text="&Snap to Grid" />
-        <item command="GridSettings" text="Gri&d Settings" />
-        <item command="SelectionAsGrid" text="Select&ion as Grid" />
-	<menu text="Tiled &Mode">
+        <item command="ShowExtras" text="&Extras" />
+        <menu text="&Show">
+          <item command="ShowSelectionEdges" text="&Selection Edges" />
+          <item command="ShowGrid" text="&Grid" />
+          <item command="ShowPixelGrid" text="&Pixel Grid" />
+        </menu>
+        <separator />
+        <menu text="&Grid">
+          <item command="GridSettings" text="Gri&d Settings" />
+          <item command="SelectionAsGrid" text="Select&ion as Grid" />
+          <item command="SnapToGrid" text="&Snap to Grid" />
+        </menu>
+        <menu text="Tiled &Mode">
           <item command="TiledMode" text="&None">
             <param name="axis" value="none" />
-	  </item>
+          </item>
           <item command="TiledMode" text="Tiled in &Both Axes">
             <param name="axis" value="both" />
-	  </item>
+          </item>
           <item command="TiledMode" text="Tiled in &X Axis">
             <param name="axis" value="x" />
-	  </item>
+          </item>
           <item command="TiledMode" text="Tiled in &Y Axis">
             <param name="axis" value="y" />
-	  </item>
-	</menu>
-	<item command="SymmetryMode" text="S&ymmetry Options" />
+          </item>
+        </menu>
+        <item command="SymmetryMode" text="S&ymmetry Options" />
         <separator />
         <item command="SetLoopSection" text="Set &Loop Section" />
         <item command="ShowOnionSkin" text="Show &Onion Skin" />
diff --git a/data/pref.xml b/data/pref.xml
index e912877..d283514 100644
--- a/data/pref.xml
+++ b/data/pref.xml
@@ -220,14 +220,12 @@
     </section>
     <section id="grid">
       <option id="snap" type="bool" default="false" migrate="Grid.SnapTo" />
-      <option id="visible" type="bool" default="false" migrate="Grid.Visible" />
       <option id="bounds" type="gfx::Rect" default="gfx::Rect(0, 0, 16, 16)" migrate="Grid.Bounds" />
       <option id="color" type="app::Color" default="app::Color::fromRgb(0, 0, 255)" migrate="Grid.Color" />
       <option id="opacity" type="int" default="160" migrate="Grid.Opacity" />
       <option id="auto_opacity" type="bool" default="true" migrate="Grid.AutoOpacity" />
     </section>
     <section id="pixel_grid">
-      <option id="visible" type="bool" default="false" migrate="PixelGrid.Visible" />
       <option id="color" type="app::Color" default="app::Color::fromRgb(200, 200, 200)" migrate="PixelGrid.Color" />
       <option id="opacity" type="int" default="160" migrate="PixelGrid.Opacity" />
       <option id="auto_opacity" type="bool" default="true" migrate="PixelGrid.AutoOpacity" />
@@ -281,6 +279,11 @@
       <option id="scroll" type="gfx::Point" />
       <option id="auto_scroll" type="bool" default="true" />
     </section>
+    <section id="show">
+      <option id="selection_edges" type="bool" default="true" />
+      <option id="grid" type="bool" default="false" migrate="grid.visible" />
+      <option id="pixel_grid" type="bool" default="false" migrate="pixel_grid.visible" />
+    </section>
   </document>
 
 </preferences>
diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt
index 149d59e..fcc4136 100644
--- a/src/app/CMakeLists.txt
+++ b/src/app/CMakeLists.txt
@@ -254,6 +254,7 @@ add_library(app-lib
   commands/cmd_set_palette.cpp
   commands/cmd_set_palette_entry_size.cpp
   commands/cmd_set_same_ink.cpp
+  commands/cmd_show.cpp
   commands/cmd_sprite_properties.cpp
   commands/cmd_sprite_size.cpp
   commands/cmd_switch_colors.cpp
diff --git a/src/app/commands/cmd_grid.cpp b/src/app/commands/cmd_grid.cpp
index e091b2c..54c07eb 100644
--- a/src/app/commands/cmd_grid.cpp
+++ b/src/app/commands/cmd_grid.cpp
@@ -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
@@ -29,50 +29,6 @@ namespace app {
 using namespace ui;
 using namespace gfx;
 
-class ShowGridCommand : public Command {
-public:
-  ShowGridCommand()
-    : Command("ShowGrid",
-              "Show Grid",
-              CmdUIOnlyFlag) {
-  }
-
-  Command* clone() const override { return new ShowGridCommand(*this); }
-
-protected:
-  bool onChecked(Context* ctx) override {
-    DocumentPreferences& docPref = Preferences::instance().document(ctx->activeDocument());
-    return docPref.grid.visible();
-  }
-
-  void onExecute(Context* ctx) override {
-    DocumentPreferences& docPref = Preferences::instance().document(ctx->activeDocument());
-    docPref.grid.visible(!docPref.grid.visible());
-  }
-};
-
-class ShowPixelGridCommand : public Command {
-public:
-  ShowPixelGridCommand()
-    : Command("ShowPixelGrid",
-              "Show Pixel Grid",
-              CmdUIOnlyFlag) {
-  }
-
-  Command* clone() const override { return new ShowPixelGridCommand(*this); }
-
-protected:
-  bool onChecked(Context* ctx) override {
-    DocumentPreferences& docPref = Preferences::instance().document(ctx->activeDocument());
-    return docPref.pixelGrid.visible();
-  }
-
-  void onExecute(Context* ctx) override {
-    DocumentPreferences& docPref = Preferences::instance().document(ctx->activeDocument());
-    docPref.pixelGrid.visible(!docPref.pixelGrid.visible());
-  }
-};
-
 class SnapToGridCommand : public Command {
 public:
   SnapToGridCommand()
@@ -122,8 +78,10 @@ protected:
       Preferences::instance().document(ctx->activeDocument());
 
     docPref.grid.bounds(mask->bounds());
-    if (!docPref.grid.visible())
-      docPref.grid.visible(true);
+
+    // Make grid visible
+    if (!docPref.show.grid())
+      docPref.show.grid(true);
   }
 };
 
@@ -177,17 +135,11 @@ void GridSettingsCommand::onExecute(Context* context)
     bounds.h = MAX(bounds.h, 1);
 
     docPref.grid.bounds(bounds);
-  }
-}
 
-Command* CommandFactory::createShowGridCommand()
-{
-  return new ShowGridCommand;
-}
-
-Command* CommandFactory::createShowPixelGridCommand()
-{
-  return new ShowPixelGridCommand;
+    // Make grid visible
+    if (!docPref.show.grid())
+      docPref.show.grid(true);
+  }
 }
 
 Command* CommandFactory::createSnapToGridCommand()
diff --git a/src/app/commands/cmd_show.cpp b/src/app/commands/cmd_show.cpp
new file mode 100644
index 0000000..e7620aa
--- /dev/null
+++ b/src/app/commands/cmd_show.cpp
@@ -0,0 +1,141 @@
+// Aseprite
+// 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.
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "app/commands/command.h"
+#include "app/context.h"
+#include "app/pref/preferences.h"
+
+namespace app {
+
+class ShowExtrasCommand : public Command {
+public:
+  ShowExtrasCommand()
+    : Command("ShowExtras",
+              "Show Extras",
+              CmdUIOnlyFlag) {
+  }
+
+  Command* clone() const override { return new ShowExtrasCommand(*this); }
+
+protected:
+  bool onChecked(Context* ctx) override {
+    DocumentPreferences& docPref = Preferences::instance().document(ctx->activeDocument());
+    return docPref.show.selectionEdges();
+  }
+
+  void onExecute(Context* ctx) override {
+    DocumentPreferences& globPref = Preferences::instance().document(nullptr);
+    DocumentPreferences& docPref = Preferences::instance().document(ctx->activeDocument());
+    if (docPref.show.selectionEdges()) {
+      globPref.show = docPref.show;
+      docPref.show.selectionEdges(false);
+      docPref.show.grid(false);
+      docPref.show.pixelGrid(false);
+    }
+    else {
+      docPref.show.selectionEdges(true);
+      docPref.show.grid(
+        docPref.show.grid() ||
+        globPref.show.grid());
+      docPref.show.pixelGrid(
+        docPref.show.pixelGrid() ||
+        globPref.show.pixelGrid());
+    }
+  }
+};
+
+class ShowGridCommand : public Command {
+public:
+  ShowGridCommand()
+    : Command("ShowGrid",
+              "Show Grid",
+              CmdUIOnlyFlag) {
+  }
+
+  Command* clone() const override { return new ShowGridCommand(*this); }
+
+protected:
+  bool onChecked(Context* ctx) override {
+    DocumentPreferences& docPref = Preferences::instance().document(ctx->activeDocument());
+    return docPref.show.grid();
+  }
+
+  void onExecute(Context* ctx) override {
+    DocumentPreferences& docPref = Preferences::instance().document(ctx->activeDocument());
+    docPref.show.grid(!docPref.show.grid());
+  }
+};
+
+class ShowPixelGridCommand : public Command {
+public:
+  ShowPixelGridCommand()
+    : Command("ShowPixelGrid",
+              "Show Pixel Grid",
+              CmdUIOnlyFlag) {
+  }
+
+  Command* clone() const override { return new ShowPixelGridCommand(*this); }
+
+protected:
+  bool onChecked(Context* ctx) override {
+    DocumentPreferences& docPref = Preferences::instance().document(ctx->activeDocument());
+    return docPref.show.pixelGrid();
+  }
+
+  void onExecute(Context* ctx) override {
+    DocumentPreferences& docPref = Preferences::instance().document(ctx->activeDocument());
+    docPref.show.pixelGrid(!docPref.show.pixelGrid());
+  }
+};
+
+class ShowSelectionEdgesCommand : public Command {
+public:
+  ShowSelectionEdgesCommand()
+    : Command("ShowSelectionEdges",
+              "Show Selection Edges",
+              CmdUIOnlyFlag) {
+  }
+
+  Command* clone() const override { return new ShowSelectionEdgesCommand(*this); }
+
+protected:
+  bool onChecked(Context* ctx) override {
+    DocumentPreferences& docPref = Preferences::instance().document(ctx->activeDocument());
+    return docPref.show.selectionEdges();
+  }
+
+  void onExecute(Context* ctx) override {
+    DocumentPreferences& docPref = Preferences::instance().document(ctx->activeDocument());
+    docPref.show.selectionEdges(!docPref.show.selectionEdges());
+  }
+};
+
+Command* CommandFactory::createShowExtrasCommand()
+{
+  return new ShowExtrasCommand;
+}
+
+Command* CommandFactory::createShowGridCommand()
+{
+  return new ShowGridCommand;
+}
+
+Command* CommandFactory::createShowPixelGridCommand()
+{
+  return new ShowPixelGridCommand;
+}
+
+Command* CommandFactory::createShowSelectionEdgesCommand()
+{
+  return new ShowSelectionEdgesCommand;
+}
+
+} // namespace app
diff --git a/src/app/commands/commands_list.h b/src/app/commands/commands_list.h
index 4fc6516..a558ac3 100644
--- a/src/app/commands/commands_list.h
+++ b/src/app/commands/commands_list.h
@@ -116,9 +116,11 @@ FOR_EACH_COMMAND(SetLoopSection)
 FOR_EACH_COMMAND(SetPalette)
 FOR_EACH_COMMAND(SetPaletteEntrySize)
 FOR_EACH_COMMAND(SetSameInk)
+FOR_EACH_COMMAND(ShowExtras)
 FOR_EACH_COMMAND(ShowGrid)
 FOR_EACH_COMMAND(ShowOnionSkin)
 FOR_EACH_COMMAND(ShowPixelGrid)
+FOR_EACH_COMMAND(ShowSelectionEdges)
 FOR_EACH_COMMAND(SnapToGrid)
 FOR_EACH_COMMAND(SpriteProperties)
 FOR_EACH_COMMAND(SpriteSize)
diff --git a/src/app/ui/editor/editor.cpp b/src/app/ui/editor/editor.cpp
index f847633..6e4bb70 100644
--- a/src/app/ui/editor/editor.cpp
+++ b/src/app/ui/editor/editor.cpp
@@ -153,6 +153,7 @@ Editor::Editor(Document* document, EditorFlags flags)
   , m_layer(m_sprite->folder()->getFirstLayer())
   , m_frame(frame_t(0))
   , m_zoom(1, 1)
+  , m_docPref(Preferences::instance().document(document))
   , m_brushPreview(this)
   , m_lastDrawingPosition(-1, -1)
   , m_quicktool(NULL)
@@ -183,22 +184,23 @@ Editor::Editor(Document* document, EditorFlags flags)
     App::instance()->getMainWindow()->getContextBar()->BrushChange.connect(
       base::Bind<void>(&Editor::onContextBarBrushChange, this));
 
-  DocumentPreferences& docPref = Preferences::instance().document(m_document);
-
   // Restore last site in preferences
-  frame_t preferredFrame = docPref.site.frame();
-  Layer* preferredLayer = m_sprite->indexToLayer(docPref.site.layer());
+  frame_t preferredFrame = m_docPref.site.frame();
+  Layer* preferredLayer = m_sprite->indexToLayer(m_docPref.site.layer());
   if (preferredFrame >= 0 && preferredFrame <= m_sprite->lastFrame())
     setFrame(preferredFrame);
   if (preferredLayer)
     setLayer(preferredLayer);
 
-  m_tiledConn = docPref.tiled.AfterChange.connect(base::Bind<void>(&Editor::invalidate, this));
-  m_gridConn = docPref.grid.AfterChange.connect(base::Bind<void>(&Editor::invalidate, this));
-  m_pixelGridConn = docPref.pixelGrid.AfterChange.connect(base::Bind<void>(&Editor::invalidate, this));
-  m_bgConn = docPref.bg.AfterChange.connect(base::Bind<void>(&Editor::invalidate, this));
-  m_onionskinConn = docPref.onionskin.AfterChange.connect(base::Bind<void>(&Editor::invalidate, this));
+  m_tiledConn = m_docPref.tiled.AfterChange.connect(base::Bind<void>(&Editor::invalidate, this));
+  m_gridConn = m_docPref.grid.AfterChange.connect(base::Bind<void>(&Editor::invalidate, this));
+  m_pixelGridConn = m_docPref.pixelGrid.AfterChange.connect(base::Bind<void>(&Editor::invalidate, this));
+  m_bgConn = m_docPref.bg.AfterChange.connect(base::Bind<void>(&Editor::invalidate, this));
+  m_onionskinConn = m_docPref.onionskin.AfterChange.connect(base::Bind<void>(&Editor::invalidate, this));
   m_symmetryModeConn = Preferences::instance().symmetryMode.enabled.AfterChange.connect(base::Bind<void>(&Editor::invalidateIfActive, this));
+  m_showExtrasConn =
+    m_docPref.show.AfterChange.connect(
+      base::Bind<void>(&Editor::onShowExtrasChange, this));
 
   m_document->addObserver(this);
 
@@ -208,10 +210,8 @@ Editor::Editor(Document* document, EditorFlags flags)
 Editor::~Editor()
 {
   if (m_document && m_sprite) {
-    DocumentPreferences& docPref = Preferences::instance()
-      .document(m_document);
-    docPref.site.frame(frame());
-    docPref.site.layer(m_sprite->layerToIndex(layer()));
+    m_docPref.site.frame(frame());
+    m_docPref.site.layer(m_sprite->layerToIndex(layer()));
   }
 
   m_observers.notifyDestroyEditor(this);
@@ -309,8 +309,7 @@ void Editor::setLayer(const Layer* layer)
   // If the onion skinning depends on the active layer, we've to
   // redraw the whole editor.
   if (m_document && changed) {
-    DocumentPreferences& docPref = Preferences::instance().document(m_document);
-    if (docPref.onionskin.currentLayer())
+    if (m_docPref.onionskin.currentLayer())
       invalidate();
   }
 
@@ -464,26 +463,23 @@ void Editor::drawOneSpriteUnclippedRect(ui::Graphics* g, const gfx::Rect& sprite
     m_renderEngine.disableOnionskin();
 
     if ((m_flags & kShowOnionskin) == kShowOnionskin) {
-      DocumentPreferences& docPref = Preferences::instance()
-        .document(m_document);
-
-      if (docPref.onionskin.active()) {
+      if (m_docPref.onionskin.active()) {
         OnionskinOptions opts(
-          (docPref.onionskin.type() == app::gen::OnionskinType::MERGE ?
+          (m_docPref.onionskin.type() == app::gen::OnionskinType::MERGE ?
            render::OnionskinType::MERGE:
-           (docPref.onionskin.type() == app::gen::OnionskinType::RED_BLUE_TINT ?
+           (m_docPref.onionskin.type() == app::gen::OnionskinType::RED_BLUE_TINT ?
             render::OnionskinType::RED_BLUE_TINT:
             render::OnionskinType::NONE)));
 
-        opts.position(docPref.onionskin.position());
-        opts.prevFrames(docPref.onionskin.prevFrames());
-        opts.nextFrames(docPref.onionskin.nextFrames());
-        opts.opacityBase(docPref.onionskin.opacityBase());
-        opts.opacityStep(docPref.onionskin.opacityStep());
-        opts.layer(docPref.onionskin.currentLayer() ? m_layer: nullptr);
+        opts.position(m_docPref.onionskin.position());
+        opts.prevFrames(m_docPref.onionskin.prevFrames());
+        opts.nextFrames(m_docPref.onionskin.nextFrames());
+        opts.opacityBase(m_docPref.onionskin.opacityBase());
+        opts.opacityStep(m_docPref.onionskin.opacityStep());
+        opts.layer(m_docPref.onionskin.currentLayer() ? m_layer: nullptr);
 
         FrameTag* tag = nullptr;
-        if (docPref.onionskin.loopTag())
+        if (m_docPref.onionskin.loopTag())
           tag = m_sprite->frameTags().innerTag(m_frame);
         opts.loopTag(tag);
 
@@ -563,10 +559,7 @@ void Editor::drawSpriteUnclippedRect(ui::Graphics* g, const gfx::Rect& _rc)
   outside.createSubtraction(outside, gfx::Region(spriteRect));
 
   // Document preferences
-  DocumentPreferences& docPref =
-      Preferences::instance().document(m_document);
-
-  if (int(docPref.tiled.mode()) & int(filters::TiledMode::X_AXIS)) {
+  if (int(m_docPref.tiled.mode()) & int(filters::TiledMode::X_AXIS)) {
     drawOneSpriteUnclippedRect(g, rc, -spriteRect.w, 0);
     drawOneSpriteUnclippedRect(g, rc, +spriteRect.w, 0);
 
@@ -574,7 +567,7 @@ void Editor::drawSpriteUnclippedRect(ui::Graphics* g, const gfx::Rect& _rc)
     outside.createSubtraction(outside, gfx::Region(enclosingRect));
   }
 
-  if (int(docPref.tiled.mode()) & int(filters::TiledMode::Y_AXIS)) {
+  if (int(m_docPref.tiled.mode()) & int(filters::TiledMode::Y_AXIS)) {
     drawOneSpriteUnclippedRect(g, rc, 0, -spriteRect.h);
     drawOneSpriteUnclippedRect(g, rc, 0, +spriteRect.h);
 
@@ -582,7 +575,7 @@ void Editor::drawSpriteUnclippedRect(ui::Graphics* g, const gfx::Rect& _rc)
     outside.createSubtraction(outside, gfx::Region(enclosingRect));
   }
 
-  if (docPref.tiled.mode() == filters::TiledMode::BOTH) {
+  if (m_docPref.tiled.mode() == filters::TiledMode::BOTH) {
     drawOneSpriteUnclippedRect(g, rc, -spriteRect.w, -spriteRect.h);
     drawOneSpriteUnclippedRect(g, rc, +spriteRect.w, -spriteRect.h);
     drawOneSpriteUnclippedRect(g, rc, -spriteRect.w, +spriteRect.h);
@@ -610,34 +603,34 @@ void Editor::drawSpriteUnclippedRect(ui::Graphics* g, const gfx::Rect& _rc)
       IntersectClip clip(g, cliprc);
 
       // Draw the pixel grid
-      if ((m_zoom.scale() > 2.0) && docPref.pixelGrid.visible()) {
-        int alpha = docPref.pixelGrid.opacity();
+      if ((m_zoom.scale() > 2.0) && m_docPref.show.pixelGrid()) {
+        int alpha = m_docPref.pixelGrid.opacity();
 
-        if (docPref.pixelGrid.autoOpacity()) {
+        if (m_docPref.pixelGrid.autoOpacity()) {
           alpha = int(alpha * (m_zoom.scale()-2.) / (16.-2.));
           alpha = MID(0, alpha, 255);
         }
 
         drawGrid(g, enclosingRect, Rect(0, 0, 1, 1),
-          docPref.pixelGrid.color(), alpha);
+          m_docPref.pixelGrid.color(), alpha);
       }
 
       // Draw the grid
-      if (docPref.grid.visible()) {
-        gfx::Rect gridrc = docPref.grid.bounds();
+      if (m_docPref.show.grid()) {
+        gfx::Rect gridrc = m_docPref.grid.bounds();
         if (m_zoom.apply(gridrc.w) > 2 &&
           m_zoom.apply(gridrc.h) > 2) {
-          int alpha = docPref.grid.opacity();
+          int alpha = m_docPref.grid.opacity();
 
-          if (docPref.grid.autoOpacity()) {
+          if (m_docPref.grid.autoOpacity()) {
             double len = (m_zoom.apply(gridrc.w) + m_zoom.apply(gridrc.h)) / 2.;
             alpha = int(alpha * len / 32.);
             alpha = MID(0, alpha, 255);
           }
 
           if (alpha > 8)
-            drawGrid(g, enclosingRect, docPref.grid.bounds(),
-              docPref.grid.color(), alpha);
+            drawGrid(g, enclosingRect, m_docPref.grid.bounds(),
+              m_docPref.grid.color(), alpha);
         }
       }
     }
@@ -647,14 +640,14 @@ void Editor::drawSpriteUnclippedRect(ui::Graphics* g, const gfx::Rect& _rc)
   if (isActive() &&
       (m_flags & Editor::kShowSymmetryLine) &&
       Preferences::instance().symmetryMode.enabled()) {
-    switch (docPref.symmetry.mode()) {
+    switch (m_docPref.symmetry.mode()) {
       case app::gen::SymmetryMode::NONE:
         // Do nothing
         break;
       case app::gen::SymmetryMode::HORIZONTAL: {
-        int x = docPref.symmetry.xAxis();
+        int x = m_docPref.symmetry.xAxis();
         if (x > 0) {
-          gfx::Color color = color_utils::color_for_ui(docPref.grid.color());
+          gfx::Color color = color_utils::color_for_ui(m_docPref.grid.color());
           g->drawVLine(color,
                        spriteRect.x + m_zoom.apply(x),
                        enclosingRect.y,
@@ -663,9 +656,9 @@ void Editor::drawSpriteUnclippedRect(ui::Graphics* g, const gfx::Rect& _rc)
         break;
       }
       case app::gen::SymmetryMode::VERTICAL: {
-        int y = docPref.symmetry.yAxis();
+        int y = m_docPref.symmetry.yAxis();
         if (y > 0) {
-          gfx::Color color = color_utils::color_for_ui(docPref.grid.color());
+          gfx::Color color = color_utils::color_for_ui(m_docPref.grid.color());
           g->drawHLine(color,
                        enclosingRect.x,
                        spriteRect.y + m_zoom.apply(y),
@@ -722,7 +715,8 @@ void Editor::drawSpriteClipped(const gfx::Region& updateRegion)
  */
 void Editor::drawMask(Graphics* g)
 {
-  if ((m_flags & kShowMask) == 0)
+  if ((m_flags & kShowMask) == 0 ||
+      !m_docPref.show.selectionEdges())
     return;
 
   ASSERT(m_document->getMaskBoundaries());
@@ -1447,6 +1441,11 @@ void Editor::onContextBarBrushChange()
   m_brushPreview.redraw();
 }
 
+void Editor::onShowExtrasChange()
+{
+  invalidate();
+}
+
 void Editor::onExposeSpritePixels(doc::DocumentEvent& ev)
 {
   if (m_state && ev.sprite() == m_sprite)
diff --git a/src/app/ui/editor/editor.h b/src/app/ui/editor/editor.h
index cc278d2..cfe1966 100644
--- a/src/app/ui/editor/editor.h
+++ b/src/app/ui/editor/editor.h
@@ -12,7 +12,7 @@
 #include "app/app_render.h"
 #include "app/color.h"
 #include "app/document.h"
-#include "app/pref/option.h"
+#include "app/pref/preferences.h"
 #include "app/tools/selection_mode.h"
 #include "app/ui/color_source.h"
 #include "app/ui/editor/brush_preview.h"
@@ -234,6 +234,7 @@ namespace app {
     void onCurrentToolChange();
     void onFgColorChange();
     void onContextBarBrushChange();
+    void onShowExtrasChange();
     void onExposeSpritePixels(doc::DocumentEvent& ev) override;
 
   private:
@@ -271,8 +272,9 @@ namespace app {
     Document* m_document;         // Active document in the editor
     Sprite* m_sprite;             // Active sprite in the editor
     Layer* m_layer;               // Active layer in the editor
-    frame_t m_frame;          // Active frame in the editor
+    frame_t m_frame;              // Active frame in the editor
     render::Zoom m_zoom;          // Zoom in the editor
+    DocumentPreferences& m_docPref;
 
     // Brush preview
     BrushPreview m_brushPreview;
@@ -302,6 +304,7 @@ namespace app {
     base::ScopedConnection m_currentToolChangeConn;
     base::ScopedConnection m_fgColorChangeConn;
     base::ScopedConnection m_contextBarBrushChangeConn;
+    base::ScopedConnection m_showExtrasConn;
 
     // Slots listeing document preferences.
     base::ScopedConnection m_tiledConn;
diff --git a/src/app/ui/editor/tool_loop_impl.cpp b/src/app/ui/editor/tool_loop_impl.cpp
index 8592bc0..70a0bee 100644
--- a/src/app/ui/editor/tool_loop_impl.cpp
+++ b/src/app/ui/editor/tool_loop_impl.cpp
@@ -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
@@ -205,14 +205,14 @@ public:
   bool getContiguous() override { return m_contiguous; }
   tools::SelectionMode getSelectionMode() override { return m_editor->getSelectionMode(); }
   filters::TiledMode getTiledMode() override { return m_docPref.tiled.mode(); }
-  bool getGridVisible() override { return m_docPref.grid.visible(); }
+  bool getGridVisible() override { return m_docPref.show.grid(); }
   bool getSnapToGrid() override { return m_docPref.grid.snap(); }
   bool getStopAtGrid() override {
     switch (m_toolPref.floodfill.stopAtGrid()) {
       case app::gen::StopAtGrid::NEVER:
         return false;
       case app::gen::StopAtGrid::IF_VISIBLE:
-        return m_docPref.grid.visible();
+        return m_docPref.show.grid();
       case app::gen::StopAtGrid::ALWAYS:
         return true;
     }
@@ -357,6 +357,9 @@ public:
       else if (getInk()->isSelection()) {
         m_document->generateMaskBoundaries();
         redraw = true;
+
+        // Show selection edges
+        m_docPref.show.selectionEdges(true);
       }
 
       m_transaction.commit();

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