mirror of
https://github.com/aseprite/aseprite.git
synced 2025-02-07 06:40:10 +00:00
[lua] Add Image.context property (fix #4330)
This commit is contained in:
parent
d1f1a8dcb0
commit
79a22deaa9
@ -32,7 +32,16 @@ private:
|
||||
|
||||
public:
|
||||
GraphicsContext(const os::SurfaceRef& surface, int uiscale) : m_surface(surface), m_uiscale(uiscale) { }
|
||||
GraphicsContext(GraphicsContext&& gc) {
|
||||
GraphicsContext(const GraphicsContext& gc) {
|
||||
m_surface = gc.m_surface;
|
||||
m_font = gc.m_font;
|
||||
m_paint = gc.m_paint;
|
||||
m_palette = gc.m_palette;
|
||||
m_path = gc.m_path;
|
||||
m_saved = gc.m_saved;
|
||||
m_uiscale = gc.m_uiscale;
|
||||
}
|
||||
GraphicsContext(GraphicsContext&& gc) noexcept {
|
||||
std::swap(m_surface, gc.m_surface);
|
||||
std::swap(m_paint, gc.m_paint);
|
||||
std::swap(m_font, gc.m_font);
|
||||
|
@ -20,12 +20,14 @@
|
||||
#include "app/script/blend_mode.h"
|
||||
#include "app/script/docobj.h"
|
||||
#include "app/script/engine.h"
|
||||
#include "app/script/graphics_context.h"
|
||||
#include "app/script/luacpp.h"
|
||||
#include "app/script/security.h"
|
||||
#include "app/site.h"
|
||||
#include "app/tx.h"
|
||||
#include "app/util/autocrop.h"
|
||||
#include "app/util/resize_image.h"
|
||||
#include "app/util/shader_helpers.h"
|
||||
#include "base/fs.h"
|
||||
#include "doc/algorithm/flip_image.h"
|
||||
#include "doc/algorithm/flip_type.h"
|
||||
@ -37,6 +39,7 @@
|
||||
#include "doc/primitives.h"
|
||||
#include "doc/sprite.h"
|
||||
#include "render/render.h"
|
||||
#include "ui/scale.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <cstring>
|
||||
@ -54,6 +57,11 @@ struct ImageObj {
|
||||
doc::ObjectId celId = 0;
|
||||
doc::ObjectId tilesetId = 0;
|
||||
doc::tile_index ti = 0;
|
||||
|
||||
#if LAF_SKIA
|
||||
std::unique_ptr<GraphicsContext> context = nullptr;
|
||||
#endif
|
||||
|
||||
ImageObj(doc::Image* image)
|
||||
: imageId(image->id()) {
|
||||
}
|
||||
@ -742,6 +750,23 @@ int Image_get_cel(lua_State* L)
|
||||
return 1;
|
||||
}
|
||||
|
||||
int Image_get_context(lua_State* L)
|
||||
{
|
||||
#if LAF_SKIA
|
||||
auto* obj = get_obj<ImageObj>(L, 1);
|
||||
|
||||
if (!obj->context) {
|
||||
auto surface = wrap_docimage_in_surface(obj->image(L));
|
||||
obj->context = std::make_unique<GraphicsContext>(surface, ui::guiscale());
|
||||
}
|
||||
|
||||
push_obj(L, *obj->context);
|
||||
return 1;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
const luaL_Reg Image_methods[] = {
|
||||
{ "clone", Image_clone },
|
||||
{ "clear", Image_clear },
|
||||
@ -774,6 +799,7 @@ const Property Image_properties[] = {
|
||||
{ "colorMode", Image_get_colorMode, nullptr },
|
||||
{ "spec", Image_get_spec, nullptr },
|
||||
{ "cel", Image_get_cel, nullptr },
|
||||
{ "context", Image_get_context, nullptr },
|
||||
{ nullptr, nullptr, nullptr }
|
||||
};
|
||||
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
#if LAF_SKIA
|
||||
|
||||
#include "os/skia/skia_surface.h"
|
||||
|
||||
#include "include/core/SkSurface.h"
|
||||
#if SK_ENABLE_SKSL
|
||||
#include "src/core/SkRuntimeEffectPriv.h"
|
||||
@ -110,6 +112,11 @@ sk_sp<SkSurface> wrap_docimage_in_sksurface(const doc::Image* img)
|
||||
img->rowBytes());
|
||||
}
|
||||
|
||||
os::SurfaceRef wrap_docimage_in_surface(const doc::Image* img)
|
||||
{
|
||||
return os::SurfaceRef(new os::SkiaSurface(wrap_docimage_in_sksurface(img)));
|
||||
}
|
||||
|
||||
} // namespace app
|
||||
|
||||
#endif // LAF_SKIA
|
||||
|
@ -12,6 +12,7 @@
|
||||
|
||||
#include "app/color.h"
|
||||
#include "gfx/color.h"
|
||||
#include "os/surface.h"
|
||||
|
||||
#include "include/core/SkCanvas.h"
|
||||
#include "include/core/SkImage.h"
|
||||
@ -94,6 +95,7 @@ SkImageInfo get_skimageinfo_for_docimage(const doc::Image* img);
|
||||
sk_sp<SkImage> make_skimage_for_docimage(const doc::Image* img);
|
||||
std::unique_ptr<SkCanvas> make_skcanvas_for_docimage(const doc::Image* img);
|
||||
sk_sp<SkSurface> wrap_docimage_in_sksurface(const doc::Image* img);
|
||||
os::SurfaceRef wrap_docimage_in_surface(const doc::Image* img);
|
||||
|
||||
} // namespace app
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user