mirror of
https://github.com/aseprite/aseprite.git
synced 2025-03-29 19:20:09 +00:00
Serialize user data for layers and cel data
In this way undo/redo restore user data.
This commit is contained in:
parent
9e6e303ccd
commit
8b5d013b03
@ -55,7 +55,8 @@ add_library(doc-lib
|
||||
sprite.cpp
|
||||
sprites.cpp
|
||||
string_io.cpp
|
||||
subobjects_io.cpp)
|
||||
subobjects_io.cpp
|
||||
user_data_io.cpp)
|
||||
|
||||
# TODO Remove 'she' as dependency and move conversion_she.cpp/h files
|
||||
# to other library/layer (render-lib? new conversion-lib?)
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "base/unique_ptr.h"
|
||||
#include "doc/cel_data.h"
|
||||
#include "doc/subobjects_io.h"
|
||||
#include "doc/user_data_io.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
@ -29,6 +30,7 @@ void write_celdata(std::ostream& os, const CelData* celdata)
|
||||
write32(os, (int16_t)celdata->position().y);
|
||||
write8(os, celdata->opacity());
|
||||
write32(os, celdata->image()->id());
|
||||
write_user_data(os, celdata->userData());
|
||||
}
|
||||
|
||||
CelData* read_celdata(std::istream& is, SubObjectsIO* subObjects, bool setId)
|
||||
@ -38,6 +40,8 @@ CelData* read_celdata(std::istream& is, SubObjectsIO* subObjects, bool setId)
|
||||
int y = read32(is);
|
||||
int opacity = read8(is);
|
||||
ObjectId imageId = read32(is);
|
||||
UserData userData = read_user_data(is);
|
||||
|
||||
ImageRef image(subObjects->getImageRef(imageId));
|
||||
if (!image)
|
||||
return nullptr;
|
||||
@ -45,6 +49,7 @@ CelData* read_celdata(std::istream& is, SubObjectsIO* subObjects, bool setId)
|
||||
base::UniquePtr<CelData> celdata(new CelData(image));
|
||||
celdata->setPosition(x, y);
|
||||
celdata->setOpacity(opacity);
|
||||
celdata->setUserData(userData);
|
||||
if (setId)
|
||||
celdata->setId(id);
|
||||
return celdata.release();
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "doc/sprite.h"
|
||||
#include "doc/string_io.h"
|
||||
#include "doc/subobjects_io.h"
|
||||
#include "doc/user_data_io.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
@ -99,6 +100,8 @@ void write_layer(std::ostream& os, const Layer* layer)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
write_user_data(os, layer->userData());
|
||||
}
|
||||
|
||||
Layer* read_layer(std::istream& is, SubObjectsFromSprite* subObjects)
|
||||
@ -107,7 +110,6 @@ Layer* read_layer(std::istream& is, SubObjectsFromSprite* subObjects)
|
||||
std::string name = read_string(is);
|
||||
uint32_t flags = read32(is); // Flags
|
||||
uint16_t layer_type = read16(is); // Type
|
||||
|
||||
base::UniquePtr<Layer> layer;
|
||||
|
||||
switch (static_cast<ObjectType>(layer_type)) {
|
||||
@ -169,10 +171,13 @@ Layer* read_layer(std::istream& is, SubObjectsFromSprite* subObjects)
|
||||
|
||||
}
|
||||
|
||||
UserData userData = read_user_data(is);
|
||||
|
||||
if (layer) {
|
||||
layer->setName(name);
|
||||
layer->setFlags(static_cast<LayerFlags>(flags));
|
||||
layer->setId(id);
|
||||
layer->setUserData(userData);
|
||||
}
|
||||
|
||||
return layer.release();
|
||||
|
36
src/doc/user_data_io.cpp
Normal file
36
src/doc/user_data_io.cpp
Normal file
@ -0,0 +1,36 @@
|
||||
// Aseprite Document Library
|
||||
// Copyright (c) 2001-2015 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
// Read LICENSE.txt for more information.
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "doc/user_data_io.h"
|
||||
|
||||
#include "base/serialization.h"
|
||||
#include "doc/string_io.h"
|
||||
#include "doc/user_data.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
namespace doc {
|
||||
|
||||
using namespace base::serialization;
|
||||
using namespace base::serialization::little_endian;
|
||||
|
||||
void write_user_data(std::ostream& os, const UserData& userData)
|
||||
{
|
||||
write_string(os, userData.text());
|
||||
}
|
||||
|
||||
UserData read_user_data(std::istream& is)
|
||||
{
|
||||
UserData userData;
|
||||
userData.setText(read_string(is));
|
||||
return userData;
|
||||
}
|
||||
|
||||
}
|
22
src/doc/user_data_io.h
Normal file
22
src/doc/user_data_io.h
Normal file
@ -0,0 +1,22 @@
|
||||
// Aseprite Document Library
|
||||
// Copyright (c) 2001-2015 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
// Read LICENSE.txt for more information.
|
||||
|
||||
#ifndef DOC_USER_DATA_IO_H_INCLUDED
|
||||
#define DOC_USER_DATA_IO_H_INCLUDED
|
||||
#pragma once
|
||||
|
||||
#include <iosfwd>
|
||||
|
||||
namespace doc {
|
||||
|
||||
class UserData;
|
||||
|
||||
void write_user_data(std::ostream& os, const UserData& userData);
|
||||
UserData read_user_data(std::istream& is);
|
||||
|
||||
} // namespace doc
|
||||
|
||||
#endif
|
@ -18,9 +18,7 @@ namespace doc {
|
||||
WithUserData(ObjectType type) : Object(type) {
|
||||
}
|
||||
|
||||
const UserData& userData() const {
|
||||
return m_userData;
|
||||
}
|
||||
const UserData& userData() const { return m_userData; }
|
||||
|
||||
void setUserData(const UserData& userData) {
|
||||
m_userData = userData;
|
||||
|
Loading…
x
Reference in New Issue
Block a user