summaryrefslogtreecommitdiff
path: root/framebuffer/fb_plotters.c
diff options
context:
space:
mode:
authorVincent Sanders <vince@netsurf-browser.org>2009-02-24 12:32:28 +0000
committerVincent Sanders <vince@netsurf-browser.org>2009-02-24 12:32:28 +0000
commitb6c4a4589f8147ea7f5ee2882fa1dd99715d579c (patch)
treee601f718254f14f2dd6854ab8d8650b2fd7ccc37 /framebuffer/fb_plotters.c
parent5d2c6f8ad90084584831c7f489d6ef89a8779120 (diff)
downloadnetsurf-b6c4a4589f8147ea7f5ee2882fa1dd99715d579c.tar.gz
netsurf-b6c4a4589f8147ea7f5ee2882fa1dd99715d579c.tar.bz2
Fix horizontal panning
Fix linux fb keymap svn path=/trunk/netsurf/; revision=6613
Diffstat (limited to 'framebuffer/fb_plotters.c')
-rw-r--r--framebuffer/fb_plotters.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/framebuffer/fb_plotters.c b/framebuffer/fb_plotters.c
index 2b6e06d23..c99c63c2c 100644
--- a/framebuffer/fb_plotters.c
+++ b/framebuffer/fb_plotters.c
@@ -471,18 +471,28 @@ bool fb_plotters_move_block(int srcx, int srcy, int width, int height, int dstx,
{
uint8_t *srcptr = (framebuffer->ptr +
(srcy * framebuffer->linelen) +
- (srcx));
+ ((srcx * framebuffer->bpp) / 8));
uint8_t *dstptr = (framebuffer->ptr +
(dsty * framebuffer->linelen) +
- (dstx));
+ ((dstx * framebuffer->bpp) / 8));
bbox_t redrawbox;
+ int hloop;
LOG(("from (%d,%d) w %d h %d to (%d,%d)",srcx,srcy,width,height,dstx,dsty));
- memmove(dstptr, srcptr, (width * height * framebuffer->bpp) / 8);
-
+ if (width == framebuffer->width) {
+ /* take shortcut and use memmove */
+ memmove(dstptr, srcptr, (width * height * framebuffer->bpp) / 8);
+ } else {
+
+ for (hloop = height; hloop > 0; hloop--) {
+ memmove(dstptr, srcptr, (width * framebuffer->bpp) / 8);
+ srcptr += framebuffer->linelen;
+ dstptr += framebuffer->linelen;
+ }
+ }
/* callback to the os specific routine in case it needs to do something
* explicit to redraw
*/