aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends/vkeybd/virtual-keyboard-gui.cpp45
-rw-r--r--graphics/surface.cpp38
-rw-r--r--graphics/surface.h2
3 files changed, 43 insertions, 42 deletions
diff --git a/backends/vkeybd/virtual-keyboard-gui.cpp b/backends/vkeybd/virtual-keyboard-gui.cpp
index 4cae71ec82..37a88761aa 100644
--- a/backends/vkeybd/virtual-keyboard-gui.cpp
+++ b/backends/vkeybd/virtual-keyboard-gui.cpp
@@ -32,6 +32,47 @@
namespace Common {
+static void blit(Graphics::Surface *surf_dst, Graphics::Surface *surf_src, int16 x, int16 y, OverlayColor transparent) {
+ if (surf_dst->bytesPerPixel != sizeof(OverlayColor) || surf_src->bytesPerPixel != sizeof(OverlayColor))
+ return;
+
+ const OverlayColor *src = (const OverlayColor *)surf_src->pixels;
+ int blitW = surf_src->w;
+ int blitH = surf_src->h;
+
+ // clip co-ordinates
+ if (x < 0) {
+ blitW += x;
+ src -= x;
+ x = 0;
+ }
+ if (y < 0) {
+ blitH += y;
+ src -= y * surf_src->w;
+ y = 0;
+ }
+ if (blitW > surf_dst->w - x)
+ blitW = surf_dst->w - x;
+ if (blitH > surf_dst->h - y)
+ blitH = surf_dst->h - y;
+ if (blitW <= 0 || blitH <= 0)
+ return;
+
+ OverlayColor *dst = (OverlayColor *)surf_dst->getBasePtr(x, y);
+ int dstAdd = surf_dst->w - blitW;
+ int srcAdd = surf_src->w - blitW;
+
+ for (int i = 0; i < blitH; ++i) {
+ for (int j = 0; j < blitW; ++j, ++dst, ++src) {
+ OverlayColor col = *src;
+ if (col != transparent)
+ *dst = col;
+ }
+ dst += dstAdd;
+ src += srcAdd;
+ }
+}
+
VirtualKeyboardGUI::VirtualKeyboardGUI(VirtualKeyboard *kbd)
: _kbd(kbd), _displaying(false), _drag(false),
_drawCaret(false), _displayEnabled(false), _firstRun(true),
@@ -313,10 +354,10 @@ void VirtualKeyboardGUI::redraw() {
src += _overlayBackup.w;
}
- surf.blit(_kbdSurface, _kbdBound.left - _dirtyRect.left,
+ blit(&surf, _kbdSurface, _kbdBound.left - _dirtyRect.left,
_kbdBound.top - _dirtyRect.top, _kbdTransparentColor);
if (_displayEnabled) {
- surf.blit(&_dispSurface, _dispX - _dirtyRect.left,
+ blit(&surf, &_dispSurface, _dispX - _dirtyRect.left,
_dispY - _dirtyRect.top, _dispBackColor);
}
_system->copyRectToOverlay((OverlayColor*)surf.pixels, surf.w,
diff --git a/graphics/surface.cpp b/graphics/surface.cpp
index df882bf4ff..263a4fd23b 100644
--- a/graphics/surface.cpp
+++ b/graphics/surface.cpp
@@ -225,42 +225,4 @@ void Surface::move(int dx, int dy, int height) {
}
}
-void Surface::blit(Surface *surf_src, int16 x, int16 y, OverlayColor transparent) {
- if (bytesPerPixel != sizeof(OverlayColor) || surf_src->bytesPerPixel != sizeof(OverlayColor)) return ;
-
- const OverlayColor *src = (const OverlayColor*)surf_src->pixels;
- int blitW = surf_src->w;
- int blitH = surf_src->h;
-
- // clip co-ordinates
- if (x < 0) {
- blitW += x;
- src -= x;
- x = 0;
- }
- if (y < 0) {
- blitH += y;
- src -= y * surf_src->w;
- y = 0;
- }
- if (blitW > w - x) blitW = w - x;
- if (blitH > h - y) blitH = h - y;
- if (blitW <= 0 || blitH <= 0)
- return;
-
- OverlayColor *dst = (OverlayColor*) getBasePtr(x, y);
- int dstAdd = w - blitW;
- int srcAdd = surf_src->w - blitW;
-
- for (int i = 0; i < blitH; ++i) {
- for (int j = 0; j < blitW; ++j, ++dst, ++src) {
- OverlayColor col = *src;
- if (col != transparent)
- *dst = col;
- }
- dst += dstAdd;
- src += srcAdd;
- }
-}
-
} // End of namespace Graphics
diff --git a/graphics/surface.h b/graphics/surface.h
index e03db227ee..20ab816236 100644
--- a/graphics/surface.h
+++ b/graphics/surface.h
@@ -78,8 +78,6 @@ struct Surface {
void frameRect(const Common::Rect &r, uint32 color);
// See comment in graphics/surface.cpp about it
void move(int dx, int dy, int height);
-
- void blit(Surface *surf_src, int16 x, int16 y, OverlayColor transparent);
};
/**