diff options
-rw-r--r-- | backends/vkeybd/virtual-keyboard-gui.cpp | 45 | ||||
-rw-r--r-- | graphics/surface.cpp | 38 | ||||
-rw-r--r-- | graphics/surface.h | 2 |
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); }; /** |