Add LayerFill type

This commit is contained in:
David Capello 2025-09-26 16:34:31 -03:00
parent 9cdcb36c00
commit 147a2308c6
10 changed files with 85 additions and 7 deletions

View File

@ -365,6 +365,7 @@ NewLayer_Layer = Layer
NewLayer_Group = Group
NewLayer_ReferenceLayer = Reference Layer
NewLayer_TilemapLayer = Tilemap
NewLayer_FillLayer = Fill
NewLayer_MaskLayer = Mask
NewLayer_FxLayer = Fx
NewLayer_TextLayer = Text

View File

@ -34,6 +34,7 @@
#include "app/util/new_image_from_mask.h"
#include "doc/layer.h"
#include "doc/layer_audio.h"
#include "doc/layer_fill.h"
#include "doc/layer_fx.h"
#include "doc/layer_hitbox.h"
#include "doc/layer_mask.h"
@ -88,6 +89,7 @@ public:
Group,
ReferenceLayer,
TilemapLayer,
FillLayer,
MaskLayer,
FxLayer,
TextLayer,
@ -133,6 +135,8 @@ void NewLayerCommand::onLoadParams(const Params& commandParams)
else if (params().tilemap() || params().type() == "tilemap")
m_type = Type::TilemapLayer;
#ifdef ENABLE_DEVMODE // TODO not yet production-ready
else if (params().type() == "fill")
m_type = Type::FillLayer;
else if (params().type() == "mask")
m_type = Type::MaskLayer;
else if (params().type() == "fx")
@ -331,6 +335,14 @@ void NewLayerCommand::onExecute(Context* context)
break;
}
case Type::FillLayer: {
layer = new LayerFill(parent->sprite());
layer->setName(name);
api.addLayer(parent, layer, parent->lastLayer());
break;
}
case Type::MaskLayer: {
layer = new LayerMask(parent->sprite());
layer->setName(name);
@ -627,8 +639,9 @@ std::string NewLayerCommand::layerPrefix() const
case Type::Group: return Strings::commands_NewLayer_Group();
case Type::ReferenceLayer: return Strings::commands_NewLayer_ReferenceLayer();
case Type::TilemapLayer: return Strings::commands_NewLayer_TilemapLayer();
case Type::FxLayer: return Strings::commands_NewLayer_FxLayer();
case Type::FillLayer: return Strings::commands_NewLayer_FillLayer();
case Type::MaskLayer: return Strings::commands_NewLayer_MaskLayer();
case Type::FxLayer: return Strings::commands_NewLayer_FxLayer();
case Type::TextLayer: return Strings::commands_NewLayer_TextLayer();
case Type::VectorLayer: return Strings::commands_NewLayer_VectorLayer();
case Type::AudioLayer: return Strings::commands_NewLayer_AudioLayer();

View File

@ -29,6 +29,7 @@
#include "doc/image_io.h"
#include "doc/layer.h"
#include "doc/layer_audio.h"
#include "doc/layer_fill.h"
#include "doc/layer_fx.h"
#include "doc/layer_hitbox.h"
#include "doc/layer_mask.h"
@ -477,6 +478,8 @@ private:
case ObjectType::LayerGroup: lay = std::make_unique<LayerGroup>(m_sprite); break;
case ObjectType::LayerFill: lay = std::make_unique<LayerFill>(m_sprite); break;
case ObjectType::LayerMask: lay = std::make_unique<LayerMask>(m_sprite); break;
case ObjectType::LayerFx: lay = std::make_unique<LayerFx>(m_sprite); break;

View File

@ -265,6 +265,7 @@ private:
// writeSprite/writeAllLayersID() functions)
break;
case ObjectType::LayerFill:
case ObjectType::LayerMask:
case ObjectType::LayerFx:
case ObjectType::LayerText:

View File

@ -54,6 +54,7 @@
#include "doc/algorithm/shrink_bounds.h"
#include "doc/cel.h"
#include "doc/layer_audio.h"
#include "doc/layer_fill.h"
#include "doc/layer_fx.h"
#include "doc/layer_hitbox.h"
#include "doc/layer_mask.h"
@ -724,6 +725,7 @@ Layer* DocApi::copyLayerWithSprite(doc::Layer* layer, doc::Sprite* sprite)
break;
}
case ObjectType::LayerFill: clone = std::make_unique<LayerFill>(sprite); break;
case ObjectType::LayerMask: clone = std::make_unique<LayerMask>(sprite); break;
case ObjectType::LayerFx: clone = std::make_unique<LayerFx>(sprite); break;
case ObjectType::LayerText: clone = std::make_unique<LayerText>(sprite); break;

View File

@ -48,6 +48,7 @@ add_library(doc-lib
image_iterators2.cpp
layer.cpp
layer_audio.cpp
layer_fill.cpp
layer_fx.cpp
layer_hitbox.cpp
layer_io.cpp

23
src/doc/layer_fill.cpp Normal file
View File

@ -0,0 +1,23 @@
// Aseprite Document Library
// Copyright (c) 2025 Igara Studio S.A.
//
// 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/layer_fill.h"
namespace doc {
LayerFill::LayerFill(Sprite* sprite) : Layer(ObjectType::LayerFill, sprite)
{
}
LayerFill::~LayerFill()
{
}
} // namespace doc

27
src/doc/layer_fill.h Normal file
View File

@ -0,0 +1,27 @@
// Aseprite Document Library
// Copyright (C) 2025 Igara Studio S.A.
//
// This file is released under the terms of the MIT license.
// Read LICENSE.txt for more information.
#ifndef DOC_LAYER_FILL_H_INCLUDED
#define DOC_LAYER_FILL_H_INCLUDED
#pragma once
#include "doc/layer.h"
namespace doc {
// Fills the whole canvas with a solid color or a gradient.
// TODO to implement
class LayerFill final : public Layer {
public:
LayerFill(Sprite* sprite);
virtual ~LayerFill();
// TODO associated fill data per frame/keyframe
};
} // namespace doc
#endif

View File

@ -19,6 +19,7 @@
#include "doc/image_io.h"
#include "doc/layer.h"
#include "doc/layer_audio.h"
#include "doc/layer_fill.h"
#include "doc/layer_fx.h"
#include "doc/layer_hitbox.h"
#include "doc/layer_io.h"
@ -132,6 +133,7 @@ Layer* read_layer(std::istream& is, SubObjectsFromSprite* subObjects, const Seri
switch (static_cast<ObjectType>(layer_type)) {
case ObjectType::LayerImage:
case ObjectType::LayerTilemap:
case ObjectType::LayerFill:
case ObjectType::LayerMask:
case ObjectType::LayerFx:
case ObjectType::LayerText:
@ -147,6 +149,9 @@ Layer* read_layer(std::istream& is, SubObjectsFromSprite* subObjects, const Seri
case ObjectType::LayerTilemap:
layer = std::make_unique<LayerTilemap>(subObjects->sprite(), 0);
break;
case ObjectType::LayerFill:
layer = std::make_unique<LayerFill>(subObjects->sprite());
break;
case ObjectType::LayerMask:
layer = std::make_unique<LayerMask>(subObjects->sprite());
break;

View File

@ -38,13 +38,15 @@ enum class ObjectType : uint16_t {
Tileset = 15,
Tilesets = 16,
LayerMask = 17,
LayerFx = 18,
LayerText = 19,
LayerVector = 20,
LayerAudio = 21,
LayerSubsprite = 22,
LayerFill = 17,
LayerMask = 18,
LayerFx = 19,
LayerText = 20,
LayerVector = 21,
LayerAudio = 22,
LayerHitbox = 23,
LayerSubsprite = 24,
};
} // namespace doc