aboutsummaryrefslogtreecommitdiff
path: root/backends/vkeybd
diff options
context:
space:
mode:
authorMax Horn2009-01-20 22:52:29 +0000
committerMax Horn2009-01-20 22:52:29 +0000
commitc210b7187618111ee71c1f3d8404dc6ef23042e2 (patch)
tree322dffed82c7a6a622c8095770f479105868b3c1 /backends/vkeybd
parentf8da825177a8554e46deed6008916819574bdbae (diff)
downloadscummvm-rg350-c210b7187618111ee71c1f3d8404dc6ef23042e2.tar.gz
scummvm-rg350-c210b7187618111ee71c1f3d8404dc6ef23042e2.tar.bz2
scummvm-rg350-c210b7187618111ee71c1f3d8404dc6ef23042e2.zip
Moved Surface::blit to backends/vkeybd/virtual-keyboard-gui.cpp
svn-id: r35965
Diffstat (limited to 'backends/vkeybd')
-rw-r--r--backends/vkeybd/virtual-keyboard-gui.cpp45
1 files changed, 43 insertions, 2 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,