diff options
author | Paul Gilbert | 2018-11-18 21:31:58 -0800 |
---|---|---|
committer | Paul Gilbert | 2018-12-08 19:05:59 -0800 |
commit | 5a05140ac34a6a177b90a22f8601f2adff4831d5 (patch) | |
tree | a42401c712c3b270ed41fd04909a669faef0826a /engines/glk | |
parent | bd86fd7bbf19324e06834ee8f2e08e7e0df02e14 (diff) | |
download | scummvm-rg350-5a05140ac34a6a177b90a22f8601f2adff4831d5.tar.gz scummvm-rg350-5a05140ac34a6a177b90a22f8601f2adff4831d5.tar.bz2 scummvm-rg350-5a05140ac34a6a177b90a22f8601f2adff4831d5.zip |
GLK: Add picture scaling
Diffstat (limited to 'engines/glk')
-rw-r--r-- | engines/glk/picture.cpp | 20 | ||||
-rw-r--r-- | engines/glk/picture.h | 18 | ||||
-rw-r--r-- | engines/glk/window_graphics.cpp | 2 | ||||
-rw-r--r-- | engines/glk/window_text_buffer.cpp | 2 |
4 files changed, 29 insertions, 13 deletions
diff --git a/engines/glk/picture.cpp b/engines/glk/picture.cpp index 8461983c45..89e75fa941 100644 --- a/engines/glk/picture.cpp +++ b/engines/glk/picture.cpp @@ -126,6 +126,21 @@ Picture *Pictures::load(uint32 id) { return pic; } +Picture *Pictures::scale(Picture *src, size_t sx, size_t sy) { + // Check for the presence of an already scaled version of that size + Picture *dst = retrieve(src->_id, true); + if (dst && dst->w == sx && dst->h == sy) + return dst; + + // Create a new picture of the destination size and rescale the source picture + dst = new Picture(sx, sy, src->format); + dst->_id = src->_id; + dst->_scaled = true; + dst->transBlitFrom(*src, src->getBounds(), dst->getBounds(), (uint)-1); + + storeScaled(dst); +} + /*--------------------------------------------------------------------------*/ void Picture::increment() { @@ -139,11 +154,6 @@ void Picture::decrement() { } } -Picture *Picture::scale(int sx, int sy) { - // TODO: gli_picture_scale - return nullptr; -} - void Picture::drawPicture(int x0, int y0, int dx0, int dy0, int dx1, int dy1) { // TODO: drawPicture } diff --git a/engines/glk/picture.h b/engines/glk/picture.h index ca4f9995c8..c0108dd2a0 100644 --- a/engines/glk/picture.h +++ b/engines/glk/picture.h @@ -40,7 +40,13 @@ public: /** * Constructor */ - Picture() : Graphics::ManagedSurface(), _refCount(0), _id(0), _scaled(0) {} + Picture() : Graphics::ManagedSurface(), _refCount(0), _id(0), _scaled(false) {} + + /** + * Constructor + */ + Picture(int width, int height, const Graphics::PixelFormat &format) : + Graphics::ManagedSurface(width, height, format), _refCount(0), _id(0), _scaled(false) {} /** * Increment reference counter @@ -53,11 +59,6 @@ public: void decrement(); /** - * Rescale the picture to a new picture of a given size - */ - Picture *scale(int sx, int sy); - - /** * Draw the picture */ void drawPicture(int x0, int y0, int dx0, int dy0, int dx1, int dy1); @@ -134,6 +135,11 @@ public: * Load a given picture */ Picture *load(uint32 id); + + /** + * Rescale the passed picture to a new picture of a given size + */ + Picture *scale(Picture *src, size_t sx, size_t sy); }; } // End of namespace Glk diff --git a/engines/glk/window_graphics.cpp b/engines/glk/window_graphics.cpp index 13e66451f7..92224b6a4d 100644 --- a/engines/glk/window_graphics.cpp +++ b/engines/glk/window_graphics.cpp @@ -186,7 +186,7 @@ void GraphicsWindow::drawPicture(Picture *src, int x0, int y0, int width, int h int w, h; if (width != src->w || height != src->h) { - src = src->scale(width, height); + src = g_vm->_pictures->scale(src, width, height); if (!src) return; } diff --git a/engines/glk/window_text_buffer.cpp b/engines/glk/window_text_buffer.cpp index 6f861fb7b3..4c55066603 100644 --- a/engines/glk/window_text_buffer.cpp +++ b/engines/glk/window_text_buffer.cpp @@ -286,7 +286,7 @@ glui32 TextBufferWindow::drawPicture(glui32 image, glui32 align, glui32 scaled, if (scaled) { Picture *tmp; - tmp = pic->scale(width, height); + tmp = g_vm->_pictures->scale(pic, width, height); pic = tmp; } |