[aseprite] 95/308: Add color field to doc::UserData

Tobias Hansen thansen at moszumanska.debian.org
Tue Mar 8 02:44:56 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 addddf78a5a59ca385ea0bfccb2e08489cc0419c
Author: David Capello <davidcapello at gmail.com>
Date:   Fri Dec 11 19:18:36 2015 -0300

    Add color field to doc::UserData
---
 docs/files/ase.txt             |  6 ++++++
 src/app/file/ase_format.cpp    | 29 +++++++++++++++++++++++++++--
 src/app/ui/user_data_popup.cpp | 22 ++++++++++++++++++++--
 src/doc/user_data.h            | 16 ++++++++++++++--
 src/doc/user_data_io.cpp       |  2 ++
 5 files changed, 69 insertions(+), 6 deletions(-)

diff --git a/docs/files/ase.txt b/docs/files/ase.txt
index 881244b..647f194 100644
--- a/docs/files/ase.txt
+++ b/docs/files/ase.txt
@@ -278,8 +278,14 @@ belongs to that cel, etc.
 
   DWORD         Flags
                    1 = Has text
+                   2 = Has color
   + If flags has bit 1:
     STRING        Text
+  + If flags has bit 2:
+    BYTE          Color Red (0-255)
+    BYTE          Color Green (0-255)
+    BYTE          Color Blue (0-255)
+    BYTE          Color Alpha (0-255)
 
 
 Notes
diff --git a/src/app/file/ase_format.cpp b/src/app/file/ase_format.cpp
index 434255f..07c992f 100644
--- a/src/app/file/ase_format.cpp
+++ b/src/app/file/ase_format.cpp
@@ -49,6 +49,7 @@
 #define ASE_PALETTE_FLAG_HAS_NAME           1
 
 #define ASE_USER_DATA_FLAG_HAS_TEXT         1
+#define ASE_USER_DATA_FLAG_HAS_COLOR        2
 
 namespace app {
 
@@ -1459,17 +1460,41 @@ static void ase_file_write_frame_tags_chunk(FILE* f, ASE_FrameHeader* frame_head
 static void ase_file_read_user_data_chunk(FILE* f, UserData* userData)
 {
   size_t flags = fgetl(f);
+
   if (flags & ASE_USER_DATA_FLAG_HAS_TEXT) {
     std::string text = ase_file_read_string(f);
     userData->setText(text);
   }
+
+  if (flags & ASE_USER_DATA_FLAG_HAS_COLOR) {
+    int r = fgetc(f);
+    int g = fgetc(f);
+    int b = fgetc(f);
+    int a = fgetc(f);
+    userData->setColor(doc::rgba(r, g, b, a));
+  }
 }
 
 static void ase_file_write_user_data_chunk(FILE* f, ASE_FrameHeader* frame_header, const UserData* userData)
 {
   ChunkWriter chunk(f, frame_header, ASE_FILE_CHUNK_USER_DATA);
-  fputl(ASE_USER_DATA_FLAG_HAS_TEXT, f);
-  ase_file_write_string(f, userData->text().c_str());
+
+  int flags = 0;
+  if (!userData->text().empty())
+    flags |= ASE_USER_DATA_FLAG_HAS_TEXT;
+  if (doc::rgba_geta(userData->color()))
+    flags |= ASE_USER_DATA_FLAG_HAS_COLOR;
+  fputl(flags, f);
+
+  if (flags & ASE_USER_DATA_FLAG_HAS_TEXT)
+    ase_file_write_string(f, userData->text().c_str());
+
+  if (flags & ASE_USER_DATA_FLAG_HAS_COLOR) {
+    fputc(doc::rgba_getr(userData->color()), f);
+    fputc(doc::rgba_getg(userData->color()), f);
+    fputc(doc::rgba_getb(userData->color()), f);
+    fputc(doc::rgba_geta(userData->color()), f);
+  }
 }
 
 } // namespace app
diff --git a/src/app/ui/user_data_popup.cpp b/src/app/ui/user_data_popup.cpp
index 2568476..43da5f5 100644
--- a/src/app/ui/user_data_popup.cpp
+++ b/src/app/ui/user_data_popup.cpp
@@ -11,6 +11,8 @@
 
 #include "app/ui/user_data_popup.h"
 
+#include "app/color_utils.h"
+#include "app/ui/color_button.h"
 #include "doc/user_data.h"
 
 #include "user_data.xml.h"
@@ -42,12 +44,28 @@ bool show_user_data_popup(const gfx::Rect& bounds,
   UserDataPopup window;
 
   window.text()->setText(userData.text());
-  window.pointAt(TOP, bounds);
 
+  doc::color_t color = userData.color();
+  window.color()->setPixelFormat(IMAGE_RGB);
+  window.color()->setColor(
+    app::Color::fromRgb(doc::rgba_getr(color),
+                        doc::rgba_getg(color),
+                        doc::rgba_getb(color),
+                        doc::rgba_geta(color)));
+
+  window.pointAt(TOP, bounds);
   window.openWindowInForeground();
 
-  if (userData.text() != window.text()->text()) {
+  app::Color appColor = window.color()->getColor();
+  color = doc::rgba(appColor.getRed(),
+                    appColor.getGreen(),
+                    appColor.getBlue(),
+                    appColor.getAlpha());
+
+  if (userData.text() != window.text()->text() ||
+      userData.color() != color) {
     userData.setText(window.text()->text());
+    userData.setColor(color);
     return true;
   }
   else {
diff --git a/src/doc/user_data.h b/src/doc/user_data.h
index b214709..926735e 100644
--- a/src/doc/user_data.h
+++ b/src/doc/user_data.h
@@ -8,20 +8,31 @@
 #define DOC_USER_DATA_H_INCLUDED
 #pragma once
 
+#include "doc/color.h"
+
 #include <string>
 
 namespace doc {
 
   class UserData {
   public:
+    UserData() : m_color(0) {
+    }
+
     size_t size() const { return m_text.size(); }
-    bool isEmpty() const { return m_text.empty(); }
+    bool isEmpty() const {
+      return m_text.empty() && !doc::rgba_geta(m_color);
+    }
 
     const std::string& text() const { return m_text; }
+    color_t color() const { return m_color; }
+
     void setText(const std::string& text) { m_text = text; }
+    void setColor(color_t color) { m_color = color; }
 
     bool operator==(const UserData& other) const {
-      return (m_text == other.m_text);
+      return (m_text == other.m_text &&
+              m_color == other.m_color);
     }
 
     bool operator!=(const UserData& other) const {
@@ -30,6 +41,7 @@ namespace doc {
 
   private:
     std::string m_text;
+    color_t m_color;
   };
 
 } // namespace doc
diff --git a/src/doc/user_data_io.cpp b/src/doc/user_data_io.cpp
index fa98d8e..2d458ff 100644
--- a/src/doc/user_data_io.cpp
+++ b/src/doc/user_data_io.cpp
@@ -24,12 +24,14 @@ using namespace base::serialization::little_endian;
 void write_user_data(std::ostream& os, const UserData& userData)
 {
   write_string(os, userData.text());
+  write32(os, userData.color());
 }
 
 UserData read_user_data(std::istream& is)
 {
   UserData userData;
   userData.setText(read_string(is));
+  userData.setColor(read32(is));
   return userData;
 }
 

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