mirror of
https://github.com/aseprite/aseprite.git
synced 2025-03-22 01:21:19 +00:00
Fix transparent color for sprites created w/NewSpriteFromSelection
Fixes https://community.aseprite.org/t/3629
This commit is contained in:
parent
b55d407ac1
commit
744bd36408
@ -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));
|
||||
|
||||
|
@ -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)));
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
||||
|
@ -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())));
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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),
|
||||
|
@ -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));
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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));
|
||||
|
Loading…
x
Reference in New Issue
Block a user