mirror of
https://github.com/aseprite/aseprite.git
synced 2025-04-24 18:02:27 +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
|
// Aseprite
|
||||||
|
// Copyright (C) 2018 Igara Studio S.A.
|
||||||
// Copyright (C) 2015-2018 David Capello
|
// Copyright (C) 2015-2018 David Capello
|
||||||
//
|
//
|
||||||
// This program is distributed under the terms of
|
// This program is distributed under the terms of
|
||||||
@ -54,6 +55,7 @@ int Image_new(lua_State* L)
|
|||||||
spec.setColorMode((doc::ColorMode)colorMode);
|
spec.setColorMode((doc::ColorMode)colorMode);
|
||||||
}
|
}
|
||||||
doc::ImageRef image(doc::Image::create(spec));
|
doc::ImageRef image(doc::Image::create(spec));
|
||||||
|
doc::clear_image(image.get(), spec.maskColor());
|
||||||
push_new<ImageObj>(L, image, nullptr);
|
push_new<ImageObj>(L, image, nullptr);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -76,7 +78,9 @@ int Image_clear(lua_State* L)
|
|||||||
{
|
{
|
||||||
auto obj = get_obj<ImageObj>(L, 1);
|
auto obj = get_obj<ImageObj>(L, 1);
|
||||||
doc::color_t color;
|
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);
|
color = lua_tointeger(L, 2);
|
||||||
else
|
else
|
||||||
color = convert_args_into_pixel_color(L, 2);
|
color = convert_args_into_pixel_color(L, 2);
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
// Aseprite Document Library
|
// Aseprite Document Library
|
||||||
|
// Copyright (c) 2018 Igara Studio S.A.
|
||||||
// Copyright (c) 2001-2016 David Capello
|
// Copyright (c) 2001-2016 David Capello
|
||||||
//
|
//
|
||||||
// This file is released under the terms of the MIT license.
|
// This file is released under the terms of the MIT license.
|
||||||
@ -19,9 +20,9 @@
|
|||||||
|
|
||||||
namespace doc {
|
namespace doc {
|
||||||
|
|
||||||
Image::Image(PixelFormat format, int width, int height)
|
Image::Image(const ImageSpec& spec)
|
||||||
: Object(ObjectType::Image)
|
: 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,
|
Image* Image::create(PixelFormat format, int width, int height,
|
||||||
const ImageBufferPtr& buffer)
|
const ImageBufferPtr& buffer)
|
||||||
{
|
{
|
||||||
switch (format) {
|
return Image::create(ImageSpec((ColorMode)format, width, height, 0), buffer);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
Image* Image::create(const ImageSpec& spec,
|
Image* Image::create(const ImageSpec& spec,
|
||||||
const ImageBufferPtr& buffer)
|
const ImageBufferPtr& buffer)
|
||||||
{
|
{
|
||||||
return Image::create((PixelFormat)spec.colorMode(),
|
switch (spec.colorMode()) {
|
||||||
spec.width(), spec.height(), buffer);
|
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
|
// static
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
// Aseprite Document Library
|
// Aseprite Document Library
|
||||||
|
// Copyright (c) 2018 Igara Studio S.A.
|
||||||
// Copyright (c) 2001-2016 David Capello
|
// Copyright (c) 2001-2016 David Capello
|
||||||
//
|
//
|
||||||
// This file is released under the terms of the MIT license.
|
// 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;
|
virtual void blendRect(int x1, int y1, int x2, int y2, color_t color, int opacity) = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Image(PixelFormat format, int width, int height);
|
Image(const ImageSpec& spec);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ImageSpec m_spec;
|
ImageSpec m_spec;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
// Aseprite Document Library
|
// Aseprite Document Library
|
||||||
|
// Copyright (c) 2018 Igara Studio S.A.
|
||||||
// Copyright (c) 2001-2016 David Capello
|
// Copyright (c) 2001-2016 David Capello
|
||||||
//
|
//
|
||||||
// This file is released under the terms of the MIT license.
|
// 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));
|
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)
|
const ImageBufferPtr& buffer)
|
||||||
: Image(static_cast<PixelFormat>(Traits::pixel_format), width, height)
|
: Image(spec)
|
||||||
, m_buffer(buffer)
|
, m_buffer(buffer)
|
||||||
{
|
{
|
||||||
std::size_t for_rows = sizeof(address_t) * height;
|
ASSERT(Traits::color_mode == spec.colorMode());
|
||||||
std::size_t rowstride_bytes = Traits::getRowStrideBytes(width);
|
|
||||||
std::size_t required_size = for_rows + rowstride_bytes*height;
|
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)
|
if (!m_buffer)
|
||||||
m_buffer.reset(new ImageBuffer(required_size));
|
m_buffer.reset(new ImageBuffer(required_size));
|
||||||
@ -73,7 +76,7 @@ namespace doc {
|
|||||||
m_bits = (address_t)(m_buffer->buffer() + for_rows);
|
m_bits = (address_t)(m_buffer->buffer() + for_rows);
|
||||||
|
|
||||||
address_t addr = m_bits;
|
address_t addr = m_bits;
|
||||||
for (int y=0; y<height; ++y) {
|
for (int y=0; y<spec.height(); ++y) {
|
||||||
m_rows[y] = addr;
|
m_rows[y] = addr;
|
||||||
addr = (address_t)(((uint8_t*)addr) + rowstride_bytes);
|
addr = (address_t)(((uint8_t*)addr) + rowstride_bytes);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user