mirror of
https://github.com/aseprite/aseprite.git
synced 2025-04-09 18:44:46 +00:00
lua: image:clear() without args must clear w/image.spec.transparentColor
This commit is contained in:
parent
c91d4b1430
commit
5bba827924
@ -1,4 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2018 Igara Studio S.A.
|
||||
// Copyright (C) 2015-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -54,6 +55,7 @@ int Image_new(lua_State* L)
|
||||
spec.setColorMode((doc::ColorMode)colorMode);
|
||||
}
|
||||
doc::ImageRef image(doc::Image::create(spec));
|
||||
doc::clear_image(image.get(), spec.maskColor());
|
||||
push_new<ImageObj>(L, image, nullptr);
|
||||
return 1;
|
||||
}
|
||||
@ -76,7 +78,9 @@ int Image_clear(lua_State* L)
|
||||
{
|
||||
auto obj = get_obj<ImageObj>(L, 1);
|
||||
doc::color_t color;
|
||||
if (lua_isinteger(L, 2))
|
||||
if (lua_isnone(L, 2))
|
||||
color = obj->image.get()->maskColor();
|
||||
else if (lua_isinteger(L, 2))
|
||||
color = lua_tointeger(L, 2);
|
||||
else
|
||||
color = convert_args_into_pixel_color(L, 2);
|
||||
|
@ -1,4 +1,5 @@
|
||||
// Aseprite Document Library
|
||||
// Copyright (c) 2018 Igara Studio S.A.
|
||||
// Copyright (c) 2001-2016 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
@ -19,9 +20,9 @@
|
||||
|
||||
namespace doc {
|
||||
|
||||
Image::Image(PixelFormat format, int width, int height)
|
||||
Image::Image(const ImageSpec& spec)
|
||||
: Object(ObjectType::Image)
|
||||
, m_spec((ColorMode)format, width, height, 0)
|
||||
, m_spec(spec)
|
||||
{
|
||||
}
|
||||
|
||||
@ -48,21 +49,20 @@ int Image::getRowStrideSize(int pixels_per_row) const
|
||||
Image* Image::create(PixelFormat format, int width, int height,
|
||||
const ImageBufferPtr& buffer)
|
||||
{
|
||||
switch (format) {
|
||||
case IMAGE_RGB: return new ImageImpl<RgbTraits>(width, height, buffer);
|
||||
case IMAGE_GRAYSCALE: return new ImageImpl<GrayscaleTraits>(width, height, buffer);
|
||||
case IMAGE_INDEXED: return new ImageImpl<IndexedTraits>(width, height, buffer);
|
||||
case IMAGE_BITMAP: return new ImageImpl<BitmapTraits>(width, height, buffer);
|
||||
}
|
||||
return NULL;
|
||||
return Image::create(ImageSpec((ColorMode)format, width, height, 0), buffer);
|
||||
}
|
||||
|
||||
// static
|
||||
Image* Image::create(const ImageSpec& spec,
|
||||
const ImageBufferPtr& buffer)
|
||||
{
|
||||
return Image::create((PixelFormat)spec.colorMode(),
|
||||
spec.width(), spec.height(), buffer);
|
||||
switch (spec.colorMode()) {
|
||||
case ColorMode::RGB: return new ImageImpl<RgbTraits>(spec, buffer);
|
||||
case ColorMode::GRAYSCALE: return new ImageImpl<GrayscaleTraits>(spec, buffer);
|
||||
case ColorMode::INDEXED: return new ImageImpl<IndexedTraits>(spec, buffer);
|
||||
case ColorMode::BITMAP: return new ImageImpl<BitmapTraits>(spec, buffer);
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// static
|
||||
|
@ -1,4 +1,5 @@
|
||||
// Aseprite Document Library
|
||||
// Copyright (c) 2018 Igara Studio S.A.
|
||||
// Copyright (c) 2001-2016 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
@ -85,7 +86,7 @@ namespace doc {
|
||||
virtual void blendRect(int x1, int y1, int x2, int y2, color_t color, int opacity) = 0;
|
||||
|
||||
protected:
|
||||
Image(PixelFormat format, int width, int height);
|
||||
Image(const ImageSpec& spec);
|
||||
|
||||
private:
|
||||
ImageSpec m_spec;
|
||||
|
@ -1,4 +1,5 @@
|
||||
// Aseprite Document Library
|
||||
// Copyright (c) 2018 Igara Studio S.A.
|
||||
// Copyright (c) 2001-2016 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
@ -55,14 +56,16 @@ namespace doc {
|
||||
return (address_t)(m_rows[y] + x / (Traits::pixels_per_byte == 0 ? 1 : Traits::pixels_per_byte));
|
||||
}
|
||||
|
||||
ImageImpl(int width, int height,
|
||||
ImageImpl(const ImageSpec& spec,
|
||||
const ImageBufferPtr& buffer)
|
||||
: Image(static_cast<PixelFormat>(Traits::pixel_format), width, height)
|
||||
: Image(spec)
|
||||
, m_buffer(buffer)
|
||||
{
|
||||
std::size_t for_rows = sizeof(address_t) * height;
|
||||
std::size_t rowstride_bytes = Traits::getRowStrideBytes(width);
|
||||
std::size_t required_size = for_rows + rowstride_bytes*height;
|
||||
ASSERT(Traits::color_mode == spec.colorMode());
|
||||
|
||||
std::size_t for_rows = sizeof(address_t) * spec.height();
|
||||
std::size_t rowstride_bytes = Traits::getRowStrideBytes(spec.width());
|
||||
std::size_t required_size = for_rows + rowstride_bytes*spec.height();
|
||||
|
||||
if (!m_buffer)
|
||||
m_buffer.reset(new ImageBuffer(required_size));
|
||||
@ -73,7 +76,7 @@ namespace doc {
|
||||
m_bits = (address_t)(m_buffer->buffer() + for_rows);
|
||||
|
||||
address_t addr = m_bits;
|
||||
for (int y=0; y<height; ++y) {
|
||||
for (int y=0; y<spec.height(); ++y) {
|
||||
m_rows[y] = addr;
|
||||
addr = (address_t)(((uint8_t*)addr) + rowstride_bytes);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user