[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