[aseprite] 122/308: Add popup on each BrushSlot to enable/disable params

Tobias Hansen thansen at moszumanska.debian.org
Tue Mar 8 02:45:00 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 403e3ee72683e4c97130127f107a5d92775da77a
Author: David Capello <davidcapello at gmail.com>
Date:   Wed Dec 16 18:14:04 2015 -0300

    Add popup on each BrushSlot to enable/disable params
    
    Converted BrushSlotParams into a xml widget.
---
 data/widgets/brush_slot_params.xml |  34 ++++++++++
 src/app/brush_slot.h               |   3 +
 src/app/ui/brush_popup.cpp         | 130 ++++++++++++++++++++-----------------
 src/app/widget_loader.cpp          |   6 ++
 src/gen/ui_class.cpp               |   5 ++
 5 files changed, 119 insertions(+), 59 deletions(-)

diff --git a/data/widgets/brush_slot_params.xml b/data/widgets/brush_slot_params.xml
new file mode 100644
index 0000000..6ad243a
--- /dev/null
+++ b/data/widgets/brush_slot_params.xml
@@ -0,0 +1,34 @@
+<!-- ASEPRITE -->
+<!-- Copyright (C) 2015 by David Capello -->
+<gui>
+  <vbox id="brush_slot_params">
+    <grid columns="2">
+
+      <label text="Brush:" />
+      <buttonset id="brush_params" columns="3" multiple="true">
+        <item id="brush_type" text="Type" />
+        <item id="brush_size" text="Size" />
+        <item id="brush_angle" text="Angle" />
+      </buttonset>
+
+      <label text="Color:" />
+      <buttonset id="color_params" columns="2" multiple="true">
+        <item id="fg_color" text="Foreground" />
+        <item id="bg_color" text="Background" />
+      </buttonset>
+
+      <label text="Ink:" />
+      <buttonset id="ink_params" columns="2" multiple="true">
+        <item id="ink_type" text="Type" />
+        <item id="ink_opacity" text="Opacity" />
+      </buttonset>
+
+      <label text="Extras:" />
+      <buttonset id="extra_params" columns="2" multiple="true">
+        <item id="shade" text="Shade" />
+        <item id="pixel_perfect" text="Pixel-Perfect" />
+      </buttonset>
+
+    </grid>
+  </vbox>
+</gui>
diff --git a/src/app/brush_slot.h b/src/app/brush_slot.h
index c76041f..d07cdac 100644
--- a/src/app/brush_slot.h
+++ b/src/app/brush_slot.h
@@ -50,6 +50,9 @@ public:
     , m_pixelPerfect(pixelPerfect) {
   }
 
+  Flags flags() const { return m_flags; }
+  void setFlags(Flags flags) { m_flags = flags; }
+
   bool isEmpty() const {
     return int(m_flags) == 0;
   }
diff --git a/src/app/ui/brush_popup.cpp b/src/app/ui/brush_popup.cpp
index 0efa988..44c6137 100644
--- a/src/app/ui/brush_popup.cpp
+++ b/src/app/ui/brush_popup.cpp
@@ -42,6 +42,8 @@
 #include "ui/message.h"
 #include "ui/separator.h"
 
+#include "brush_slot_params.xml.h"
+
 namespace app {
 
 using namespace app::skin;
@@ -144,22 +146,61 @@ private:
   void onClick() override {
     Menu menu;
     AppMenuItem save("Save Brush Here");
-    AppMenuItem lockItem(m_delegate->onIsBrushSlotLocked(m_slot) ? "Unlock Brush": "Lock Brush");
+    AppMenuItem lockItem("Locked");
     AppMenuItem deleteItem("Delete");
     AppMenuItem deleteAllItem("Delete All");
+
+    lockItem.setSelected(m_delegate->onIsBrushSlotLocked(m_slot));
+
     save.Click.connect(&BrushOptionsItem::onSaveBrush, this);
     lockItem.Click.connect(&BrushOptionsItem::onLockBrush, this);
     deleteItem.Click.connect(&BrushOptionsItem::onDeleteBrush, this);
     deleteAllItem.Click.connect(&BrushOptionsItem::onDeleteAllBrushes, this);
+
     menu.addChild(&save);
     menu.addChild(new MenuSeparator);
     menu.addChild(&lockItem);
     menu.addChild(&deleteItem);
     menu.addChild(new MenuSeparator);
     menu.addChild(&deleteAllItem);
+    menu.addChild(new Label(""));
+    menu.addChild(new Separator("Saved Parameters", HORIZONTAL));
+
+    app::gen::BrushSlotParams params;
+    menu.addChild(&params);
+
+    // Load preferences
+    AppBrushes& brushes = App::instance()->brushes();
+    BrushSlot brush = brushes.getBrushSlot(m_slot);
+
+    params.brushType()->setSelected(brush.hasFlag(BrushSlot::Flags::BrushType));
+    params.brushSize()->setSelected(brush.hasFlag(BrushSlot::Flags::BrushSize));
+    params.brushAngle()->setSelected(brush.hasFlag(BrushSlot::Flags::BrushAngle));
+    params.fgColor()->setSelected(brush.hasFlag(BrushSlot::Flags::FgColor));
+    params.bgColor()->setSelected(brush.hasFlag(BrushSlot::Flags::BgColor));
+    params.inkType()->setSelected(brush.hasFlag(BrushSlot::Flags::InkType));
+    params.inkOpacity()->setSelected(brush.hasFlag(BrushSlot::Flags::InkOpacity));
+    params.shade()->setSelected(brush.hasFlag(BrushSlot::Flags::Shade));
+    params.pixelPerfect()->setSelected(brush.hasFlag(BrushSlot::Flags::PixelPerfect));
 
     show_popup_menu(m_popup, &menu,
                     gfx::Point(origin().x, origin().y+bounds().h));
+
+    int flags = 0;
+    if (params.brushType()->isSelected()) flags |= int(BrushSlot::Flags::BrushType);
+    if (params.brushSize()->isSelected()) flags |= int(BrushSlot::Flags::BrushSize);
+    if (params.brushAngle()->isSelected()) flags |= int(BrushSlot::Flags::BrushAngle);
+    if (params.fgColor()->isSelected()) flags |= int(BrushSlot::Flags::FgColor);
+    if (params.bgColor()->isSelected()) flags |= int(BrushSlot::Flags::BgColor);
+    if (params.inkType()->isSelected()) flags |= int(BrushSlot::Flags::InkType);
+    if (params.inkOpacity()->isSelected()) flags |= int(BrushSlot::Flags::InkOpacity);
+    if (params.shade()->isSelected()) flags |= int(BrushSlot::Flags::Shade);
+    if (params.pixelPerfect()->isSelected()) flags |= int(BrushSlot::Flags::PixelPerfect);
+
+    if (brush.flags() != BrushSlot::Flags(flags)) {
+      brush.setFlags(BrushSlot::Flags(flags));
+      brushes.setBrushSlot(m_slot, brush);
+    }
   }
 
 private:
@@ -222,72 +263,43 @@ private:
 
     menu.addChild(new Separator("Parameters to Save", HORIZONTAL));
 
-    Grid* grid = new Grid(2, false);
-    ButtonSet* brushParams = new ButtonSet(3);
-    ButtonSet::Item* brushType = brushParams->addItem("Type");
-    ButtonSet::Item* brushSize = brushParams->addItem("Size");
-    ButtonSet::Item* brushAngle = brushParams->addItem("Angle");
-    brushParams->setMultipleSelection(true);
-
-    ButtonSet* colorParams = new ButtonSet(2);
-    ButtonSet::Item* fgColor = colorParams->addItem("Foreground");
-    ButtonSet::Item* bgColor = colorParams->addItem("Background");
-    colorParams->setMultipleSelection(true);
-
-    ButtonSet* inkParams = new ButtonSet(2);
-    ButtonSet::Item* inkType = inkParams->addItem("Type");
-    ButtonSet::Item* inkOpacity = inkParams->addItem("Opacity");
-    inkParams->setMultipleSelection(true);
-
-    ButtonSet* extrasParams = new ButtonSet(2);
-    ButtonSet::Item* shade = extrasParams->addItem("Shade");
-    ButtonSet::Item* pixelPerfect = extrasParams->addItem("Pixel-Perfect");
-    extrasParams->setMultipleSelection(true);
-
-    grid->addChildInCell(new Label("Brush:"), 1, 1, 0);
-    grid->addChildInCell(brushParams, 1, 1, 0);
-    grid->addChildInCell(new Label("Color:"), 1, 1, 0);
-    grid->addChildInCell(colorParams, 1, 1, 0);
-    grid->addChildInCell(new Label("Ink:"), 1, 1, 0);
-    grid->addChildInCell(inkParams, 1, 1, 0);
-    grid->addChildInCell(new Label("Extras:"), 1, 1, 0);
-    grid->addChildInCell(extrasParams, 1, 1, 0);
-    menu.addChild(grid);
+    app::gen::BrushSlotParams params;
+    menu.addChild(&params);
 
     // Load preferences
     auto& saveBrush = Preferences::instance().saveBrush;
-    brushType->setSelected(saveBrush.brushType());
-    brushSize->setSelected(saveBrush.brushSize());
-    brushAngle->setSelected(saveBrush.brushAngle());
-    fgColor->setSelected(saveBrush.fgColor());
-    bgColor->setSelected(saveBrush.bgColor());
-    inkType->setSelected(saveBrush.inkType());
-    inkOpacity->setSelected(saveBrush.inkOpacity());
-    shade->setSelected(saveBrush.shade());
-    pixelPerfect->setSelected(saveBrush.pixelPerfect());
+    params.brushType()->setSelected(saveBrush.brushType());
+    params.brushSize()->setSelected(saveBrush.brushSize());
+    params.brushAngle()->setSelected(saveBrush.brushAngle());
+    params.fgColor()->setSelected(saveBrush.fgColor());
+    params.bgColor()->setSelected(saveBrush.bgColor());
+    params.inkType()->setSelected(saveBrush.inkType());
+    params.inkOpacity()->setSelected(saveBrush.inkOpacity());
+    params.shade()->setSelected(saveBrush.shade());
+    params.pixelPerfect()->setSelected(saveBrush.pixelPerfect());
 
     show_popup_menu(static_cast<PopupWindow*>(window()), &menu,
                     gfx::Point(origin().x, origin().y+bounds().h));
 
     // Save preferences
-    if (saveBrush.brushType() != brushType->isSelected())
-      saveBrush.brushType(brushType->isSelected());
-    if (saveBrush.brushSize() != brushSize->isSelected())
-      saveBrush.brushSize(brushSize->isSelected());
-    if (saveBrush.brushAngle() != brushAngle->isSelected())
-      saveBrush.brushAngle(brushAngle->isSelected());
-    if (saveBrush.fgColor() != fgColor->isSelected())
-      saveBrush.fgColor(fgColor->isSelected());
-    if (saveBrush.bgColor() != bgColor->isSelected())
-      saveBrush.bgColor(bgColor->isSelected());
-    if (saveBrush.inkType() != inkType->isSelected())
-      saveBrush.inkType(inkType->isSelected());
-    if (saveBrush.inkOpacity() != inkOpacity->isSelected())
-      saveBrush.inkOpacity(inkOpacity->isSelected());
-    if (saveBrush.shade() != shade->isSelected())
-      saveBrush.shade(shade->isSelected());
-    if (saveBrush.pixelPerfect() != pixelPerfect->isSelected())
-      saveBrush.pixelPerfect(pixelPerfect->isSelected());
+    if (saveBrush.brushType() != params.brushType()->isSelected())
+      saveBrush.brushType(params.brushType()->isSelected());
+    if (saveBrush.brushSize() != params.brushSize()->isSelected())
+      saveBrush.brushSize(params.brushSize()->isSelected());
+    if (saveBrush.brushAngle() != params.brushAngle()->isSelected())
+      saveBrush.brushAngle(params.brushAngle()->isSelected());
+    if (saveBrush.fgColor() != params.fgColor()->isSelected())
+      saveBrush.fgColor(params.fgColor()->isSelected());
+    if (saveBrush.bgColor() != params.bgColor()->isSelected())
+      saveBrush.bgColor(params.bgColor()->isSelected());
+    if (saveBrush.inkType() != params.inkType()->isSelected())
+      saveBrush.inkType(params.inkType()->isSelected());
+    if (saveBrush.inkOpacity() != params.inkOpacity()->isSelected())
+      saveBrush.inkOpacity(params.inkOpacity()->isSelected());
+    if (saveBrush.shade() != params.shade()->isSelected())
+      saveBrush.shade(params.shade()->isSelected());
+    if (saveBrush.pixelPerfect() != params.pixelPerfect()->isSelected())
+      saveBrush.pixelPerfect(params.pixelPerfect()->isSelected());
   }
 };
 
diff --git a/src/app/widget_loader.cpp b/src/app/widget_loader.cpp
index 9db8c9a..af2ff07 100644
--- a/src/app/widget_loader.cpp
+++ b/src/app/widget_loader.cpp
@@ -434,6 +434,12 @@ Widget* WidgetLoader::convertXmlElementToWidget(const TiXmlElement* elem, Widget
 
     if (!widget && columns)
       widget = new ButtonSet(strtol(columns, NULL, 10));
+
+    if (ButtonSet* buttonset = dynamic_cast<ButtonSet*>(widget)) {
+      bool multiple = bool_attr_is_true(elem, "multiple");
+      if (multiple)
+        buttonset->setMultipleSelection(multiple);
+    }
   }
   else if (elem_name == "item") {
     if (!parent)
diff --git a/src/gen/ui_class.cpp b/src/gen/ui_class.cpp
index 757745e..600ca6f 100644
--- a/src/gen/ui_class.cpp
+++ b/src/gen/ui_class.cpp
@@ -49,6 +49,10 @@ static void collect_widgets_with_ids(TiXmlElement* elem, XmlElements& widgets)
 
 static std::string convert_type(const std::string& name)
 {
+  static std::string parent;
+  if (name != "item")
+    parent = name;
+
   if (name == "box") return "ui::Box";
   if (name == "button") return "ui::Button";
   if (name == "buttonset") return "app::ButtonSet";
@@ -59,6 +63,7 @@ static std::string convert_type(const std::string& name)
   if (name == "entry") return "ui::Entry";
   if (name == "grid") return "ui::Grid";
   if (name == "hbox") return "ui::HBox";
+  if (name == "item" && parent == "buttonset") return "app::ButtonSet::Item";
   if (name == "label") return "ui::Label";
   if (name == "link") return "ui::LinkLabel";
   if (name == "listbox") return "ui::ListBox";

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