aboutsummaryrefslogtreecommitdiff
path: root/engines/glk
diff options
context:
space:
mode:
authorPaul Gilbert2018-11-18 21:31:58 -0800
committerPaul Gilbert2018-12-08 19:05:59 -0800
commit5a05140ac34a6a177b90a22f8601f2adff4831d5 (patch)
treea42401c712c3b270ed41fd04909a669faef0826a /engines/glk
parentbd86fd7bbf19324e06834ee8f2e08e7e0df02e14 (diff)
downloadscummvm-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.cpp20
-rw-r--r--engines/glk/picture.h18
-rw-r--r--engines/glk/window_graphics.cpp2
-rw-r--r--engines/glk/window_text_buffer.cpp2
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;
}