diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt index 674625c22..1ed7d2e86 100644 --- a/src/app/CMakeLists.txt +++ b/src/app/CMakeLists.txt @@ -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 diff --git a/src/app/app_render.cpp b/src/app/app_render.cpp deleted file mode 100644 index bc5066ae4..000000000 --- a/src/app/app_render.cpp +++ /dev/null @@ -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); -} - -} diff --git a/src/app/app_render.h b/src/app/app_render.h deleted file mode 100644 index 17e9e5153..000000000 --- a/src/app/app_render.h +++ /dev/null @@ -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 diff --git a/src/app/commands/cmd_change_pixel_format.cpp b/src/app/commands/cmd_change_pixel_format.cpp index 445eb2447..ab8cc287b 100644 --- a/src/app/commands/cmd_change_pixel_format.cpp +++ b/src/app/commands/cmd_change_pixel_format.cpp @@ -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" diff --git a/src/app/commands/cmd_fullscreen_preview.cpp b/src/app/commands/cmd_fullscreen_preview.cpp index 84bbf78e4..94c67cfee 100644 --- a/src/app/commands/cmd_fullscreen_preview.cpp +++ b/src/app/commands/cmd_fullscreen_preview.cpp @@ -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)); diff --git a/src/app/commands/cmd_import_sprite_sheet.cpp b/src/app/commands/cmd_import_sprite_sheet.cpp index 8bc12ad7e..e0c4ec4f4 100644 --- a/src/app/commands/cmd_import_sprite_sheet.cpp +++ b/src/app/commands/cmd_import_sprite_sheet.cpp @@ -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" diff --git a/src/app/commands/filters/filter_preview.cpp b/src/app/commands/filters/filter_preview.cpp index 12ce06800..c34727006 100644 --- a/src/app/commands/filters/filter_preview.cpp +++ b/src/app/commands/filters/filter_preview.cpp @@ -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" diff --git a/src/app/thumbnail_generator.cpp b/src/app/thumbnail_generator.cpp index 7dc8db89c..e6a42a747 100644 --- a/src/app/thumbnail_generator.cpp +++ b/src/app/thumbnail_generator.cpp @@ -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::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 diff --git a/src/app/ui/editor/brush_preview.cpp b/src/app/ui/editor/brush_preview.cpp index 84ef6c5f7..fc494be30 100644 --- a/src/app/ui/editor/brush_preview.cpp +++ b/src/app/ui/editor/brush_preview.cpp @@ -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" diff --git a/src/app/ui/editor/drawing_state.cpp b/src/app/ui/editor/drawing_state.cpp index c423e172e..76954697d 100644 --- a/src/app/ui/editor/drawing_state.cpp +++ b/src/app/ui/editor/drawing_state.cpp @@ -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" diff --git a/src/app/ui/editor/editor.cpp b/src/app/ui/editor/editor.cpp index f7e2b9844..3588f262b 100644 --- a/src/app/ui/editor/editor.cpp +++ b/src/app/ui/editor/editor.cpp @@ -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 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); diff --git a/src/app/ui/editor/editor.h b/src/app/ui/editor/editor.h index 644fce3ad..1af3e7915 100644 --- a/src/app/ui/editor/editor.h +++ b/src/app/ui/editor/editor.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. @@ -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(); diff --git a/src/app/ui/editor/editor_render.cpp b/src/app/ui/editor/editor_render.cpp new file mode 100644 index 000000000..1eb7e7888 --- /dev/null +++ b/src/app/ui/editor/editor_render.cpp @@ -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 diff --git a/src/app/ui/editor/editor_render.h b/src/app/ui/editor/editor_render.h new file mode 100644 index 000000000..fbcbff80c --- /dev/null +++ b/src/app/ui/editor/editor_render.h @@ -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 diff --git a/src/render/bg_type.h b/src/render/bg_type.h new file mode 100644 index 000000000..2888a54c8 --- /dev/null +++ b/src/render/bg_type.h @@ -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 diff --git a/src/render/onionskin_options.h b/src/render/onionskin_options.h new file mode 100644 index 000000000..c92c9b4fc --- /dev/null +++ b/src/render/onionskin_options.h @@ -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 diff --git a/src/render/onionskin_type.h b/src/render/onionskin_type.h new file mode 100644 index 000000000..3e6b5137c --- /dev/null +++ b/src/render/onionskin_type.h @@ -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 diff --git a/src/render/render.h b/src/render/render.h index 78451f3e5..28672045e 100644 --- a/src/render/render.h +++ b/src/render/render.h @@ -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,