mirror of
https://github.com/aseprite/aseprite.git
synced 2025-02-06 12:39:57 +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
|
||||
app_brushes.cpp
|
||||
app_menus.cpp
|
||||
app_render.cpp
|
||||
commands/cmd_about.cpp
|
||||
commands/cmd_add_color.cpp
|
||||
commands/cmd_advanced_mode.cpp
|
||||
@ -328,6 +327,7 @@ if(ENABLE_UI)
|
||||
ui/editor/drawing_state.cpp
|
||||
ui/editor/editor.cpp
|
||||
ui/editor/editor_observers.cpp
|
||||
ui/editor/editor_render.cpp
|
||||
ui/editor/editor_states_history.cpp
|
||||
ui/editor/editor_view.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/ui/dithering_selector.h"
|
||||
#include "app/ui/editor/editor.h"
|
||||
#include "app/ui/editor/editor_render.h"
|
||||
#include "app/ui/skin/skin_theme.h"
|
||||
#include "base/bind.h"
|
||||
#include "base/thread.h"
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2001-2017 David Capello
|
||||
// Copyright (C) 2001-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
// the End-User License Agreement for Aseprite.
|
||||
@ -11,7 +11,6 @@
|
||||
#include "ui/ui.h"
|
||||
|
||||
#include "app/app.h"
|
||||
#include "app/app_render.h"
|
||||
#include "app/commands/command.h"
|
||||
#include "app/commands/commands.h"
|
||||
#include "app/context.h"
|
||||
@ -19,6 +18,7 @@
|
||||
#include "app/modules/gfx.h"
|
||||
#include "app/pref/preferences.h"
|
||||
#include "app/ui/editor/editor.h"
|
||||
#include "app/ui/editor/editor_render.h"
|
||||
#include "app/ui/keyboard_shortcuts.h"
|
||||
#include "app/ui/status_bar.h"
|
||||
#include "doc/conversion_she.h"
|
||||
@ -172,15 +172,15 @@ protected:
|
||||
|
||||
virtual void onPaint(PaintEvent& ev) override {
|
||||
Graphics* g = ev.graphics();
|
||||
AppRender& render = m_editor->renderEngine();
|
||||
EditorRender& render = m_editor->renderEngine();
|
||||
render.setRefLayersVisiblity(false);
|
||||
render.setProjection(render::Projection());
|
||||
render.disableOnionskin();
|
||||
render.setBgType(render::BgType::TRANSPARENT);
|
||||
render.setTransparentBackground();
|
||||
|
||||
// Render sprite and leave the result in 'm_render' variable
|
||||
if (m_render == nullptr) {
|
||||
ImageBufferPtr buf = Editor::getRenderImageBuffer();
|
||||
ImageBufferPtr buf = render.getRenderImageBuffer();
|
||||
m_render.reset(Image::create(IMAGE_RGB,
|
||||
m_sprite->width(), m_sprite->height(), buf));
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2001-2017 David Capello
|
||||
// Copyright (C) 2001-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
// the End-User License Agreement for Aseprite.
|
||||
@ -35,6 +35,7 @@
|
||||
#include "doc/palette.h"
|
||||
#include "doc/primitives.h"
|
||||
#include "doc/sprite.h"
|
||||
#include "render/render.h"
|
||||
#include "ui/ui.h"
|
||||
|
||||
#include "import_sprite_sheet.xml.h"
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "app/commands/filters/filter_manager_impl.h"
|
||||
#include "app/modules/editors.h"
|
||||
#include "app/ui/editor/editor.h"
|
||||
#include "app/ui/editor/editor_render.h"
|
||||
#include "base/bind.h"
|
||||
#include "base/scoped_lock.h"
|
||||
#include "doc/layer.h"
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2001-2015 David Capello
|
||||
// Copyright (C) 2001-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
// the End-User License Agreement for Aseprite.
|
||||
@ -11,10 +11,10 @@
|
||||
#include "app/thumbnail_generator.h"
|
||||
|
||||
#include "app/app.h"
|
||||
#include "app/app_render.h"
|
||||
#include "app/document.h"
|
||||
#include "app/file/file.h"
|
||||
#include "app/file_system.h"
|
||||
#include "app/ui/editor/editor_render.h"
|
||||
#include "base/bind.h"
|
||||
#include "base/scoped_lock.h"
|
||||
#include "base/thread.h"
|
||||
@ -71,9 +71,8 @@ private:
|
||||
base::UniquePtr<Image> image(Image::create(
|
||||
IMAGE_RGB, sprite->width(), sprite->height()));
|
||||
|
||||
AppRender render;
|
||||
EditorRender render;
|
||||
render.setupBackground(NULL, image->pixelFormat());
|
||||
render.setBgType(render::BgType::CHECKED);
|
||||
render.renderSprite(image, sprite, frame_t(0));
|
||||
|
||||
// Calculate the thumbnail size
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2001-2017 David Capello
|
||||
// Copyright (C) 2001-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
// the End-User License Agreement for Aseprite.
|
||||
@ -33,6 +33,7 @@
|
||||
#include "doc/layer.h"
|
||||
#include "doc/primitives.h"
|
||||
#include "doc/site.h"
|
||||
#include "render/render.h"
|
||||
#include "she/display.h"
|
||||
#include "ui/manager.h"
|
||||
#include "ui/system.h"
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2001-2017 David Capello
|
||||
// Copyright (C) 2001-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
// the End-User License Agreement for Aseprite.
|
||||
@ -20,6 +20,7 @@
|
||||
#include "app/tools/tool_loop_manager.h"
|
||||
#include "app/ui/editor/editor.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/keyboard_shortcuts.h"
|
||||
#include "app/ui/skin/skin_theme.h"
|
||||
|
@ -35,6 +35,7 @@
|
||||
#include "app/ui/editor/drawing_state.h"
|
||||
#include "app/ui/editor/editor_customization_delegate.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/moving_pixels_state.h"
|
||||
#include "app/ui/editor/pixels_movement.h"
|
||||
@ -153,10 +154,7 @@ private:
|
||||
};
|
||||
|
||||
// static
|
||||
doc::ImageBufferPtr Editor::m_renderBuffer;
|
||||
|
||||
// static
|
||||
AppRender Editor::m_renderEngine;
|
||||
EditorRender* Editor::m_renderEngine = nullptr;
|
||||
|
||||
Editor::Editor(Document* document, EditorFlags flags)
|
||||
: Widget(editor_type())
|
||||
@ -181,6 +179,9 @@ Editor::Editor(Document* document, EditorFlags flags)
|
||||
, m_showGuidesThisCel(nullptr)
|
||||
, m_tagFocusBand(-1)
|
||||
{
|
||||
if (!m_renderEngine)
|
||||
m_renderEngine = new EditorRender;
|
||||
|
||||
m_proj.setPixelRatio(m_sprite->pixelRatio());
|
||||
|
||||
// Add the first state into the history.
|
||||
@ -247,7 +248,10 @@ Editor::~Editor()
|
||||
|
||||
void Editor::destroyEditorSharedInternals()
|
||||
{
|
||||
m_renderBuffer.reset();
|
||||
if (m_renderEngine) {
|
||||
delete m_renderEngine;
|
||||
m_renderEngine = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
bool Editor::isActive() const
|
||||
@ -537,10 +541,6 @@ void Editor::drawOneSpriteUnclippedRect(ui::Graphics* g, const gfx::Rect& sprite
|
||||
if (rc.isEmpty())
|
||||
return;
|
||||
|
||||
// Generate the rendered image
|
||||
if (!m_renderBuffer)
|
||||
m_renderBuffer.reset(new doc::ImageBuffer());
|
||||
|
||||
base::UniquePtr<Image> rendered(NULL);
|
||||
try {
|
||||
// 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
|
||||
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.setSelectedLayer(m_layer);
|
||||
m_renderEngine->setRefLayersVisiblity(true);
|
||||
m_renderEngine->setSelectedLayer(m_layer);
|
||||
if (m_flags & Editor::kUseNonactiveLayersOpacityWhenEnabled)
|
||||
m_renderEngine.setNonactiveLayersOpacity(Preferences::instance().experimental.nonactiveLayersOpacity());
|
||||
m_renderEngine->setNonactiveLayersOpacity(Preferences::instance().experimental.nonactiveLayersOpacity());
|
||||
else
|
||||
m_renderEngine.setNonactiveLayersOpacity(255);
|
||||
m_renderEngine.setProjection(m_proj);
|
||||
m_renderEngine.setupBackground(m_document, rendered->pixelFormat());
|
||||
m_renderEngine.disableOnionskin();
|
||||
m_renderEngine->setNonactiveLayersOpacity(255);
|
||||
m_renderEngine->setProjection(m_proj);
|
||||
m_renderEngine->setupBackground(m_document, rendered->pixelFormat());
|
||||
m_renderEngine->disableOnionskin();
|
||||
|
||||
if ((m_flags & kShowOnionskin) == kShowOnionskin) {
|
||||
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);
|
||||
opts.loopTag(tag);
|
||||
|
||||
m_renderEngine.setOnionskin(opts);
|
||||
m_renderEngine->setOnionskin(opts);
|
||||
}
|
||||
}
|
||||
|
||||
ExtraCelRef extraCel = m_document->extraCel();
|
||||
if (extraCel && extraCel->type() != render::ExtraType::NONE) {
|
||||
m_renderEngine.setExtraImage(
|
||||
m_renderEngine->setExtraImage(
|
||||
extraCel->type(),
|
||||
extraCel->cel(),
|
||||
extraCel->image(),
|
||||
@ -618,10 +619,10 @@ void Editor::drawOneSpriteUnclippedRect(ui::Graphics* g, const gfx::Rect& sprite
|
||||
m_layer, m_frame);
|
||||
}
|
||||
|
||||
m_renderEngine.renderSprite(
|
||||
m_renderEngine->renderSprite(
|
||||
rendered, m_sprite, m_frame, gfx::Clip(0, 0, rc));
|
||||
|
||||
m_renderEngine.removeExtraImage();
|
||||
m_renderEngine->removeExtraImage();
|
||||
}
|
||||
catch (const std::exception& e) {
|
||||
Console::showException(e);
|
||||
@ -1204,7 +1205,7 @@ void Editor::flashCurrentLayer()
|
||||
int x, y;
|
||||
const Image* src_image = site.image(&x, &y);
|
||||
if (src_image) {
|
||||
m_renderEngine.removePreviewImage();
|
||||
m_renderEngine->removePreviewImage();
|
||||
|
||||
ExtraCelRef extraCel(new ExtraCel);
|
||||
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);
|
||||
}
|
||||
|
||||
// static
|
||||
ImageBufferPtr Editor::getRenderImageBuffer()
|
||||
{
|
||||
return m_renderBuffer;
|
||||
}
|
||||
|
||||
gfx::Point Editor::calcExtraPadding(const Projection& proj)
|
||||
{
|
||||
View* view = View::getView(this);
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2001-2017 David Capello
|
||||
// Copyright (C) 2001-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
// the End-User License Agreement for Aseprite.
|
||||
@ -8,7 +8,6 @@
|
||||
#define APP_UI_EDITOR_H_INCLUDED
|
||||
#pragma once
|
||||
|
||||
#include "app/app_render.h"
|
||||
#include "app/color.h"
|
||||
#include "app/document.h"
|
||||
#include "app/pref/preferences.h"
|
||||
@ -26,6 +25,7 @@
|
||||
#include "filters/tiled_mode.h"
|
||||
#include "gfx/fwd.h"
|
||||
#include "obs/connection.h"
|
||||
#include "render/projection.h"
|
||||
#include "render/zoom.h"
|
||||
#include "ui/base.h"
|
||||
#include "ui/cursor_type.h"
|
||||
@ -51,6 +51,7 @@ namespace app {
|
||||
class Context;
|
||||
class DocumentView;
|
||||
class EditorCustomizationDelegate;
|
||||
class EditorRender;
|
||||
class PixelsMovement;
|
||||
|
||||
namespace tools {
|
||||
@ -253,11 +254,7 @@ namespace app {
|
||||
// Gets the brush preview controller.
|
||||
BrushPreview& brushPreview() { return m_brushPreview; }
|
||||
|
||||
// Returns the buffer used to render editor viewports.
|
||||
// E.g. It can be re-used by PreviewCommand
|
||||
static ImageBufferPtr getRenderImageBuffer();
|
||||
|
||||
AppRender& renderEngine() { return m_renderEngine; }
|
||||
EditorRender& renderEngine() { return *m_renderEngine; }
|
||||
|
||||
// IColorSource
|
||||
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?
|
||||
gfx::Point m_oldMainTilePos;
|
||||
|
||||
static doc::ImageBufferPtr m_renderBuffer;
|
||||
|
||||
// The render engine must be shared between all editors so when a
|
||||
// DrawingState is being used in one editor, other editors for the
|
||||
// same document can show the same preview image/stroke being drawn
|
||||
// (search for Render::setPreviewImage()).
|
||||
static AppRender m_renderEngine;
|
||||
static EditorRender* m_renderEngine;
|
||||
};
|
||||
|
||||
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
|
||||
// Copyright (c) 2001-2016 David Capello
|
||||
// Copyright (c) 2001-2018 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
// Read LICENSE.txt for more information.
|
||||
@ -16,8 +16,9 @@
|
||||
#include "gfx/clip.h"
|
||||
#include "gfx/point.h"
|
||||
#include "gfx/size.h"
|
||||
#include "render/bg_type.h"
|
||||
#include "render/extra_type.h"
|
||||
#include "render/onionskin_position.h"
|
||||
#include "render/onionskin_options.h"
|
||||
#include "render/projection.h"
|
||||
|
||||
namespace doc {
|
||||
@ -32,60 +33,6 @@ namespace doc {
|
||||
namespace render {
|
||||
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)(
|
||||
Image* dst,
|
||||
const Image* src,
|
||||
|
Loading…
x
Reference in New Issue
Block a user