diff --git a/src/app/commands/cmd_new_file.cpp b/src/app/commands/cmd_new_file.cpp index 2aa07692b..fab9b35bc 100644 --- a/src/app/commands/cmd_new_file.cpp +++ b/src/app/commands/cmd_new_file.cpp @@ -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)); diff --git a/src/app/commands/cmd_new_sprite_from_selection.cpp b/src/app/commands/cmd_new_sprite_from_selection.cpp index 6a7049ea5..e14dd87fe 100644 --- a/src/app/commands/cmd_new_sprite_from_selection.cpp +++ b/src/app/commands/cmd_new_sprite_from_selection.cpp @@ -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))); diff --git a/src/app/doc_exporter.cpp b/src/app/doc_exporter.cpp index 239a9be59..703251014 100644 --- a/src/app/doc_exporter.cpp +++ b/src/app/doc_exporter.cpp @@ -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) diff --git a/src/app/docs.cpp b/src/app/docs.cpp index 6900d13c5..36823692c 100644 --- a/src/app/docs.cpp +++ b/src/app/docs.cpp @@ -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 diff --git a/src/app/file/palette_file.cpp b/src/app/file/palette_file.cpp index 766241ce6..aea82b0f6 100644 --- a/src/app/file/palette_file.cpp +++ b/src/app/file/palette_file.cpp @@ -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()))); diff --git a/src/app/script/image_class.cpp b/src/app/script/image_class.cpp index a6b2cd72b..3458d38b3 100644 --- a/src/app/script/image_class.cpp +++ b/src/app/script/image_class.cpp @@ -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); diff --git a/src/app/script/sprite_class.cpp b/src/app/script/sprite_class.cpp index 645e8d820..2ebc0e446 100644 --- a/src/app/script/sprite_class.cpp +++ b/src/app/script/sprite_class.cpp @@ -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(); } diff --git a/src/doc/image_spec.h b/src/doc/image_spec.h index 417be84cb..2332a1c48 100644 --- a/src/doc/image_spec.h +++ b/src/doc/image_spec.h @@ -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), diff --git a/src/doc/sprite.cpp b/src/doc/sprite.cpp index c38a4d039..a4bc7d6be 100644 --- a/src/doc/sprite.cpp +++ b/src/doc/sprite.cpp @@ -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)); diff --git a/src/doc/sprite.h b/src/doc/sprite.h index 33d2800ca..91a928bce 100644 --- a/src/doc/sprite.h +++ b/src/doc/sprite.h @@ -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 diff --git a/src/render/render_benchmark.cpp b/src/render/render_benchmark.cpp index c44dfba90..4b23d05f7 100644 --- a/src/render/render_benchmark.cpp +++ b/src/render/render_benchmark.cpp @@ -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); diff --git a/src/render/render_tests.cpp b/src/render/render_tests.cpp index 323d474d0..6f3e8188a 100644 --- a/src/render/render_tests.cpp +++ b/src/render/render_tests.cpp @@ -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));