mirror of
https://github.com/aseprite/aseprite.git
synced 2025-02-11 09:40:42 +00:00
Create EditorRender to merge shared render image buffer and AppRender
This commit is contained in:
parent
a5b0c7ebdd
commit
c3e233f34d
@ -169,7 +169,6 @@ if(ENABLE_UI)
|
|||||||
set(ui_app_files
|
set(ui_app_files
|
||||||
app_brushes.cpp
|
app_brushes.cpp
|
||||||
app_menus.cpp
|
app_menus.cpp
|
||||||
app_render.cpp
|
|
||||||
commands/cmd_about.cpp
|
commands/cmd_about.cpp
|
||||||
commands/cmd_add_color.cpp
|
commands/cmd_add_color.cpp
|
||||||
commands/cmd_advanced_mode.cpp
|
commands/cmd_advanced_mode.cpp
|
||||||
@ -328,6 +327,7 @@ if(ENABLE_UI)
|
|||||||
ui/editor/drawing_state.cpp
|
ui/editor/drawing_state.cpp
|
||||||
ui/editor/editor.cpp
|
ui/editor/editor.cpp
|
||||||
ui/editor/editor_observers.cpp
|
ui/editor/editor_observers.cpp
|
||||||
|
ui/editor/editor_render.cpp
|
||||||
ui/editor/editor_states_history.cpp
|
ui/editor/editor_states_history.cpp
|
||||||
ui/editor/editor_view.cpp
|
ui/editor/editor_view.cpp
|
||||||
ui/editor/moving_cel_state.cpp
|
ui/editor/moving_cel_state.cpp
|
||||||
|
@ -1,67 +0,0 @@
|
|||||||
// Aseprite
|
|
||||||
// Copyright (C) 2001-2017 David Capello
|
|
||||||
//
|
|
||||||
// This program is distributed under the terms of
|
|
||||||
// the End-User License Agreement for Aseprite.
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "app/app_render.h"
|
|
||||||
|
|
||||||
#include "app/color_utils.h"
|
|
||||||
#include "app/pref/preferences.h"
|
|
||||||
#include "render/render.h"
|
|
||||||
|
|
||||||
namespace app {
|
|
||||||
|
|
||||||
AppRender::AppRender()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
AppRender::AppRender(app::Document* doc, doc::PixelFormat pixelFormat)
|
|
||||||
{
|
|
||||||
setupBackground(doc, pixelFormat);
|
|
||||||
}
|
|
||||||
|
|
||||||
void AppRender::setupBackground(app::Document* doc, doc::PixelFormat pixelFormat)
|
|
||||||
{
|
|
||||||
DocumentPreferences& docPref = Preferences::instance().document(doc);
|
|
||||||
render::BgType bgType;
|
|
||||||
|
|
||||||
gfx::Size tile;
|
|
||||||
switch (docPref.bg.type()) {
|
|
||||||
case app::gen::BgType::CHECKED_16x16:
|
|
||||||
bgType = render::BgType::CHECKED;
|
|
||||||
tile = gfx::Size(16, 16);
|
|
||||||
break;
|
|
||||||
case app::gen::BgType::CHECKED_8x8:
|
|
||||||
bgType = render::BgType::CHECKED;
|
|
||||||
tile = gfx::Size(8, 8);
|
|
||||||
break;
|
|
||||||
case app::gen::BgType::CHECKED_4x4:
|
|
||||||
bgType = render::BgType::CHECKED;
|
|
||||||
tile = gfx::Size(4, 4);
|
|
||||||
break;
|
|
||||||
case app::gen::BgType::CHECKED_2x2:
|
|
||||||
bgType = render::BgType::CHECKED;
|
|
||||||
tile = gfx::Size(2, 2);
|
|
||||||
break;
|
|
||||||
case app::gen::BgType::CHECKED_1x1:
|
|
||||||
bgType = render::BgType::CHECKED;
|
|
||||||
tile = gfx::Size(1, 1);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
bgType = render::BgType::TRANSPARENT;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
setBgType(bgType);
|
|
||||||
setBgZoom(docPref.bg.zoom());
|
|
||||||
setBgColor1(color_utils::color_for_image(docPref.bg.color1(), pixelFormat));
|
|
||||||
setBgColor2(color_utils::color_for_image(docPref.bg.color2(), pixelFormat));
|
|
||||||
setBgCheckedSize(tile);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,27 +0,0 @@
|
|||||||
// Aseprite
|
|
||||||
// Copyright (C) 2001-2015 David Capello
|
|
||||||
//
|
|
||||||
// This program is distributed under the terms of
|
|
||||||
// the End-User License Agreement for Aseprite.
|
|
||||||
|
|
||||||
#ifndef APP_RENDER_H_INCLUDED
|
|
||||||
#define APP_RENDER_H_INCLUDED
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "doc/pixel_format.h"
|
|
||||||
#include "render/render.h"
|
|
||||||
|
|
||||||
namespace app {
|
|
||||||
class Document;
|
|
||||||
|
|
||||||
class AppRender : public render::Render {
|
|
||||||
public:
|
|
||||||
AppRender();
|
|
||||||
AppRender(app::Document* doc, doc::PixelFormat pixelFormat);
|
|
||||||
|
|
||||||
void setupBackground(app::Document* doc, doc::PixelFormat pixelFormat);
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace app
|
|
||||||
|
|
||||||
#endif // APP_RENDER_H_INCLUDED
|
|
@ -24,6 +24,7 @@
|
|||||||
#include "app/transaction.h"
|
#include "app/transaction.h"
|
||||||
#include "app/ui/dithering_selector.h"
|
#include "app/ui/dithering_selector.h"
|
||||||
#include "app/ui/editor/editor.h"
|
#include "app/ui/editor/editor.h"
|
||||||
|
#include "app/ui/editor/editor_render.h"
|
||||||
#include "app/ui/skin/skin_theme.h"
|
#include "app/ui/skin/skin_theme.h"
|
||||||
#include "base/bind.h"
|
#include "base/bind.h"
|
||||||
#include "base/thread.h"
|
#include "base/thread.h"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite
|
// Aseprite
|
||||||
// Copyright (C) 2001-2017 David Capello
|
// Copyright (C) 2001-2018 David Capello
|
||||||
//
|
//
|
||||||
// This program is distributed under the terms of
|
// This program is distributed under the terms of
|
||||||
// the End-User License Agreement for Aseprite.
|
// the End-User License Agreement for Aseprite.
|
||||||
@ -11,7 +11,6 @@
|
|||||||
#include "ui/ui.h"
|
#include "ui/ui.h"
|
||||||
|
|
||||||
#include "app/app.h"
|
#include "app/app.h"
|
||||||
#include "app/app_render.h"
|
|
||||||
#include "app/commands/command.h"
|
#include "app/commands/command.h"
|
||||||
#include "app/commands/commands.h"
|
#include "app/commands/commands.h"
|
||||||
#include "app/context.h"
|
#include "app/context.h"
|
||||||
@ -19,6 +18,7 @@
|
|||||||
#include "app/modules/gfx.h"
|
#include "app/modules/gfx.h"
|
||||||
#include "app/pref/preferences.h"
|
#include "app/pref/preferences.h"
|
||||||
#include "app/ui/editor/editor.h"
|
#include "app/ui/editor/editor.h"
|
||||||
|
#include "app/ui/editor/editor_render.h"
|
||||||
#include "app/ui/keyboard_shortcuts.h"
|
#include "app/ui/keyboard_shortcuts.h"
|
||||||
#include "app/ui/status_bar.h"
|
#include "app/ui/status_bar.h"
|
||||||
#include "doc/conversion_she.h"
|
#include "doc/conversion_she.h"
|
||||||
@ -172,15 +172,15 @@ protected:
|
|||||||
|
|
||||||
virtual void onPaint(PaintEvent& ev) override {
|
virtual void onPaint(PaintEvent& ev) override {
|
||||||
Graphics* g = ev.graphics();
|
Graphics* g = ev.graphics();
|
||||||
AppRender& render = m_editor->renderEngine();
|
EditorRender& render = m_editor->renderEngine();
|
||||||
render.setRefLayersVisiblity(false);
|
render.setRefLayersVisiblity(false);
|
||||||
render.setProjection(render::Projection());
|
render.setProjection(render::Projection());
|
||||||
render.disableOnionskin();
|
render.disableOnionskin();
|
||||||
render.setBgType(render::BgType::TRANSPARENT);
|
render.setTransparentBackground();
|
||||||
|
|
||||||
// Render sprite and leave the result in 'm_render' variable
|
// Render sprite and leave the result in 'm_render' variable
|
||||||
if (m_render == nullptr) {
|
if (m_render == nullptr) {
|
||||||
ImageBufferPtr buf = Editor::getRenderImageBuffer();
|
ImageBufferPtr buf = render.getRenderImageBuffer();
|
||||||
m_render.reset(Image::create(IMAGE_RGB,
|
m_render.reset(Image::create(IMAGE_RGB,
|
||||||
m_sprite->width(), m_sprite->height(), buf));
|
m_sprite->width(), m_sprite->height(), buf));
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite
|
// Aseprite
|
||||||
// Copyright (C) 2001-2017 David Capello
|
// Copyright (C) 2001-2018 David Capello
|
||||||
//
|
//
|
||||||
// This program is distributed under the terms of
|
// This program is distributed under the terms of
|
||||||
// the End-User License Agreement for Aseprite.
|
// the End-User License Agreement for Aseprite.
|
||||||
@ -35,6 +35,7 @@
|
|||||||
#include "doc/palette.h"
|
#include "doc/palette.h"
|
||||||
#include "doc/primitives.h"
|
#include "doc/primitives.h"
|
||||||
#include "doc/sprite.h"
|
#include "doc/sprite.h"
|
||||||
|
#include "render/render.h"
|
||||||
#include "ui/ui.h"
|
#include "ui/ui.h"
|
||||||
|
|
||||||
#include "import_sprite_sheet.xml.h"
|
#include "import_sprite_sheet.xml.h"
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#include "app/commands/filters/filter_manager_impl.h"
|
#include "app/commands/filters/filter_manager_impl.h"
|
||||||
#include "app/modules/editors.h"
|
#include "app/modules/editors.h"
|
||||||
#include "app/ui/editor/editor.h"
|
#include "app/ui/editor/editor.h"
|
||||||
|
#include "app/ui/editor/editor_render.h"
|
||||||
#include "base/bind.h"
|
#include "base/bind.h"
|
||||||
#include "base/scoped_lock.h"
|
#include "base/scoped_lock.h"
|
||||||
#include "doc/layer.h"
|
#include "doc/layer.h"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite
|
// Aseprite
|
||||||
// Copyright (C) 2001-2015 David Capello
|
// Copyright (C) 2001-2018 David Capello
|
||||||
//
|
//
|
||||||
// This program is distributed under the terms of
|
// This program is distributed under the terms of
|
||||||
// the End-User License Agreement for Aseprite.
|
// the End-User License Agreement for Aseprite.
|
||||||
@ -11,10 +11,10 @@
|
|||||||
#include "app/thumbnail_generator.h"
|
#include "app/thumbnail_generator.h"
|
||||||
|
|
||||||
#include "app/app.h"
|
#include "app/app.h"
|
||||||
#include "app/app_render.h"
|
|
||||||
#include "app/document.h"
|
#include "app/document.h"
|
||||||
#include "app/file/file.h"
|
#include "app/file/file.h"
|
||||||
#include "app/file_system.h"
|
#include "app/file_system.h"
|
||||||
|
#include "app/ui/editor/editor_render.h"
|
||||||
#include "base/bind.h"
|
#include "base/bind.h"
|
||||||
#include "base/scoped_lock.h"
|
#include "base/scoped_lock.h"
|
||||||
#include "base/thread.h"
|
#include "base/thread.h"
|
||||||
@ -71,9 +71,8 @@ private:
|
|||||||
base::UniquePtr<Image> image(Image::create(
|
base::UniquePtr<Image> image(Image::create(
|
||||||
IMAGE_RGB, sprite->width(), sprite->height()));
|
IMAGE_RGB, sprite->width(), sprite->height()));
|
||||||
|
|
||||||
AppRender render;
|
EditorRender render;
|
||||||
render.setupBackground(NULL, image->pixelFormat());
|
render.setupBackground(NULL, image->pixelFormat());
|
||||||
render.setBgType(render::BgType::CHECKED);
|
|
||||||
render.renderSprite(image, sprite, frame_t(0));
|
render.renderSprite(image, sprite, frame_t(0));
|
||||||
|
|
||||||
// Calculate the thumbnail size
|
// Calculate the thumbnail size
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite
|
// Aseprite
|
||||||
// Copyright (C) 2001-2017 David Capello
|
// Copyright (C) 2001-2018 David Capello
|
||||||
//
|
//
|
||||||
// This program is distributed under the terms of
|
// This program is distributed under the terms of
|
||||||
// the End-User License Agreement for Aseprite.
|
// the End-User License Agreement for Aseprite.
|
||||||
@ -33,6 +33,7 @@
|
|||||||
#include "doc/layer.h"
|
#include "doc/layer.h"
|
||||||
#include "doc/primitives.h"
|
#include "doc/primitives.h"
|
||||||
#include "doc/site.h"
|
#include "doc/site.h"
|
||||||
|
#include "render/render.h"
|
||||||
#include "she/display.h"
|
#include "she/display.h"
|
||||||
#include "ui/manager.h"
|
#include "ui/manager.h"
|
||||||
#include "ui/system.h"
|
#include "ui/system.h"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite
|
// Aseprite
|
||||||
// Copyright (C) 2001-2017 David Capello
|
// Copyright (C) 2001-2018 David Capello
|
||||||
//
|
//
|
||||||
// This program is distributed under the terms of
|
// This program is distributed under the terms of
|
||||||
// the End-User License Agreement for Aseprite.
|
// the End-User License Agreement for Aseprite.
|
||||||
@ -20,6 +20,7 @@
|
|||||||
#include "app/tools/tool_loop_manager.h"
|
#include "app/tools/tool_loop_manager.h"
|
||||||
#include "app/ui/editor/editor.h"
|
#include "app/ui/editor/editor.h"
|
||||||
#include "app/ui/editor/editor_customization_delegate.h"
|
#include "app/ui/editor/editor_customization_delegate.h"
|
||||||
|
#include "app/ui/editor/editor_render.h"
|
||||||
#include "app/ui/editor/glue.h"
|
#include "app/ui/editor/glue.h"
|
||||||
#include "app/ui/keyboard_shortcuts.h"
|
#include "app/ui/keyboard_shortcuts.h"
|
||||||
#include "app/ui/skin/skin_theme.h"
|
#include "app/ui/skin/skin_theme.h"
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
#include "app/ui/editor/drawing_state.h"
|
#include "app/ui/editor/drawing_state.h"
|
||||||
#include "app/ui/editor/editor_customization_delegate.h"
|
#include "app/ui/editor/editor_customization_delegate.h"
|
||||||
#include "app/ui/editor/editor_decorator.h"
|
#include "app/ui/editor/editor_decorator.h"
|
||||||
|
#include "app/ui/editor/editor_render.h"
|
||||||
#include "app/ui/editor/glue.h"
|
#include "app/ui/editor/glue.h"
|
||||||
#include "app/ui/editor/moving_pixels_state.h"
|
#include "app/ui/editor/moving_pixels_state.h"
|
||||||
#include "app/ui/editor/pixels_movement.h"
|
#include "app/ui/editor/pixels_movement.h"
|
||||||
@ -153,10 +154,7 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
// static
|
// static
|
||||||
doc::ImageBufferPtr Editor::m_renderBuffer;
|
EditorRender* Editor::m_renderEngine = nullptr;
|
||||||
|
|
||||||
// static
|
|
||||||
AppRender Editor::m_renderEngine;
|
|
||||||
|
|
||||||
Editor::Editor(Document* document, EditorFlags flags)
|
Editor::Editor(Document* document, EditorFlags flags)
|
||||||
: Widget(editor_type())
|
: Widget(editor_type())
|
||||||
@ -181,6 +179,9 @@ Editor::Editor(Document* document, EditorFlags flags)
|
|||||||
, m_showGuidesThisCel(nullptr)
|
, m_showGuidesThisCel(nullptr)
|
||||||
, m_tagFocusBand(-1)
|
, m_tagFocusBand(-1)
|
||||||
{
|
{
|
||||||
|
if (!m_renderEngine)
|
||||||
|
m_renderEngine = new EditorRender;
|
||||||
|
|
||||||
m_proj.setPixelRatio(m_sprite->pixelRatio());
|
m_proj.setPixelRatio(m_sprite->pixelRatio());
|
||||||
|
|
||||||
// Add the first state into the history.
|
// Add the first state into the history.
|
||||||
@ -247,7 +248,10 @@ Editor::~Editor()
|
|||||||
|
|
||||||
void Editor::destroyEditorSharedInternals()
|
void Editor::destroyEditorSharedInternals()
|
||||||
{
|
{
|
||||||
m_renderBuffer.reset();
|
if (m_renderEngine) {
|
||||||
|
delete m_renderEngine;
|
||||||
|
m_renderEngine = nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Editor::isActive() const
|
bool Editor::isActive() const
|
||||||
@ -537,10 +541,6 @@ void Editor::drawOneSpriteUnclippedRect(ui::Graphics* g, const gfx::Rect& sprite
|
|||||||
if (rc.isEmpty())
|
if (rc.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Generate the rendered image
|
|
||||||
if (!m_renderBuffer)
|
|
||||||
m_renderBuffer.reset(new doc::ImageBuffer());
|
|
||||||
|
|
||||||
base::UniquePtr<Image> rendered(NULL);
|
base::UniquePtr<Image> rendered(NULL);
|
||||||
try {
|
try {
|
||||||
// Generate a "expose sprite pixels" notification. This is used by
|
// Generate a "expose sprite pixels" notification. This is used by
|
||||||
@ -571,17 +571,18 @@ void Editor::drawOneSpriteUnclippedRect(ui::Graphics* g, const gfx::Rect& sprite
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create a temporary RGB bitmap to draw all to it
|
// Create a temporary RGB bitmap to draw all to it
|
||||||
rendered.reset(Image::create(IMAGE_RGB, rc.w, rc.h, m_renderBuffer));
|
rendered.reset(Image::create(IMAGE_RGB, rc.w, rc.h,
|
||||||
|
m_renderEngine->getRenderImageBuffer()));
|
||||||
|
|
||||||
m_renderEngine.setRefLayersVisiblity(true);
|
m_renderEngine->setRefLayersVisiblity(true);
|
||||||
m_renderEngine.setSelectedLayer(m_layer);
|
m_renderEngine->setSelectedLayer(m_layer);
|
||||||
if (m_flags & Editor::kUseNonactiveLayersOpacityWhenEnabled)
|
if (m_flags & Editor::kUseNonactiveLayersOpacityWhenEnabled)
|
||||||
m_renderEngine.setNonactiveLayersOpacity(Preferences::instance().experimental.nonactiveLayersOpacity());
|
m_renderEngine->setNonactiveLayersOpacity(Preferences::instance().experimental.nonactiveLayersOpacity());
|
||||||
else
|
else
|
||||||
m_renderEngine.setNonactiveLayersOpacity(255);
|
m_renderEngine->setNonactiveLayersOpacity(255);
|
||||||
m_renderEngine.setProjection(m_proj);
|
m_renderEngine->setProjection(m_proj);
|
||||||
m_renderEngine.setupBackground(m_document, rendered->pixelFormat());
|
m_renderEngine->setupBackground(m_document, rendered->pixelFormat());
|
||||||
m_renderEngine.disableOnionskin();
|
m_renderEngine->disableOnionskin();
|
||||||
|
|
||||||
if ((m_flags & kShowOnionskin) == kShowOnionskin) {
|
if ((m_flags & kShowOnionskin) == kShowOnionskin) {
|
||||||
if (m_docPref.onionskin.active()) {
|
if (m_docPref.onionskin.active()) {
|
||||||
@ -604,13 +605,13 @@ void Editor::drawOneSpriteUnclippedRect(ui::Graphics* g, const gfx::Rect& sprite
|
|||||||
tag = m_sprite->frameTags().innerTag(m_frame);
|
tag = m_sprite->frameTags().innerTag(m_frame);
|
||||||
opts.loopTag(tag);
|
opts.loopTag(tag);
|
||||||
|
|
||||||
m_renderEngine.setOnionskin(opts);
|
m_renderEngine->setOnionskin(opts);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ExtraCelRef extraCel = m_document->extraCel();
|
ExtraCelRef extraCel = m_document->extraCel();
|
||||||
if (extraCel && extraCel->type() != render::ExtraType::NONE) {
|
if (extraCel && extraCel->type() != render::ExtraType::NONE) {
|
||||||
m_renderEngine.setExtraImage(
|
m_renderEngine->setExtraImage(
|
||||||
extraCel->type(),
|
extraCel->type(),
|
||||||
extraCel->cel(),
|
extraCel->cel(),
|
||||||
extraCel->image(),
|
extraCel->image(),
|
||||||
@ -618,10 +619,10 @@ void Editor::drawOneSpriteUnclippedRect(ui::Graphics* g, const gfx::Rect& sprite
|
|||||||
m_layer, m_frame);
|
m_layer, m_frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_renderEngine.renderSprite(
|
m_renderEngine->renderSprite(
|
||||||
rendered, m_sprite, m_frame, gfx::Clip(0, 0, rc));
|
rendered, m_sprite, m_frame, gfx::Clip(0, 0, rc));
|
||||||
|
|
||||||
m_renderEngine.removeExtraImage();
|
m_renderEngine->removeExtraImage();
|
||||||
}
|
}
|
||||||
catch (const std::exception& e) {
|
catch (const std::exception& e) {
|
||||||
Console::showException(e);
|
Console::showException(e);
|
||||||
@ -1204,7 +1205,7 @@ void Editor::flashCurrentLayer()
|
|||||||
int x, y;
|
int x, y;
|
||||||
const Image* src_image = site.image(&x, &y);
|
const Image* src_image = site.image(&x, &y);
|
||||||
if (src_image) {
|
if (src_image) {
|
||||||
m_renderEngine.removePreviewImage();
|
m_renderEngine->removePreviewImage();
|
||||||
|
|
||||||
ExtraCelRef extraCel(new ExtraCel);
|
ExtraCelRef extraCel(new ExtraCel);
|
||||||
extraCel->create(m_sprite, m_sprite->bounds(), m_frame, 255);
|
extraCel->create(m_sprite, m_sprite->bounds(), m_frame, 255);
|
||||||
@ -2383,12 +2384,6 @@ void Editor::showBrushPreview(const gfx::Point& screenPos)
|
|||||||
m_brushPreview.show(screenPos);
|
m_brushPreview.show(screenPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
|
||||||
ImageBufferPtr Editor::getRenderImageBuffer()
|
|
||||||
{
|
|
||||||
return m_renderBuffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
gfx::Point Editor::calcExtraPadding(const Projection& proj)
|
gfx::Point Editor::calcExtraPadding(const Projection& proj)
|
||||||
{
|
{
|
||||||
View* view = View::getView(this);
|
View* view = View::getView(this);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite
|
// Aseprite
|
||||||
// Copyright (C) 2001-2017 David Capello
|
// Copyright (C) 2001-2018 David Capello
|
||||||
//
|
//
|
||||||
// This program is distributed under the terms of
|
// This program is distributed under the terms of
|
||||||
// the End-User License Agreement for Aseprite.
|
// the End-User License Agreement for Aseprite.
|
||||||
@ -8,7 +8,6 @@
|
|||||||
#define APP_UI_EDITOR_H_INCLUDED
|
#define APP_UI_EDITOR_H_INCLUDED
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "app/app_render.h"
|
|
||||||
#include "app/color.h"
|
#include "app/color.h"
|
||||||
#include "app/document.h"
|
#include "app/document.h"
|
||||||
#include "app/pref/preferences.h"
|
#include "app/pref/preferences.h"
|
||||||
@ -26,6 +25,7 @@
|
|||||||
#include "filters/tiled_mode.h"
|
#include "filters/tiled_mode.h"
|
||||||
#include "gfx/fwd.h"
|
#include "gfx/fwd.h"
|
||||||
#include "obs/connection.h"
|
#include "obs/connection.h"
|
||||||
|
#include "render/projection.h"
|
||||||
#include "render/zoom.h"
|
#include "render/zoom.h"
|
||||||
#include "ui/base.h"
|
#include "ui/base.h"
|
||||||
#include "ui/cursor_type.h"
|
#include "ui/cursor_type.h"
|
||||||
@ -51,6 +51,7 @@ namespace app {
|
|||||||
class Context;
|
class Context;
|
||||||
class DocumentView;
|
class DocumentView;
|
||||||
class EditorCustomizationDelegate;
|
class EditorCustomizationDelegate;
|
||||||
|
class EditorRender;
|
||||||
class PixelsMovement;
|
class PixelsMovement;
|
||||||
|
|
||||||
namespace tools {
|
namespace tools {
|
||||||
@ -253,11 +254,7 @@ namespace app {
|
|||||||
// Gets the brush preview controller.
|
// Gets the brush preview controller.
|
||||||
BrushPreview& brushPreview() { return m_brushPreview; }
|
BrushPreview& brushPreview() { return m_brushPreview; }
|
||||||
|
|
||||||
// Returns the buffer used to render editor viewports.
|
EditorRender& renderEngine() { return *m_renderEngine; }
|
||||||
// E.g. It can be re-used by PreviewCommand
|
|
||||||
static ImageBufferPtr getRenderImageBuffer();
|
|
||||||
|
|
||||||
AppRender& renderEngine() { return m_renderEngine; }
|
|
||||||
|
|
||||||
// IColorSource
|
// IColorSource
|
||||||
app::Color getColorByPosition(const gfx::Point& pos) override;
|
app::Color getColorByPosition(const gfx::Point& pos) override;
|
||||||
@ -408,13 +405,11 @@ namespace app {
|
|||||||
// TODO could we avoid one extra field just to do this?
|
// TODO could we avoid one extra field just to do this?
|
||||||
gfx::Point m_oldMainTilePos;
|
gfx::Point m_oldMainTilePos;
|
||||||
|
|
||||||
static doc::ImageBufferPtr m_renderBuffer;
|
|
||||||
|
|
||||||
// The render engine must be shared between all editors so when a
|
// The render engine must be shared between all editors so when a
|
||||||
// DrawingState is being used in one editor, other editors for the
|
// DrawingState is being used in one editor, other editors for the
|
||||||
// same document can show the same preview image/stroke being drawn
|
// same document can show the same preview image/stroke being drawn
|
||||||
// (search for Render::setPreviewImage()).
|
// (search for Render::setPreviewImage()).
|
||||||
static AppRender m_renderEngine;
|
static EditorRender* m_renderEngine;
|
||||||
};
|
};
|
||||||
|
|
||||||
ui::WidgetType editor_type();
|
ui::WidgetType editor_type();
|
||||||
|
180
src/app/ui/editor/editor_render.cpp
Normal file
180
src/app/ui/editor/editor_render.cpp
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
// Aseprite
|
||||||
|
// Copyright (C) 2018 David Capello
|
||||||
|
//
|
||||||
|
// This program is distributed under the terms of
|
||||||
|
// the End-User License Agreement for Aseprite.
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "app/ui/editor/editor_render.h"
|
||||||
|
|
||||||
|
#include "app/color_utils.h"
|
||||||
|
#include "app/pref/preferences.h"
|
||||||
|
#include "render/render.h"
|
||||||
|
|
||||||
|
namespace app {
|
||||||
|
|
||||||
|
static doc::ImageBufferPtr g_renderBuffer;
|
||||||
|
|
||||||
|
EditorRender::EditorRender()
|
||||||
|
: m_render(new render::Render)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorRender::~EditorRender()
|
||||||
|
{
|
||||||
|
delete m_render;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorRender::setRefLayersVisiblity(const bool visible)
|
||||||
|
{
|
||||||
|
m_render->setRefLayersVisiblity(visible);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorRender::setNonactiveLayersOpacity(const int opacity)
|
||||||
|
{
|
||||||
|
m_render->setNonactiveLayersOpacity(opacity);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorRender::setProjection(const render::Projection& projection)
|
||||||
|
{
|
||||||
|
m_render->setProjection(projection);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorRender::setupBackground(app::Document* doc, doc::PixelFormat pixelFormat)
|
||||||
|
{
|
||||||
|
DocumentPreferences& docPref = Preferences::instance().document(doc);
|
||||||
|
render::BgType bgType;
|
||||||
|
|
||||||
|
gfx::Size tile;
|
||||||
|
switch (docPref.bg.type()) {
|
||||||
|
case app::gen::BgType::CHECKED_16x16:
|
||||||
|
bgType = render::BgType::CHECKED;
|
||||||
|
tile = gfx::Size(16, 16);
|
||||||
|
break;
|
||||||
|
case app::gen::BgType::CHECKED_8x8:
|
||||||
|
bgType = render::BgType::CHECKED;
|
||||||
|
tile = gfx::Size(8, 8);
|
||||||
|
break;
|
||||||
|
case app::gen::BgType::CHECKED_4x4:
|
||||||
|
bgType = render::BgType::CHECKED;
|
||||||
|
tile = gfx::Size(4, 4);
|
||||||
|
break;
|
||||||
|
case app::gen::BgType::CHECKED_2x2:
|
||||||
|
bgType = render::BgType::CHECKED;
|
||||||
|
tile = gfx::Size(2, 2);
|
||||||
|
break;
|
||||||
|
case app::gen::BgType::CHECKED_1x1:
|
||||||
|
bgType = render::BgType::CHECKED;
|
||||||
|
tile = gfx::Size(1, 1);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
bgType = render::BgType::TRANSPARENT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_render->setBgType(bgType);
|
||||||
|
m_render->setBgZoom(docPref.bg.zoom());
|
||||||
|
m_render->setBgColor1(color_utils::color_for_image(docPref.bg.color1(), pixelFormat));
|
||||||
|
m_render->setBgColor2(color_utils::color_for_image(docPref.bg.color2(), pixelFormat));
|
||||||
|
m_render->setBgCheckedSize(tile);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorRender::setTransparentBackground()
|
||||||
|
{
|
||||||
|
m_render->setBgType(render::BgType::TRANSPARENT);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorRender::setSelectedLayer(const doc::Layer* layer)
|
||||||
|
{
|
||||||
|
m_render->setSelectedLayer(layer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorRender::setPreviewImage(const doc::Layer* layer,
|
||||||
|
const doc::frame_t frame,
|
||||||
|
const doc::Image* image,
|
||||||
|
const gfx::Point& pos,
|
||||||
|
const doc::BlendMode blendMode)
|
||||||
|
{
|
||||||
|
m_render->setPreviewImage(layer, frame, image, pos, blendMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorRender::removePreviewImage()
|
||||||
|
{
|
||||||
|
m_render->removePreviewImage();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorRender::setExtraImage(
|
||||||
|
render::ExtraType type,
|
||||||
|
const doc::Cel* cel,
|
||||||
|
const doc::Image* image,
|
||||||
|
doc::BlendMode blendMode,
|
||||||
|
const doc::Layer* currentLayer,
|
||||||
|
doc::frame_t currentFrame)
|
||||||
|
{
|
||||||
|
m_render->setExtraImage(type, cel, image, blendMode,
|
||||||
|
currentLayer, currentFrame);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorRender::removeExtraImage()
|
||||||
|
{
|
||||||
|
m_render->removeExtraImage();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorRender::setOnionskin(const render::OnionskinOptions& options)
|
||||||
|
{
|
||||||
|
m_render->setOnionskin(options);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorRender::disableOnionskin()
|
||||||
|
{
|
||||||
|
m_render->disableOnionskin();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorRender::renderSprite(
|
||||||
|
doc::Image* dstImage,
|
||||||
|
const doc::Sprite* sprite,
|
||||||
|
doc::frame_t frame)
|
||||||
|
{
|
||||||
|
m_render->renderSprite(dstImage, sprite, frame);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorRender::renderSprite(
|
||||||
|
doc::Image* dstImage,
|
||||||
|
const doc::Sprite* sprite,
|
||||||
|
doc::frame_t frame,
|
||||||
|
const gfx::ClipF& area)
|
||||||
|
{
|
||||||
|
m_render->renderSprite(dstImage, sprite, frame, area);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorRender::renderBackground(
|
||||||
|
doc::Image* image,
|
||||||
|
const gfx::Clip& area)
|
||||||
|
{
|
||||||
|
m_render->renderBackground(image, area);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorRender::renderImage(
|
||||||
|
doc::Image* dst_image,
|
||||||
|
const doc::Image* src_image,
|
||||||
|
const doc::Palette* pal,
|
||||||
|
const int x,
|
||||||
|
const int y,
|
||||||
|
const int opacity,
|
||||||
|
const doc::BlendMode blendMode)
|
||||||
|
{
|
||||||
|
m_render->renderImage(dst_image, src_image, pal,
|
||||||
|
x, y, opacity, blendMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
doc::ImageBufferPtr EditorRender::getRenderImageBuffer()
|
||||||
|
{
|
||||||
|
if (!g_renderBuffer)
|
||||||
|
g_renderBuffer.reset(new doc::ImageBuffer);
|
||||||
|
return g_renderBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace app
|
100
src/app/ui/editor/editor_render.h
Normal file
100
src/app/ui/editor/editor_render.h
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
// Aseprite
|
||||||
|
// Copyright (C) 2018 David Capello
|
||||||
|
//
|
||||||
|
// This program is distributed under the terms of
|
||||||
|
// the End-User License Agreement for Aseprite.
|
||||||
|
|
||||||
|
#ifndef APP_UI_EDITOR_RENDER_H_INCLUDED
|
||||||
|
#define APP_UI_EDITOR_RENDER_H_INCLUDED
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "doc/blend_mode.h"
|
||||||
|
#include "doc/color.h"
|
||||||
|
#include "doc/frame.h"
|
||||||
|
#include "doc/image_buffer.h"
|
||||||
|
#include "doc/pixel_format.h"
|
||||||
|
#include "gfx/clip.h"
|
||||||
|
#include "gfx/point.h"
|
||||||
|
#include "render/extra_type.h"
|
||||||
|
#include "render/onionskin_options.h"
|
||||||
|
#include "render/projection.h"
|
||||||
|
|
||||||
|
namespace doc {
|
||||||
|
class Cel;
|
||||||
|
class Image;
|
||||||
|
class Layer;
|
||||||
|
class Palette;
|
||||||
|
class Sprite;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace render {
|
||||||
|
class Render;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace app {
|
||||||
|
class Document;
|
||||||
|
|
||||||
|
class EditorRender {
|
||||||
|
public:
|
||||||
|
EditorRender();
|
||||||
|
~EditorRender();
|
||||||
|
|
||||||
|
void setRefLayersVisiblity(const bool visible);
|
||||||
|
void setNonactiveLayersOpacity(const int opacity);
|
||||||
|
|
||||||
|
void setProjection(const render::Projection& projection);
|
||||||
|
|
||||||
|
void setupBackground(app::Document* doc, doc::PixelFormat pixelFormat);
|
||||||
|
void setTransparentBackground();
|
||||||
|
|
||||||
|
void setSelectedLayer(const doc::Layer* layer);
|
||||||
|
|
||||||
|
void setPreviewImage(const doc::Layer* layer,
|
||||||
|
const doc::frame_t frame,
|
||||||
|
const doc::Image* image,
|
||||||
|
const gfx::Point& pos,
|
||||||
|
const doc::BlendMode blendMode);
|
||||||
|
void removePreviewImage();
|
||||||
|
|
||||||
|
void setExtraImage(
|
||||||
|
render::ExtraType type,
|
||||||
|
const doc::Cel* cel,
|
||||||
|
const doc::Image* image,
|
||||||
|
doc::BlendMode blendMode,
|
||||||
|
const doc::Layer* currentLayer,
|
||||||
|
doc::frame_t currentFrame);
|
||||||
|
void removeExtraImage();
|
||||||
|
|
||||||
|
void setOnionskin(const render::OnionskinOptions& options);
|
||||||
|
void disableOnionskin();
|
||||||
|
|
||||||
|
void renderSprite(
|
||||||
|
doc::Image* dstImage,
|
||||||
|
const doc::Sprite* sprite,
|
||||||
|
doc::frame_t frame);
|
||||||
|
void renderSprite(
|
||||||
|
doc::Image* dstImage,
|
||||||
|
const doc::Sprite* sprite,
|
||||||
|
doc::frame_t frame,
|
||||||
|
const gfx::ClipF& area);
|
||||||
|
void renderBackground(
|
||||||
|
doc::Image* image,
|
||||||
|
const gfx::Clip& area);
|
||||||
|
void renderImage(
|
||||||
|
doc::Image* dst_image,
|
||||||
|
const doc::Image* src_image,
|
||||||
|
const doc::Palette* pal,
|
||||||
|
const int x,
|
||||||
|
const int y,
|
||||||
|
const int opacity,
|
||||||
|
const doc::BlendMode blendMode);
|
||||||
|
|
||||||
|
doc::ImageBufferPtr getRenderImageBuffer();
|
||||||
|
|
||||||
|
private:
|
||||||
|
render::Render* m_render;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace app
|
||||||
|
|
||||||
|
#endif
|
21
src/render/bg_type.h
Normal file
21
src/render/bg_type.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
// Aseprite Render Library
|
||||||
|
// Copyright (c) 2018 David Capello
|
||||||
|
//
|
||||||
|
// This file is released under the terms of the MIT license.
|
||||||
|
// Read LICENSE.txt for more information.
|
||||||
|
|
||||||
|
#ifndef RENDER_BG_TYPE_H_INCLUDED
|
||||||
|
#define RENDER_BG_TYPE_H_INCLUDED
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace render {
|
||||||
|
|
||||||
|
enum class BgType {
|
||||||
|
NONE,
|
||||||
|
TRANSPARENT,
|
||||||
|
CHECKED,
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace render
|
||||||
|
|
||||||
|
#endif
|
65
src/render/onionskin_options.h
Normal file
65
src/render/onionskin_options.h
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
// Aseprite Render Library
|
||||||
|
// Copyright (c) 2018 David Capello
|
||||||
|
//
|
||||||
|
// This file is released under the terms of the MIT license.
|
||||||
|
// Read LICENSE.txt for more information.
|
||||||
|
|
||||||
|
#ifndef RENDER_ONIONSKIN_OPTIONS_H_INCLUDED
|
||||||
|
#define RENDER_ONIONSKIN_OPTIONS_H_INCLUDED
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "render/onionskin_position.h"
|
||||||
|
#include "render/onionskin_type.h"
|
||||||
|
|
||||||
|
namespace doc {
|
||||||
|
class FrameTag;
|
||||||
|
class Layer;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace render {
|
||||||
|
|
||||||
|
class OnionskinOptions {
|
||||||
|
public:
|
||||||
|
OnionskinOptions(OnionskinType type)
|
||||||
|
: m_type(type)
|
||||||
|
, m_position(OnionskinPosition::BEHIND)
|
||||||
|
, m_prevFrames(0)
|
||||||
|
, m_nextFrames(0)
|
||||||
|
, m_opacityBase(0)
|
||||||
|
, m_opacityStep(0)
|
||||||
|
, m_loopTag(nullptr)
|
||||||
|
, m_layer(nullptr) {
|
||||||
|
}
|
||||||
|
|
||||||
|
OnionskinType type() const { return m_type; }
|
||||||
|
OnionskinPosition position() const { return m_position; }
|
||||||
|
int prevFrames() const { return m_prevFrames; }
|
||||||
|
int nextFrames() const { return m_nextFrames; }
|
||||||
|
int opacityBase() const { return m_opacityBase; }
|
||||||
|
int opacityStep() const { return m_opacityStep; }
|
||||||
|
doc::FrameTag* loopTag() const { return m_loopTag; }
|
||||||
|
doc::Layer* layer() const { return m_layer; }
|
||||||
|
|
||||||
|
void type(OnionskinType type) { m_type = type; }
|
||||||
|
void position(OnionskinPosition position) { m_position = position; }
|
||||||
|
void prevFrames(int prevFrames) { m_prevFrames = prevFrames; }
|
||||||
|
void nextFrames(int nextFrames) { m_nextFrames = nextFrames; }
|
||||||
|
void opacityBase(int base) { m_opacityBase = base; }
|
||||||
|
void opacityStep(int step) { m_opacityStep = step; }
|
||||||
|
void loopTag(doc::FrameTag* loopTag) { m_loopTag = loopTag; }
|
||||||
|
void layer(doc::Layer* layer) { m_layer = layer; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
OnionskinType m_type;
|
||||||
|
OnionskinPosition m_position;
|
||||||
|
int m_prevFrames;
|
||||||
|
int m_nextFrames;
|
||||||
|
int m_opacityBase;
|
||||||
|
int m_opacityStep;
|
||||||
|
doc::FrameTag* m_loopTag;
|
||||||
|
doc::Layer* m_layer;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace render
|
||||||
|
|
||||||
|
#endif
|
21
src/render/onionskin_type.h
Normal file
21
src/render/onionskin_type.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
// Aseprite Render Library
|
||||||
|
// Copyright (c) 2018 David Capello
|
||||||
|
//
|
||||||
|
// This file is released under the terms of the MIT license.
|
||||||
|
// Read LICENSE.txt for more information.
|
||||||
|
|
||||||
|
#ifndef RENDER_ONIONSKIN_TYPE_H_INCLUDED
|
||||||
|
#define RENDER_ONIONSKIN_TYPE_H_INCLUDED
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace render {
|
||||||
|
|
||||||
|
enum class OnionskinType {
|
||||||
|
NONE,
|
||||||
|
MERGE,
|
||||||
|
RED_BLUE_TINT,
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace render
|
||||||
|
|
||||||
|
#endif
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite Render Library
|
// Aseprite Render Library
|
||||||
// Copyright (c) 2001-2016 David Capello
|
// Copyright (c) 2001-2018 David Capello
|
||||||
//
|
//
|
||||||
// This file is released under the terms of the MIT license.
|
// This file is released under the terms of the MIT license.
|
||||||
// Read LICENSE.txt for more information.
|
// Read LICENSE.txt for more information.
|
||||||
@ -16,8 +16,9 @@
|
|||||||
#include "gfx/clip.h"
|
#include "gfx/clip.h"
|
||||||
#include "gfx/point.h"
|
#include "gfx/point.h"
|
||||||
#include "gfx/size.h"
|
#include "gfx/size.h"
|
||||||
|
#include "render/bg_type.h"
|
||||||
#include "render/extra_type.h"
|
#include "render/extra_type.h"
|
||||||
#include "render/onionskin_position.h"
|
#include "render/onionskin_options.h"
|
||||||
#include "render/projection.h"
|
#include "render/projection.h"
|
||||||
|
|
||||||
namespace doc {
|
namespace doc {
|
||||||
@ -32,60 +33,6 @@ namespace doc {
|
|||||||
namespace render {
|
namespace render {
|
||||||
using namespace doc;
|
using namespace doc;
|
||||||
|
|
||||||
enum class BgType {
|
|
||||||
NONE,
|
|
||||||
TRANSPARENT,
|
|
||||||
CHECKED,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class OnionskinType {
|
|
||||||
NONE,
|
|
||||||
MERGE,
|
|
||||||
RED_BLUE_TINT,
|
|
||||||
};
|
|
||||||
|
|
||||||
class OnionskinOptions {
|
|
||||||
public:
|
|
||||||
OnionskinOptions(OnionskinType type)
|
|
||||||
: m_type(type)
|
|
||||||
, m_position(OnionskinPosition::BEHIND)
|
|
||||||
, m_prevFrames(0)
|
|
||||||
, m_nextFrames(0)
|
|
||||||
, m_opacityBase(0)
|
|
||||||
, m_opacityStep(0)
|
|
||||||
, m_loopTag(nullptr)
|
|
||||||
, m_layer(nullptr) {
|
|
||||||
}
|
|
||||||
|
|
||||||
OnionskinType type() const { return m_type; }
|
|
||||||
OnionskinPosition position() const { return m_position; }
|
|
||||||
int prevFrames() const { return m_prevFrames; }
|
|
||||||
int nextFrames() const { return m_nextFrames; }
|
|
||||||
int opacityBase() const { return m_opacityBase; }
|
|
||||||
int opacityStep() const { return m_opacityStep; }
|
|
||||||
FrameTag* loopTag() const { return m_loopTag; }
|
|
||||||
Layer* layer() const { return m_layer; }
|
|
||||||
|
|
||||||
void type(OnionskinType type) { m_type = type; }
|
|
||||||
void position(OnionskinPosition position) { m_position = position; }
|
|
||||||
void prevFrames(int prevFrames) { m_prevFrames = prevFrames; }
|
|
||||||
void nextFrames(int nextFrames) { m_nextFrames = nextFrames; }
|
|
||||||
void opacityBase(int base) { m_opacityBase = base; }
|
|
||||||
void opacityStep(int step) { m_opacityStep = step; }
|
|
||||||
void loopTag(FrameTag* loopTag) { m_loopTag = loopTag; }
|
|
||||||
void layer(Layer* layer) { m_layer = layer; }
|
|
||||||
|
|
||||||
private:
|
|
||||||
OnionskinType m_type;
|
|
||||||
OnionskinPosition m_position;
|
|
||||||
int m_prevFrames;
|
|
||||||
int m_nextFrames;
|
|
||||||
int m_opacityBase;
|
|
||||||
int m_opacityStep;
|
|
||||||
FrameTag* m_loopTag;
|
|
||||||
Layer* m_layer;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef void (*CompositeImageFunc)(
|
typedef void (*CompositeImageFunc)(
|
||||||
Image* dst,
|
Image* dst,
|
||||||
const Image* src,
|
const Image* src,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user