Merge branch '1.0'

Conflicts:
	src/app/commands/cmd_preview.cpp
	src/app/thumbnail_generator.cpp
	src/app/ui/editor/editor.h
	src/app/util/render.h
	src/raster/image_buffer.h
This commit is contained in:
David Capello 2014-11-27 23:40:14 -03:00
commit adf08ac7df
7 changed files with 30 additions and 7 deletions

View File

@ -193,7 +193,8 @@ protected:
m_render.reset( m_render.reset(
renderEngine.renderSprite( renderEngine.renderSprite(
0, 0, m_sprite->width(), m_sprite->height(), 0, 0, m_sprite->width(), m_sprite->height(),
m_editor->frame(), Zoom(1, 1), false, false)); m_editor->frame(), Zoom(1, 1), false, false,
Editor::getRenderImageBuffer()));
} }
int x, y, w, h, u, v; int x, y, w, h, u, v;

View File

@ -83,9 +83,11 @@ private:
RenderEngine renderEngine(m_fop->document, RenderEngine renderEngine(m_fop->document,
sprite, NULL, FrameNumber(0)); sprite, NULL, FrameNumber(0));
doc::ImageBufferPtr thumbnail_buffer(new doc::ImageBuffer);
base::UniquePtr<Image> image(renderEngine.renderSprite( base::UniquePtr<Image> image(renderEngine.renderSprite(
0, 0, sprite->width(), sprite->height(), 0, 0, sprite->width(), sprite->height(),
FrameNumber(0), Zoom(1, 1), true, false)); FrameNumber(0), Zoom(1, 1), true, false,
thumbnail_buffer));
// Calculate the thumbnail size // Calculate the thumbnail size
int thumb_w = MAX_THUMBNAIL_SIZE * image->width() / MAX(image->width(), image->height()); int thumb_w = MAX_THUMBNAIL_SIZE * image->width() / MAX(image->width(), image->height());

View File

@ -137,6 +137,8 @@ private:
Graphics* m_g; Graphics* m_g;
}; };
static doc::ImageBufferPtr render_buffer;
Editor::Editor(Document* document, EditorFlags flags) Editor::Editor(Document* document, EditorFlags flags)
: Widget(editor_type()) : Widget(editor_type())
, m_state(new StandbyState()) , m_state(new StandbyState())
@ -387,12 +389,16 @@ void Editor::drawOneSpriteUnclippedRect(ui::Graphics* g, const gfx::Rect& rc, in
RenderEngine renderEngine(m_document, m_sprite, m_layer, m_frame); RenderEngine renderEngine(m_document, m_sprite, m_layer, m_frame);
// Generate the rendered image // Generate the rendered image
if (!render_buffer)
render_buffer.reset(new doc::ImageBuffer());
base::UniquePtr<Image> rendered(NULL); base::UniquePtr<Image> rendered(NULL);
try { try {
rendered.reset(renderEngine.renderSprite( rendered.reset(renderEngine.renderSprite(
source_x, source_y, width, height, source_x, source_y, width, height,
m_frame, m_zoom, true, m_frame, m_zoom, true,
((m_flags & kShowOnionskin) == kShowOnionskin))); ((m_flags & kShowOnionskin) == kShowOnionskin),
render_buffer));
} }
catch (const std::exception& e) { catch (const std::exception& e) {
Console::showException(e); Console::showException(e);
@ -1455,6 +1461,12 @@ void Editor::notifyScrollChanged()
m_observers.notifyScrollChanged(this); m_observers.notifyScrollChanged(this);
} }
// static
ImageBufferPtr Editor::getRenderImageBuffer()
{
return render_buffer;
}
void Editor::onSetTiledMode(filters::TiledMode mode) void Editor::onSetTiledMode(filters::TiledMode mode)
{ {
invalidate(); invalidate();

View File

@ -30,6 +30,7 @@
#include "app/zoom.h" #include "app/zoom.h"
#include "base/connection.h" #include "base/connection.h"
#include "doc/frame_number.h" #include "doc/frame_number.h"
#include "doc/image_buffer.h"
#include "gfx/fwd.h" #include "gfx/fwd.h"
#include "ui/base.h" #include "ui/base.h"
#include "ui/timer.h" #include "ui/timer.h"
@ -196,6 +197,10 @@ namespace app {
// position. // position.
void notifyScrollChanged(); void notifyScrollChanged();
// Returns the buffer used to render editor viewports.
// E.g. It can be re-used by PreviewCommand
static ImageBufferPtr getRenderImageBuffer();
// in cursor.cpp // in cursor.cpp
static app::Color get_cursor_color(); static app::Color get_cursor_color();

View File

@ -486,7 +486,8 @@ Image* RenderEngine::renderSprite(int source_x, int source_y,
int width, int height, int width, int height,
FrameNumber frame, Zoom zoom, FrameNumber frame, Zoom zoom,
bool draw_tiled_bg, bool draw_tiled_bg,
bool enable_onionskin) bool enable_onionskin,
ImageBufferPtr& buffer)
{ {
void (*zoomed_func)(Image*, const Image*, const Palette*, int, int, int, int, Zoom); void (*zoomed_func)(Image*, const Image*, const Palette*, int, int, int, int, Zoom);
const LayerImage* background = m_sprite->backgroundLayer(); const LayerImage* background = m_sprite->backgroundLayer();
@ -515,7 +516,7 @@ Image* RenderEngine::renderSprite(int source_x, int source_y,
} }
// Create a temporary RGB bitmap to draw all to it // Create a temporary RGB bitmap to draw all to it
image = Image::create(IMAGE_RGB, width, height); image = Image::create(IMAGE_RGB, width, height, buffer);
if (!image) if (!image)
return NULL; return NULL;

View File

@ -23,6 +23,7 @@
#include "app/color.h" #include "app/color.h"
#include "app/zoom.h" #include "app/zoom.h"
#include "doc/frame_number.h" #include "doc/frame_number.h"
#include "doc/image_buffer.h"
namespace doc { namespace doc {
class Image; class Image;
@ -73,7 +74,8 @@ namespace app {
int width, int height, int width, int height,
FrameNumber frame, Zoom zoom, FrameNumber frame, Zoom zoom,
bool draw_tiled_bg, bool draw_tiled_bg,
bool enable_onionskin); bool enable_onionskin,
ImageBufferPtr& buffer);
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
// Extra functions // Extra functions

View File

@ -16,7 +16,7 @@ namespace doc {
class ImageBuffer { class ImageBuffer {
public: public:
ImageBuffer(size_t size) : m_buffer(size) { ImageBuffer(size_t size = 1) : m_buffer(size) {
} }
size_t size() const { return m_buffer.size(); } size_t size() const { return m_buffer.size(); }