mirror of
https://github.com/aseprite/aseprite.git
synced 2025-02-12 03:39:51 +00:00
Write/read user data from layers when recovering lost sprites (fix #2373)
This commit is contained in:
parent
46f4002368
commit
7e1e9a238e
@ -37,6 +37,7 @@
|
||||
#include "doc/subobjects_io.h"
|
||||
#include "doc/tag.h"
|
||||
#include "doc/tag_io.h"
|
||||
#include "doc/user_data_io.h"
|
||||
#include "fixmath/fixmath.h"
|
||||
|
||||
#include <fstream>
|
||||
@ -387,39 +388,50 @@ private:
|
||||
type == ObjectType::LayerGroup);
|
||||
|
||||
std::string name = read_string(s);
|
||||
std::unique_ptr<Layer> lay;
|
||||
|
||||
if (type == ObjectType::LayerImage) {
|
||||
std::unique_ptr<LayerImage> lay(new LayerImage(m_sprite));
|
||||
lay->setName(name);
|
||||
lay->setFlags(flags);
|
||||
switch (type) {
|
||||
case ObjectType::LayerImage: {
|
||||
lay.reset(new LayerImage(m_sprite));
|
||||
lay->setName(name);
|
||||
lay->setFlags(flags);
|
||||
|
||||
// Blend mode & opacity
|
||||
lay->setBlendMode((BlendMode)read16(s));
|
||||
lay->setOpacity(read8(s));
|
||||
// Blend mode & opacity
|
||||
static_cast<LayerImage*>(lay.get())->setBlendMode((BlendMode)read16(s));
|
||||
static_cast<LayerImage*>(lay.get())->setOpacity(read8(s));
|
||||
|
||||
// Cels
|
||||
int ncels = read32(s);
|
||||
for (int i=0; i<ncels; ++i) {
|
||||
if (canceled())
|
||||
return nullptr;
|
||||
// Cels
|
||||
int ncels = read32(s);
|
||||
for (int i=0; i<ncels; ++i) {
|
||||
if (canceled())
|
||||
return nullptr;
|
||||
|
||||
// Add a new cel to load in the future after we load all layers
|
||||
ObjectId celId = read32(s);
|
||||
m_celsToLoad.push_back(std::make_pair(lay->id(), celId));
|
||||
// Add a new cel to load in the future after we load all layers
|
||||
ObjectId celId = read32(s);
|
||||
m_celsToLoad.push_back(std::make_pair(lay->id(), celId));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case ObjectType::LayerGroup:
|
||||
lay.reset(new LayerGroup(m_sprite));
|
||||
lay->setName(name);
|
||||
lay->setFlags(flags);
|
||||
break;
|
||||
|
||||
default:
|
||||
Console().printf("Unable to load layer named '%s', type #%d\n",
|
||||
name.c_str(), (int)type);
|
||||
break;
|
||||
}
|
||||
|
||||
if (lay) {
|
||||
UserData userData = read_user_data(s);
|
||||
lay->setUserData(userData);
|
||||
return lay.release();
|
||||
}
|
||||
else if (type == ObjectType::LayerGroup) {
|
||||
std::unique_ptr<LayerGroup> lay(new LayerGroup(m_sprite));
|
||||
lay->setName(name);
|
||||
lay->setFlags(flags);
|
||||
return lay.release();
|
||||
}
|
||||
else {
|
||||
Console().printf("Unable to load layer named '%s', type #%d\n",
|
||||
name.c_str(), (int)type);
|
||||
else
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
Cel* readCel(std::ifstream& s) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2018-2019 Igara Studio S.A.
|
||||
// Copyright (C) 2018-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -34,6 +34,7 @@
|
||||
#include "doc/string_io.h"
|
||||
#include "doc/tag.h"
|
||||
#include "doc/tag_io.h"
|
||||
#include "doc/user_data_io.h"
|
||||
#include "fixmath/fixmath.h"
|
||||
|
||||
#include <fstream>
|
||||
@ -237,6 +238,9 @@ private:
|
||||
// writeSprite/writeAllLayersID() functions)
|
||||
break;
|
||||
}
|
||||
|
||||
// Save user data
|
||||
write_user_data(s, lay->userData());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user