axmol/extensions/DragonBones/model/TextureAtlasData.cpp

106 lines
2.0 KiB
C++

#include "TextureAtlasData.h"
DRAGONBONES_NAMESPACE_BEGIN
void TextureAtlasData::_onClear()
{
for (const auto& pair : textures)
{
pair.second->returnToPool();
}
autoSearch = false;
format = TextureFormat::DEFAULT;
width = 0;
height = 0;
scale = 1.0f;
name = "";
imagePath.clear();
textures.clear();
}
void TextureAtlasData::copyFrom(const TextureAtlasData& value)
{
autoSearch = value.autoSearch;
format = value.format;
width = value.width;
height = value.height;
scale = value.scale;
name = value.name;
imagePath = value.imagePath;
for (const auto& pair : textures)
{
pair.second->returnToPool();
}
textures.clear();
for (const auto& pair : value.textures)
{
const auto texture = createTexture();
texture->copyFrom(*(pair.second));
textures[pair.first] = texture;
}
}
void TextureAtlasData::addTexture(TextureData* value)
{
if (textures.find(value->name) != textures.cend())
{
DRAGONBONES_ASSERT(false, "Same texture: " + value->name);
return;
}
textures[value->name] = value;
value->parent = this;
}
Rectangle* TextureData::createRectangle()
{
return new Rectangle();
}
TextureData::~TextureData()
{
}
void TextureData::_onClear()
{
if (frame != nullptr)
{
delete frame;
}
rotated = false;
name = "";
region.clear();
parent = nullptr;
frame = nullptr;
}
void TextureData::copyFrom(const TextureData &value)
{
rotated = value.rotated;
name = value.name;
region = value.region; // Copy.
parent = value.parent;
if (frame == nullptr && value.frame != nullptr)
{
frame = TextureData::createRectangle();
}
else if (frame != nullptr && value.frame == nullptr)
{
delete frame;
frame = nullptr;
}
if (frame != nullptr && value.frame != nullptr)
{
*frame = *(value.frame); // Copy.
}
}
DRAGONBONES_NAMESPACE_END