Fix transparent color for sprites created w/NewSpriteFromSelection

Fixes https://community.aseprite.org/t/3629
This commit is contained in:
David Capello 2019-08-06 16:18:01 -03:00
parent b55d407ac1
commit 744bd36408
12 changed files with 37 additions and 31 deletions

View File

@ -226,7 +226,7 @@ void NewFileCommand::onExecute(Context* ctx)
// Create the new sprite
std::unique_ptr<Sprite> sprite(
Sprite::createBasicSprite(
Sprite::MakeStdSprite(
ImageSpec(colorMode, width, height, 0,
get_working_rgb_space_from_preferences()), ncolors));

View File

@ -62,11 +62,13 @@ void NewSpriteFromSelectionCommand::onExecute(Context* context)
Palette* palette = sprite->palette(site.frame());
std::unique_ptr<Sprite> dstSprite(
Sprite::createBasicSprite(ImageSpec((ColorMode)image->pixelFormat(),
image->width(),
image->height(),
palette->size(),
sprite->colorSpace())));
Sprite::MakeStdSprite(
ImageSpec((ColorMode)image->pixelFormat(),
image->width(),
image->height(),
sprite->transparentColor(),
sprite->colorSpace()),
palette->size()));
palette->copyColorsTo(dstSprite->palette(frame_t(0)));

View File

@ -714,9 +714,10 @@ Doc* DocExporter::createEmptyTexture(const Samples& samples) const
gfx::Size textureSize = calculateSheetSize(samples);
std::unique_ptr<Sprite> sprite(
Sprite::createBasicSprite(
Sprite::MakeStdSprite(
// TODO calculate a proper transparent color for the sprite sheet
ImageSpec(colorMode, textureSize.w, textureSize.h, 0,
colorSpace ? colorSpace: gfx::ColorSpace::MakeNone()),
(colorSpace ? colorSpace: gfx::ColorSpace::MakeNone())),
maxColors));
if (palette != NULL)

View File

@ -1,5 +1,5 @@
// Aseprite
// Copyright (C) 2018 Igara Studio S.A.
// Copyright (C) 2018-2019 Igara Studio S.A.
// Copyright (c) 2001-2018 David Capello
//
// This program is distributed under the terms of
@ -50,7 +50,7 @@ Doc* Docs::add(Doc* doc)
Doc* Docs::add(int width, int height, doc::ColorMode colorMode, int ncolors)
{
std::unique_ptr<Doc> doc(
new Doc(Sprite::createBasicSprite(ImageSpec(colorMode, width, height), ncolors)));
new Doc(Sprite::MakeStdSprite(ImageSpec(colorMode, width, height), ncolors)));
doc->setFilename("Sprite");
doc->setContext(m_ctx); // Change the document context to add the doc in this collection

View File

@ -154,7 +154,7 @@ bool save_palette(const char* filename, const Palette* pal, int columns)
Context tmpContext;
Doc* doc = tmpContext.documents().add(
new Doc(Sprite::createBasicSprite(
new Doc(Sprite::MakeStdSprite(
ImageSpec((pal->size() <= 256 ? doc::ColorMode::INDEXED:
doc::ColorMode::RGB),
w, h), pal->size())));

View File

@ -316,7 +316,7 @@ int Image_saveAs(lua_State* L)
return luaL_error(L, "script doesn't have access to write file %s",
absFn.c_str());
std::unique_ptr<Sprite> sprite(Sprite::createBasicSprite(img->spec(), 256));
std::unique_ptr<Sprite> sprite(Sprite::MakeStdSprite(img->spec(), 256));
std::vector<Image*> oneImage;
sprite->getImages(oneImage);

View File

@ -113,7 +113,7 @@ int Sprite_new(lua_State* L)
if (spec.height() < 1)
return luaL_error(L, "invalid height value = %d in Sprite()", spec.height());
std::unique_ptr<Sprite> sprite(Sprite::createBasicSprite(spec, 256));
std::unique_ptr<Sprite> sprite(Sprite::MakeStdSprite(spec, 256));
doc.reset(new Doc(sprite.get()));
sprite.release();
}

View File

@ -1,5 +1,5 @@
// Aseprite Document Library
// Copyright (c) 2018 Igara Studio S.A.
// Copyright (c) 2018-2019 Igara Studio S.A.
// Copyright (c) 2016 David Capello
//
// This file is released under the terms of the MIT license.
@ -20,10 +20,10 @@ namespace doc {
class ImageSpec {
public:
ImageSpec(ColorMode colorMode,
int width,
int height,
int maskColor = 0,
ImageSpec(const ColorMode colorMode,
const int width,
const int height,
const color_t maskColor = 0,
const gfx::ColorSpacePtr& colorSpace = gfx::ColorSpace::MakeNone())
: m_colorMode(colorMode),
m_width(width),

View File

@ -1,5 +1,5 @@
// Aseprite Document Library
// Copyright (c) 2018 Igara Studio S.A.
// Copyright (c) 2018-2019 Igara Studio S.A.
// Copyright (c) 2001-2018 David Capello
//
// This file is released under the terms of the MIT license.
@ -89,8 +89,8 @@ Sprite::~Sprite()
}
// static
Sprite* Sprite::createBasicSprite(const ImageSpec& spec,
const int ncolors)
Sprite* Sprite::MakeStdSprite(const ImageSpec& spec,
const int ncolors)
{
// Create the sprite.
std::unique_ptr<Sprite> sprite(new Sprite(spec, ncolors));

View File

@ -1,5 +1,5 @@
// Aseprite Document Library
// Copyright (c) 2018 Igara Studio S.A.
// Copyright (c) 2018-2019 Igara Studio S.A.
// Copyright (c) 2001-2018 David Capello
//
// This file is released under the terms of the MIT license.
@ -59,8 +59,10 @@ namespace doc {
Sprite(const ImageSpec& spec, int ncolors = 256);
virtual ~Sprite();
static Sprite* createBasicSprite(const ImageSpec& spec,
const int ncolors = 256);
// Creates a new sprite with one transparent layer and one cel
// with an image of the size of the sprite.
static Sprite* MakeStdSprite(const ImageSpec& spec,
const int ncolors = 256);
////////////////////////////////////////
// Main properties

View File

@ -27,7 +27,7 @@ static void Bm_Render(benchmark::State& state)
const int w = state.range(0);
const int h = state.range(1);
Sprite* spr = Sprite::createBasicSprite(ImageSpec(ColorMode::RGB, w, h));
Sprite* spr = Sprite::MakeStdSprite(ImageSpec(ColorMode::RGB, w, h));
LayerImage* lay1 = static_cast<LayerImage*>(spr->root()->firstLayer());
LayerImage* lay2 = new LayerImage(spr);
LayerImage* lay3 = new LayerImage(spr);

View File

@ -1,4 +1,5 @@
// Aseprite Document Library
// Copyright (c) 2019 Igara Studio S.A.
// Copyright (c) 2001-2018 David Capello
//
// This file is released under the terms of the MIT license.
@ -66,7 +67,7 @@ TYPED_TEST_CASE(RenderAllModes, ImageAllTraits);
TEST(Render, Basic)
{
Document* doc = new Document;
doc->sprites().add(Sprite::createBasicSprite(ImageSpec(ColorMode::INDEXED, 2, 2)));
doc->sprites().add(Sprite::MakeStdSprite(ImageSpec(ColorMode::INDEXED, 2, 2)));
Image* src = doc->sprite()->root()->firstLayer()->cel(0)->image();
clear_image(src, 2);
@ -85,7 +86,7 @@ TYPED_TEST(RenderAllModes, CheckDefaultBackgroundMode)
typedef TypeParam ImageTraits;
Document* doc = new Document;
doc->sprites().add(Sprite::createBasicSprite(ImageSpec(ImageTraits::color_mode, 2, 2)));
doc->sprites().add(Sprite::MakeStdSprite(ImageSpec(ImageTraits::color_mode, 2, 2)));
EXPECT_TRUE(!doc->sprite()->root()->firstLayer()->isBackground());
Image* src = doc->sprite()->root()->firstLayer()->cel(0)->image();
@ -105,7 +106,7 @@ TYPED_TEST(RenderAllModes, CheckDefaultBackgroundMode)
TEST(Render, DefaultBackgroundModeWithNonzeroTransparentIndex)
{
Document* doc = new Document;
doc->sprites().add(Sprite::createBasicSprite(ImageSpec(ColorMode::INDEXED, 2, 2)));
doc->sprites().add(Sprite::MakeStdSprite(ImageSpec(ColorMode::INDEXED, 2, 2)));
doc->sprite()->setTransparentColor(2); // Transparent color is index 2
EXPECT_TRUE(!doc->sprite()->root()->firstLayer()->isBackground());
@ -133,7 +134,7 @@ TEST(Render, DefaultBackgroundModeWithNonzeroTransparentIndex)
TEST(Render, CheckedBackground)
{
Document* doc = new Document;
doc->sprites().add(Sprite::createBasicSprite(ImageSpec(ColorMode::INDEXED, 4, 4)));
doc->sprites().add(Sprite::MakeStdSprite(ImageSpec(ColorMode::INDEXED, 4, 4)));
std::unique_ptr<Image> dst(Image::create(IMAGE_INDEXED, 4, 4));
clear_image(dst.get(), 0);
@ -185,7 +186,7 @@ TEST(Render, ZoomAndDstBounds)
// 0 4 4
// 0 4 4
Document* doc = new Document;
doc->sprites().add(Sprite::createBasicSprite(ImageSpec(ColorMode::INDEXED, 3, 3)));
doc->sprites().add(Sprite::MakeStdSprite(ImageSpec(ColorMode::INDEXED, 3, 3)));
Image* src = doc->sprite()->root()->firstLayer()->cel(0)->image();
clear_image(src, 0);
fill_rect(src, 1, 1, 2, 2, 4);
@ -213,7 +214,7 @@ TEST(Render, ZoomAndDstBounds)
TEST(Render, BugWithMultiplesOf3ZoomFactors)
{
Document* doc = new Document;
doc->sprites().add(Sprite::createBasicSprite(ImageSpec(ColorMode::RGB, 4, 4)));
doc->sprites().add(Sprite::MakeStdSprite(ImageSpec(ColorMode::RGB, 4, 4)));
Image* src = doc->sprite()->root()->firstLayer()->cel(0)->image();
clear_image(src, 0);
draw_line(src, 0, 0, 3, 3, rgba(255, 0, 0, 255));