[aseprite] 100/196: Add an option to change the "brush preview" style (related to #792)

Tobias Hansen thansen at moszumanska.debian.org
Wed Apr 20 18:50:07 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 9face9458e408418d4aaa42dac471a7301d838d6
Author: David Capello <davidcapello at gmail.com>
Date:   Thu Mar 24 14:29:15 2016 -0300

    Add an option to change the "brush preview" style (related to #792)
---
 data/pref.xml                       |   6 ++
 data/widgets/options.xml            |  27 +++++--
 src/app/commands/cmd_options.cpp    | 151 ++++++++++++++++++++++--------------
 src/app/ui/editor/brush_preview.cpp |  18 ++++-
 4 files changed, 134 insertions(+), 68 deletions(-)

diff --git a/data/pref.xml b/data/pref.xml
index d283514..b99f9e3 100644
--- a/data/pref.xml
+++ b/data/pref.xml
@@ -20,6 +20,11 @@
       <value id="SQUARE" value="1" />
       <value id="LINE" value="2" />
     </enum>
+    <enum id="BrushPreview">
+      <value id="NONE" value="0" />
+      <value id="EDGES" value="1" />
+      <value id="FULL" value="2" />
+    </enum>
     <enum id="BgType">
       <value id="CHECKED_16x16" value="0" />
       <value id="CHECKED_8x8" value="1" />
@@ -89,6 +94,7 @@
       <option id="right_click_mode" type="RightClickMode" default="RightClickMode::PAINT_BGCOLOR" migrate="Options.RightClickMode" />
       <option id="auto_select_layer" type="bool" default="false" migrate="Options.AutoSelectLayer" />
       <option id="cursor_color" type="app::Color" default="app::Color::fromMask()" migrate="Tools.CursorColor" />
+      <option id="brush_preview" type="BrushPreview" default="BrushPreview::FULL" />
       <option id="play_once" type="bool" default="false" />
     </section>
     <section id="preview" text="Preview">
diff --git a/data/widgets/options.xml b/data/widgets/options.xml
index c64ac82..0773a10 100644
--- a/data/widgets/options.xml
+++ b/data/widgets/options.xml
@@ -1,5 +1,5 @@
 <!-- Aseprite -->
-<!-- Copyright (C) 2001-2015 by David Capello -->
+<!-- Copyright (C) 2001-2016 by David Capello -->
 <gui>
   <window id="options" text="Preferences">
   <vbox>
@@ -9,6 +9,7 @@
           <listitem text="General" value="section_general" />
           <listitem text="Editor" value="section_editor" />
           <listitem text="Timeline" value="section_timeline" />
+          <listitem text="Cursors" value="section_cursors" />
           <listitem text="Grid && Background" value="section_grid" />
           <listitem text="Undo" value="section_undo" />
           <listitem text="Theme" value="section_theme" />
@@ -65,10 +66,6 @@
             <label text="Right-click:" />
             <combobox id="right_click_behavior" expansive="true" />
           </hbox>
-          <hbox>
-            <label text="Cursor Color:" />
-            <box id="cursor_color_box" /><!-- custom widget -->
-          </hbox>
 
           <separator text="Selection" horizontal="true" />
           <check text="Adjust opaque/transparent mode automatically" id="auto_opaque" tooltip="Depending on the layer (background/transparent),
the pasted selection will be adjusted
automatically (opaque/transparent)" />
@@ -82,6 +79,26 @@
           <check text="Rewind on Stop" id="rewind_on_stop" tooltip="The 'Stop' button should rewind the animation
where it was started." />
 	</vbox>
 
+        <!-- Cursors -->
+        <vbox id="section_cursors">
+          <separator text="Painting Cursors" horizontal="true" />
+          <label text="Precise Cursor Color:" />
+	  <hbox>
+	    <combobox group="1" id="cursor_color_type">
+	      <listitem text="Negative Black and White" value="0" />
+	      <listitem text="Specific Color" value="1" />
+	    </combobox>
+	    <box id="cursor_color_placeholder" /><!-- custom widget -->
+	  </hbox>
+
+	  <label text="Brush Preview:" />
+          <combobox id="brush_preview">
+            <listitem text="None" value="0" />
+            <listitem text="Brush Edges" value="1" />
+            <listitem text="Full Real-time Brush Preview" value="2" />
+          </combobox>
+        </vbox>
+
         <!-- Grid & background -->
         <vbox id="section_grid">
           <combobox id="grid_scope" />
diff --git a/src/app/commands/cmd_options.cpp b/src/app/commands/cmd_options.cpp
index 1164b2b..c0fd221 100644
--- a/src/app/commands/cmd_options.cpp
+++ b/src/app/commands/cmd_options.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
@@ -39,19 +39,35 @@ using namespace ui;
 class OptionsWindow : public app::gen::Options {
 public:
   OptionsWindow(Context* context, int& curSection)
-    : m_preferences(Preferences::instance())
-    , m_globPref(m_preferences.document(nullptr))
-    , m_docPref(m_preferences.document(context->activeDocument()))
+    : m_pref(Preferences::instance())
+    , m_globPref(m_pref.document(nullptr))
+    , m_docPref(m_pref.document(context->activeDocument()))
     , m_curPref(&m_docPref)
     , m_checked_bg_color1(new ColorButton(app::Color::fromMask(), IMAGE_RGB))
     , m_checked_bg_color2(new ColorButton(app::Color::fromMask(), IMAGE_RGB))
     , m_pixelGridColor(new ColorButton(app::Color::fromMask(), IMAGE_RGB))
     , m_gridColor(new ColorButton(app::Color::fromMask(), IMAGE_RGB))
-    , m_cursorColor(new ColorButton(m_preferences.editor.cursorColor(), IMAGE_RGB))
+    , m_cursorColor(new ColorButton(m_pref.editor.cursorColor(), IMAGE_RGB))
     , m_curSection(curSection)
   {
     sectionListbox()->Change.connect(base::Bind<void>(&OptionsWindow::onChangeSection, this));
-    cursorColorBox()->addChild(m_cursorColor);
+
+    // Cursor
+    cursorColorPlaceholder()->addChild(m_cursorColor);
+
+    if (m_cursorColor->getColor().getType() == app::Color::MaskType) {
+      cursorColorType()->setSelectedItemIndex(0);
+      m_cursorColor->setVisible(false);
+    }
+    else {
+      cursorColorType()->setSelectedItemIndex(1);
+      m_cursorColor->setVisible(true);
+    }
+    cursorColorType()->Change.connect(base::Bind<void>(&OptionsWindow::onCursorColorType, this));
+
+    // Brush preview
+    brushPreview()->setSelectedItemIndex(
+      (int)m_pref.editor.brushPreview());
 
     // Grid color
     m_gridColor->setId("grid_color");
@@ -62,44 +78,44 @@ public:
     pixelGridColorPlaceholder()->addChild(m_pixelGridColor);
 
     // Others
-    if (m_preferences.general.autoshowTimeline())
+    if (m_pref.general.autoshowTimeline())
       autotimeline()->setSelected(true);
 
-    if (m_preferences.general.rewindOnStop())
+    if (m_pref.general.rewindOnStop())
       rewindOnStop()->setSelected(true);
 
-    if (m_preferences.general.expandMenubarOnMouseover())
+    if (m_pref.general.expandMenubarOnMouseover())
       expandMenubarOnMouseover()->setSelected(true);
 
-    if (m_preferences.general.dataRecovery())
+    if (m_pref.general.dataRecovery())
       enableDataRecovery()->setSelected(true);
 
     dataRecoveryPeriod()->setSelectedItemIndex(
       dataRecoveryPeriod()->findItemIndexByValue(
-        base::convert_to<std::string>(m_preferences.general.dataRecoveryPeriod())));
+        base::convert_to<std::string>(m_pref.general.dataRecoveryPeriod())));
 
-    if (m_preferences.editor.zoomFromCenterWithWheel())
+    if (m_pref.editor.zoomFromCenterWithWheel())
       zoomFromCenterWithWheel()->setSelected(true);
 
-    if (m_preferences.editor.zoomFromCenterWithKeys())
+    if (m_pref.editor.zoomFromCenterWithKeys())
       zoomFromCenterWithKeys()->setSelected(true);
 
-    if (m_preferences.selection.autoOpaque())
+    if (m_pref.selection.autoOpaque())
       autoOpaque()->setSelected(true);
 
-    if (m_preferences.selection.keepSelectionAfterClear())
+    if (m_pref.selection.keepSelectionAfterClear())
       keepSelectionAfterClear()->setSelected(true);
 
-    if (m_preferences.experimental.useNativeCursor())
+    if (m_pref.experimental.useNativeCursor())
       nativeCursor()->setSelected(true);
 
-    if (m_preferences.experimental.useNativeFileDialog())
+    if (m_pref.experimental.useNativeFileDialog())
       nativeFileDialog()->setSelected(true);
 
-    if (m_preferences.experimental.flashLayer())
+    if (m_pref.experimental.flashLayer())
       flashLayer()->setSelected(true);
 
-    if (m_preferences.editor.showScrollbars())
+    if (m_pref.editor.showScrollbars())
       showScrollbars()->setSelected(true);
 
     // Scope
@@ -113,15 +129,15 @@ public:
     // Screen/UI Scale
     screenScale()->setSelectedItemIndex(
       screenScale()->findItemIndexByValue(
-        base::convert_to<std::string>(m_preferences.general.screenScale())));
+        base::convert_to<std::string>(m_pref.general.screenScale())));
 
     uiScale()->setSelectedItemIndex(
       uiScale()->findItemIndexByValue(
-        base::convert_to<std::string>(m_preferences.experimental.uiScale())));
+        base::convert_to<std::string>(m_pref.experimental.uiScale())));
 
     if ((int(she::instance()->capabilities()) &
          int(she::Capabilities::GpuAccelerationSwitch)) == int(she::Capabilities::GpuAccelerationSwitch)) {
-      gpuAcceleration()->setSelected(m_preferences.general.gpuAcceleration());
+      gpuAcceleration()->setSelected(m_pref.general.gpuAcceleration());
     }
     else {
       gpuAcceleration()->setVisible(false);
@@ -132,10 +148,10 @@ public:
     rightClickBehavior()->addItem("Pick foreground color");
     rightClickBehavior()->addItem("Erase");
     rightClickBehavior()->addItem("Scroll");
-    rightClickBehavior()->setSelectedItemIndex((int)m_preferences.editor.rightClickMode());
+    rightClickBehavior()->setSelectedItemIndex((int)m_pref.editor.rightClickMode());
 
     // Zoom with Scroll Wheel
-    wheelZoom()->setSelected(m_preferences.editor.zoomWithWheel());
+    wheelZoom()->setSelected(m_pref.editor.zoomWithWheel());
 
     // Checked background size
     checkedBgSize()->addItem("16x16");
@@ -159,9 +175,9 @@ public:
 #endif
 
     // Undo preferences
-    undoSizeLimit()->setTextf("%d", m_preferences.undo.sizeLimit());
-    undoGotoModified()->setSelected(m_preferences.undo.gotoModified());
-    undoAllowNonlinearHistory()->setSelected(m_preferences.undo.allowNonlinearHistory());
+    undoSizeLimit()->setTextf("%d", m_pref.undo.sizeLimit());
+    undoGotoModified()->setSelected(m_pref.undo.gotoModified());
+    undoAllowNonlinearHistory()->setSelected(m_pref.undo.allowNonlinearHistory());
 
     // Theme buttons
     selectTheme()->Click.connect(base::Bind<void>(&OptionsWindow::onSelectTheme, this));
@@ -176,32 +192,33 @@ public:
   }
 
   void saveConfig() {
-    m_preferences.general.autoshowTimeline(autotimeline()->isSelected());
-    m_preferences.general.rewindOnStop(rewindOnStop()->isSelected());
+    m_pref.general.autoshowTimeline(autotimeline()->isSelected());
+    m_pref.general.rewindOnStop(rewindOnStop()->isSelected());
 
     bool expandOnMouseover = expandMenubarOnMouseover()->isSelected();
-    m_preferences.general.expandMenubarOnMouseover(expandOnMouseover);
+    m_pref.general.expandMenubarOnMouseover(expandOnMouseover);
     ui::MenuBar::setExpandOnMouseover(expandOnMouseover);
 
     std::string warnings;
 
     int newPeriod = base::convert_to<int>(dataRecoveryPeriod()->getValue());
-    if (enableDataRecovery()->isSelected() != m_preferences.general.dataRecovery() ||
-        newPeriod != m_preferences.general.dataRecoveryPeriod()) {
-      m_preferences.general.dataRecovery(enableDataRecovery()->isSelected());
-      m_preferences.general.dataRecoveryPeriod(newPeriod);
+    if (enableDataRecovery()->isSelected() != m_pref.general.dataRecovery() ||
+        newPeriod != m_pref.general.dataRecoveryPeriod()) {
+      m_pref.general.dataRecovery(enableDataRecovery()->isSelected());
+      m_pref.general.dataRecoveryPeriod(newPeriod);
 
       warnings += "<<- Automatically save recovery data every";
     }
 
-    m_preferences.editor.zoomFromCenterWithWheel(zoomFromCenterWithWheel()->isSelected());
-    m_preferences.editor.zoomFromCenterWithKeys(zoomFromCenterWithKeys()->isSelected());
-    m_preferences.editor.showScrollbars(showScrollbars()->isSelected());
-    m_preferences.editor.zoomWithWheel(wheelZoom()->isSelected());
-    m_preferences.editor.rightClickMode(static_cast<app::gen::RightClickMode>(rightClickBehavior()->getSelectedItemIndex()));
-    m_preferences.editor.cursorColor(m_cursorColor->getColor());
-    m_preferences.selection.autoOpaque(autoOpaque()->isSelected());
-    m_preferences.selection.keepSelectionAfterClear(keepSelectionAfterClear()->isSelected());
+    m_pref.editor.zoomFromCenterWithWheel(zoomFromCenterWithWheel()->isSelected());
+    m_pref.editor.zoomFromCenterWithKeys(zoomFromCenterWithKeys()->isSelected());
+    m_pref.editor.showScrollbars(showScrollbars()->isSelected());
+    m_pref.editor.zoomWithWheel(wheelZoom()->isSelected());
+    m_pref.editor.rightClickMode(static_cast<app::gen::RightClickMode>(rightClickBehavior()->getSelectedItemIndex()));
+    m_pref.editor.cursorColor(m_cursorColor->getColor());
+    m_pref.editor.brushPreview(static_cast<app::gen::BrushPreview>(brushPreview()->getSelectedItemIndex()));
+    m_pref.selection.autoOpaque(autoOpaque()->isSelected());
+    m_pref.selection.keepSelectionAfterClear(keepSelectionAfterClear()->isSelected());
 
     m_curPref->grid.color(m_gridColor->getColor());
     m_curPref->grid.opacity(gridOpacity()->getValue());
@@ -218,37 +235,37 @@ public:
     undo_size_limit_value = undoSizeLimit()->textInt();
     undo_size_limit_value = MID(1, undo_size_limit_value, 9999);
 
-    m_preferences.undo.sizeLimit(undo_size_limit_value);
-    m_preferences.undo.gotoModified(undoGotoModified()->isSelected());
-    m_preferences.undo.allowNonlinearHistory(undoAllowNonlinearHistory()->isSelected());
+    m_pref.undo.sizeLimit(undo_size_limit_value);
+    m_pref.undo.gotoModified(undoGotoModified()->isSelected());
+    m_pref.undo.allowNonlinearHistory(undoAllowNonlinearHistory()->isSelected());
 
     // Experimental features
-    m_preferences.experimental.useNativeCursor(nativeCursor()->isSelected());
-    m_preferences.experimental.useNativeFileDialog(nativeFileDialog()->isSelected());
-    m_preferences.experimental.flashLayer(flashLayer()->isSelected());
+    m_pref.experimental.useNativeCursor(nativeCursor()->isSelected());
+    m_pref.experimental.useNativeFileDialog(nativeFileDialog()->isSelected());
+    m_pref.experimental.flashLayer(flashLayer()->isSelected());
     ui::set_use_native_cursors(
-      m_preferences.experimental.useNativeCursor());
+      m_pref.experimental.useNativeCursor());
 
     bool reset_screen = false;
     int newScreenScale = base::convert_to<int>(screenScale()->getValue());
-    if (newScreenScale != m_preferences.general.screenScale()) {
-      m_preferences.general.screenScale(newScreenScale);
+    if (newScreenScale != m_pref.general.screenScale()) {
+      m_pref.general.screenScale(newScreenScale);
       reset_screen = true;
     }
 
     int newUIScale = base::convert_to<int>(uiScale()->getValue());
-    if (newUIScale != m_preferences.experimental.uiScale()) {
-      m_preferences.experimental.uiScale(newUIScale);
+    if (newUIScale != m_pref.experimental.uiScale()) {
+      m_pref.experimental.uiScale(newUIScale);
       warnings += "<<- UI Elements Scale";
     }
 
     bool newGpuAccel = gpuAcceleration()->isSelected();
-    if (newGpuAccel != m_preferences.general.gpuAcceleration()) {
-      m_preferences.general.gpuAcceleration(newGpuAccel);
+    if (newGpuAccel != m_pref.general.gpuAcceleration()) {
+      m_pref.general.gpuAcceleration(newGpuAccel);
       reset_screen = true;
     }
 
-    m_preferences.save();
+    m_pref.save();
 
     if (!warnings.empty()) {
       ui::Alert::show(PACKAGE
@@ -361,7 +378,7 @@ private:
       themeList()->addChild(item);
 
       // Selected theme
-      if (fn == m_preferences.theme.selected())
+      if (fn == m_pref.theme.selected())
         themeList()->selectChild(item);
     }
 
@@ -372,8 +389,8 @@ private:
   void onSelectTheme() {
     ListItem* item = dynamic_cast<ListItem*>(themeList()->getSelectedChild());
     if (item &&
-        item->getValue() != m_preferences.theme.selected()) {
-      m_preferences.theme.selected(item->getValue());
+        item->getValue() != m_pref.theme.selected()) {
+      m_pref.theme.selected(item->getValue());
 
       ui::Alert::show(PACKAGE
                       "<<You must restart the program to see the selected theme"
@@ -385,13 +402,27 @@ private:
     launcher::open_folder(themeFolder());
   }
 
+  void onCursorColorType() {
+    switch (cursorColorType()->getSelectedItemIndex()) {
+      case 0:
+        m_cursorColor->setColor(app::Color::fromMask());
+        m_cursorColor->setVisible(false);
+        break;
+      case 1:
+        m_cursorColor->setColor(app::Color::fromRgb(0, 0, 0, 255));
+        m_cursorColor->setVisible(true);
+        break;
+    }
+    layout();
+  }
+
   static std::string themeFolder() {
     ResourceFinder rf;
     rf.includeDataDir("skins");
     return rf.defaultFilename();
   }
 
-  Preferences& m_preferences;
+  Preferences& m_pref;
   DocumentPreferences& m_globPref;
   DocumentPreferences& m_docPref;
   DocumentPreferences* m_curPref;
diff --git a/src/app/ui/editor/brush_preview.cpp b/src/app/ui/editor/brush_preview.cpp
index e5adacb..d669ab1 100644
--- a/src/app/ui/editor/brush_preview.cpp
+++ b/src/app/ui/editor/brush_preview.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
@@ -137,13 +137,25 @@ void BrushPreview::show(const gfx::Point& screenPos)
     m_type = CROSS;
   }
 
+  bool usePreview = false;
+  switch (Preferences::instance().editor.brushPreview()) {
+    case app::gen::BrushPreview::NONE:
+      m_type = CROSS;
+      break;
+    case app::gen::BrushPreview::EDGES:
+      m_type = BRUSH_BOUNDARIES;
+      break;
+    case app::gen::BrushPreview::FULL:
+      usePreview = m_editor->getState()->requireBrushPreview();
+      break;
+  }
+
   // For cursor type 'bounds' we have to generate cursor boundaries
   if (m_type & BRUSH_BOUNDARIES)
     generateBoundaries();
 
   // Draw pixel/brush preview
-  if ((m_type & CROSS) &&
-      m_editor->getState()->requireBrushPreview()) {
+  if ((m_type & CROSS) && usePreview) {
     gfx::Rect origBrushBounds = (isFloodfill ? gfx::Rect(0, 0, 1, 1): brush->bounds());
     gfx::Rect brushBounds = origBrushBounds;
     brushBounds.offset(spritePos);

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