nanogui: Panning and double buffering


Previous by date: 27 Jun 2008 04:00:05 -0000 Re: Doublebuffering, Aaron J. Grier
Next by date: 27 Jun 2008 04:00:05 -0000 Re: Panning and double buffering, Natarajan N
Previous in thread: 27 Jun 2008 04:00:05 -0000 Re: Panning and double buffering, Steven Scholz
Next in thread: 27 Jun 2008 04:00:05 -0000 Re: Panning and double buffering, Natarajan N

Subject: Panning and double buffering
From: mohanreddy.b ####@####.####
Date: 27 Jun 2008 04:00:05 -0000
Message-Id: <4d8f9b866b30646af6feec4856f4caa5@localhost>

Is any one tested the following code. i got this code from list for double
buffering.i am getting segmentation fault while running on Embedded board.

Index: microwin/src/drivers/scr_bios.c
===================================================================
--- microwin.orig/src/drivers/scr_bios.c
+++ microwin/src/drivers/scr_bios.c
@@ -235,8 +235,8 @@ VGA_close(PSD psd)
 static void
 VGA_getscreeninfo(PSD psd,PMWSCREENINFO psi)
 {
-	psi->rows = psd->yvirtres;
-	psi->cols = psd->xvirtres;
+	psi->visrows = psi->rows = psd->yvirtres;
+	psi->viscols = psi->cols = psd->xvirtres;
 	psi->planes = psd->planes;
 	psi->bpp = psd->bpp;
 	psi->ncolors = psd->ncolors;
Index: microwin/src/drivers/scr_debug.c
===================================================================
--- microwin.orig/src/drivers/scr_debug.c
+++ microwin/src/drivers/scr_debug.c
@@ -76,8 +76,8 @@ DBG_close(PSD psd)
 static void
 DBG_getscreeninfo(PSD psd,PMWSCREENINFO psi)
 {
-	psi->rows = psd->yvirtres;
-	psi->cols = psd->xvirtres;
+	psi->visrows = psi->rows = psd->yvirtres;
+	psi->viscols = psi->cols = psd->xvirtres;
 	psi->planes = psd->planes;
 	psi->bpp = psd->bpp;
 	psi->ncolors = psd->ncolors;
Index: microwin/src/drivers/scr_djgr.c
===================================================================
--- microwin.orig/src/drivers/scr_djgr.c
+++ microwin/src/drivers/scr_djgr.c
@@ -107,8 +107,8 @@ DJGR_close(PSD psd)
 static void
 DJGR_getscreeninfo(PSD psd,PMWSCREENINFO psi)
 {
-	psi->rows = psd->yvirtres;
-	psi->cols = psd->xvirtres;
+	psi->visrows = psi->rows = psd->yvirtres;
+	psi->viscols = psi->cols = psd->xvirtres;
 	psi->planes = psd->planes;
 	psi->bpp = psd->bpp;
 	psi->ncolors = psd->ncolors;
Index: microwin/src/drivers/scr_ecos.c
===================================================================
--- microwin.orig/src/drivers/scr_ecos.c
+++ microwin/src/drivers/scr_ecos.c
@@ -357,8 +357,8 @@ setfadelevel(PSD psd, int f)
 static void
 gen_getscreeninfo(PSD psd,PMWSCREENINFO psi)
 {
-    psi->rows = psd->yvirtres;
-    psi->cols = psd->xvirtres;
+    psi->visrows = psi->rows = psd->yvirtres;
+    psi->viscols = psi->cols = psd->xvirtres;
     psi->planes = psd->planes;
     psi->bpp = psd->bpp;
     psi->ncolors = psd->ncolors;
Index: microwin/src/drivers/scr_em84xx.c
===================================================================
--- microwin.orig/src/drivers/scr_em84xx.c
+++ microwin/src/drivers/scr_em84xx.c
@@ -247,8 +247,8 @@ EM8400_close(PSD psd)
 static void
 EM8400_getscreeninfo(PSD psd,PMWSCREENINFO psi)
 {
-	psi->rows = psd->yvirtres;
-	psi->cols = psd->xvirtres;
+	psi->visrows = psi->rows = psd->yvirtres;
+	psi->viscols = psi->cols = psd->xvirtres;
 	psi->planes = psd->planes;
 	psi->bpp = psd->bpp;
 	psi->ncolors = psd->ncolors;
Index: microwin/src/drivers/scr_fb.c
===================================================================
--- microwin.orig/src/drivers/scr_fb.c
+++ microwin/src/drivers/scr_fb.c
@@ -43,10 +43,10 @@ static void fb_close(PSD psd);
 static void fb_setportrait(PSD psd, int portraitmode);
 static void fb_setpalette(PSD psd,int first, int count, MWPALENTRY
*palette);
 static void gen_getscreeninfo(PSD psd,PMWSCREENINFO psi);
-
+static void fb_panscreen(PSD psd, int, int);
 
 SCREENDEVICE	scrdev = {
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL,
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL,
 	fb_open,
 	fb_close,
 	gen_getscreeninfo,
@@ -64,8 +64,10 @@ SCREENDEVICE	scrdev = {
 	gen_allocatememgc,
 	fb_mapmemgc,
 	gen_freememgc,
+	fb_panscreen,
 	NULL,			/* StretchBlit subdriver*/
 	fb_setportrait		/* SetPortrait*/
+
 };
 
 /* static variables*/
@@ -144,9 +146,25 @@ fb_open(PSD psd)
 	psd->xres = psd->xvirtres = fb_var.xres_virtual;
 	psd->yres = psd->yvirtres = fb_var.yres_virtual;
 #else
-	psd->xres = psd->xvirtres = fb_var.xres;
-	psd->yres = psd->yvirtres = fb_var.yres;
+	/* The entire xvirtres is available for us to draw on */
+
+	psd->xres = psd->xvirtres = fb_var.xres_virtual;
+	psd->yres = psd->yvirtres = fb_var.yres_virtual;
+
+	/* But we want to know how much of the screen is visible so we can
+	   know when to pan */
+
+	psd->xvisible = fb_var.xres;
+	psd->yvisible = fb_var.yres;
+
+	printf("FB:  total (%d,%d) visible (%d,%d)\n",
+	       psd->xvirtres, psd->yvirtres, psd->xvisible, psd->yvisible);
+
 #endif
+	/* Offset into the screen for panning purposes */
+	
+	psd->xoffset = 0;
+	psd->yoffset = 0;
 
 	/* set planes from fb type*/
 	if (type == FB_TYPE_VGA_PLANES)
@@ -472,6 +490,9 @@ gen_getscreeninfo(PSD psd,PMWSCREENINFO 
 {
 	psi->rows = psd->yvirtres;
 	psi->cols = psd->xvirtres;
+	psi->viscols = 	psd->xvisible;
+	psi->visrows = psd->yvisible;
+
 	psi->planes = psd->planes;
 	psi->bpp = psd->bpp;
 	psi->ncolors = psd->ncolors;
@@ -529,3 +550,21 @@ gen_getscreeninfo(PSD psd,PMWSCREENINFO 
 		psi->ydpcm = 19;	/* assumes screen height of 18 cm*/
 	}
 }
+
+static void
+fb_panscreen(PSD psd, int xoffset, int yoffset) {
+  struct fb_var_screeninfo fb_var;
+  
+  if (ioctl(fb, FBIOGET_VSCREENINFO, &fb_var) == -1) 
+    return;
+
+  /* Don't bother doing the operation if we don't have to */
+
+  //if (fb_var.xoffset == xoffset && fb_var.yoffset == yoffset)
+  // return;
+
+  fb_var.xoffset = xoffset;
+  fb_var.yoffset = yoffset;
+
+  ioctl(fb, FBIOPAN_DISPLAY, &fb_var);
+}
Index: microwin/src/drivers/scr_fbsd.c
===================================================================
--- microwin.orig/src/drivers/scr_fbsd.c
+++ microwin/src/drivers/scr_fbsd.c
@@ -201,8 +201,8 @@ static PSD FBSD_open(PSD psd)
 
 static void FBSD_getscreeninfo(PSD psd, PMWSCREENINFO psi)
 {
-    psi->rows = psd->yvirtres;
-    psi->cols = psd->xvirtres;
+    psi->visrows = psi->rows = psd->yvirtres;
+    psi->viscols = psi->cols = psd->xvirtres;
     psi->planes = psd->planes;
     psi->bpp = psd->bpp;
     psi->ncolors = psd->ncolors;
Index: microwin/src/drivers/scr_herc.c
===================================================================
--- microwin.orig/src/drivers/scr_herc.c
+++ microwin/src/drivers/scr_herc.c
@@ -144,8 +144,8 @@ HERC_close(PSD psd)
 static void
 HERC_getscreeninfo(PSD psd,PMWSCREENINFO psi)
 {
-	psi->rows = psd->yvirtres;
-	psi->cols = psd->xvirtres;
+	psi->visrows = psi->rows = psd->yvirtres;
+	psi->viscols = psi->cols = psd->xvirtres;
 	psi->planes = psd->planes;
 	psi->bpp = psd->bpp;
 	psi->ncolors = psd->ncolors;
Index: microwin/src/drivers/scr_prsm.c
===================================================================
--- microwin.orig/src/drivers/scr_prsm.c
+++ microwin/src/drivers/scr_prsm.c
@@ -126,8 +126,8 @@ VB_close(PSD psd)
 static void
 VB_getscreeninfo(PSD psd,PMWSCREENINFO psi)
 {
-	psi->rows = psd->yvirtres;
-	psi->cols = psd->xvirtres;
+	pis->visrows = psi->rows = psd->yvirtres;
+	psi->viscols = psi->cols = psd->xvirtres;
 	psi->planes = psd->planes;
 	psi->bpp = psd->bpp;
 	psi->ncolors = psd->ncolors;
Index: microwin/src/drivers/scr_rtems.c
===================================================================
--- microwin.orig/src/drivers/scr_rtems.c
+++ microwin/src/drivers/scr_rtems.c
@@ -311,8 +311,8 @@ ioctl_setpalette(int start, int len, sho
 static void
 gen_getscreeninfo(PSD psd,PMWSCREENINFO psi)
 {
-	psi->rows = psd->yvirtres;
-	psi->cols = psd->xvirtres;
+	psi->visrows = psi->rows = psd->yvirtres;
+	psi->viscols = psi->cols = psd->xvirtres;
 	psi->planes = psd->planes;
 	psi->bpp = psd->bpp;
 	psi->ncolors = psd->ncolors;
Index: microwin/src/drivers/scr_svga.c
===================================================================
--- microwin.orig/src/drivers/scr_svga.c
+++ microwin/src/drivers/scr_svga.c
@@ -109,8 +109,8 @@ SVGA_close(PSD psd)
 static void
 SVGA_getscreeninfo(PSD psd,PMWSCREENINFO psi)
 {
-	psi->rows = psd->yvirtres;
-	psi->cols = psd->xvirtres;
+	psi->visrows = psi->rows = psd->yvirtres;
+	psi->viscols = psi->cols = psd->xvirtres;
 	psi->planes = psd->planes;
 	psi->bpp = psd->bpp;
 	psi->ncolors = psd->ncolors;
Index: microwin/src/drivers/scr_x11.c
===================================================================
--- microwin.orig/src/drivers/scr_x11.c
+++ microwin/src/drivers/scr_x11.c
@@ -841,8 +841,8 @@ X11_close(PSD psd)
 static void
 X11_getscreeninfo(PSD psd, PMWSCREENINFO psi)
 {
-	psi->rows = psd->yvirtres;
-	psi->cols = psd->xvirtres;
+	psi->visrows = psi->rows = psd->yvirtres;
+	psi->viscols = psi->cols = psd->xvirtres;
 	psi->planes = psd->planes;
 	psi->bpp = psd->bpp;
 	psi->ncolors = psd->ncolors;
Index: microwin/src/engine/devmouse.c
===================================================================
--- microwin.orig/src/engine/devmouse.c
+++ microwin/src/engine/devmouse.c
@@ -183,6 +183,8 @@ GdSetAccelMouse(int newthresh, int newsc
 void
 GdMoveMouse(MWCOORD newx, MWCOORD newy)
 {
+        int xo = scrdev.xoffset, yo = scrdev.yoffset;
+	
 	if (!(mousedev.flags & MOUSE_RAW)) {
 		if (newx < minx)
 			newx = minx;
@@ -197,6 +199,30 @@ GdMoveMouse(MWCOORD newx, MWCOORD newy)
 	if (newx == xpos && newy == ypos)
 		return;
 
+#ifdef NOTUSED
+	/* Pan the display if possible - we want to do this smoothly */
+
+	if (newx < scrdev.xoffset)
+ 	  xo = newx - 5;
+	else if (newx > scrdev.xoffset + scrdev.xvisible)
+	  xo = (newx + 5) - scrdev.xvisible;
+	
+	if (newy < scrdev.yoffset)
+	  yo = newy - 5;
+	else if (newy > scrdev.yoffset + scrdev.yvisible)
+	  yo = (newy + 5) - scrdev.yvisible;
+	
+	if (xo < 0) xo = 0;
+	if (xo > scrdev.xres) xo = scrdev.xres - scrdev.xvisible;
+	
+	if (yo < 0) yo = 0;
+	if (yo > scrdev.yres) yo = scrdev.yres - scrdev.yvisible;
+
+	/* Move the screen accordingly */
+	if (xo != scrdev.xoffset || yo != scrdev.yoffset)
+	  GdPanScreen(&scrdev, xo, yo);
+#endif
+
 	changed = TRUE;
 
 	xpos = newx;
Index: microwin/src/engine/devopen.c
===================================================================
--- microwin.orig/src/engine/devopen.c
+++ microwin/src/engine/devopen.c
@@ -408,6 +408,41 @@ GdGetColorRGB(PSD psd, MWPIXELVAL pixel)
 	}
 }
 
+void
+GdPanScreen(PSD psd, int xoffset, int yoffset) {
+		
+	if (!psd->PanScreen) return;
+
+	if ((psd->xvisible != psd->xvirtres)) {
+
+		/* Bound it */
+
+		if (xoffset < 0) xoffset = 0;		
+		if (xoffset + psd->xvisible > psd->xvirtres)
+			xoffset = psd->xvirtres - psd->xvisible;
+	}
+	else 
+		xoffset = 0;
+
+	if ((psd->yvisible != psd->yvirtres)) {
+		
+		/* Bound it */
+
+		if (yoffset < 0) yoffset = 0;		
+		if (yoffset + psd->yvisible > psd->yvirtres)
+			yoffset = psd->yvirtres - psd->yvisible;
+	}
+	else 
+		yoffset = 0;
+
+	if (xoffset != psd->xoffset || yoffset != psd->yoffset) {
+		psd->yoffset = yoffset;
+		psd->xoffset = xoffset;
+
+		psd->PanScreen(psd, psd->xoffset, psd->yoffset);
+	}
+}
+
 #if !VXWORKS
 #if defined(HAVE_FILEIO)
 #include <unistd.h>
@@ -637,3 +672,5 @@ GdCaptureScreen(char *path)
 	return 0;
 }
 #endif /* !VXWORKS*/
+
+
Index: microwin/src/include/device.h
===================================================================
--- microwin.orig/src/include/device.h
+++ microwin/src/include/device.h
@@ -338,6 +338,10 @@ typedef struct _mwscreendevice {
 	MWCOORD	yres;		/* Y screen res (real) */
 	MWCOORD	xvirtres;	/* X drawing res (will be flipped in portrait mode) */
 	MWCOORD	yvirtres;	/* Y drawing res (will be flipped in portrait mode) */
+	int     xvisible;       /* Actual x real estate that is visible */
+	int     yvisible;       /* Ditto */
+	int     xoffset;        /* X offset for panning */
+	int     yoffset;        /* Y offset for panning */
 	int	planes;		/* # planes*/
 	int	bpp;		/* # bpp*/
 	int	linelen;	/* line length in bytes for bpp 1,2,4,8*/
@@ -374,6 +378,7 @@ typedef struct _mwscreendevice {
 	MWBOOL	(*MapMemGC)(PSD mempsd,MWCOORD w,MWCOORD h,int planes,int bpp,
 			int linelen,int size,void *addr);
 	void	(*FreeMemGC)(PSD mempsd);
+	void    (*PanScreen)(PSD, int, int);
 	void	(*StretchBlit)(PSD destpsd,MWCOORD destx,MWCOORD desty,
 			MWCOORD destw,MWCOORD desth,PSD srcpsd,MWCOORD srcx,
 			MWCOORD srcy,MWCOORD srcw,MWCOORD srch,long op);
@@ -794,6 +799,8 @@ void	drawbitmap(PSD psd, MWCOORD x, MWCO
 		const MWIMAGEBITS *imagebits);
 void	drawpoint(PSD psd, MWCOORD x, MWCOORD y);
 void	drawrow(PSD psd, MWCOORD x1, MWCOORD x2, MWCOORD y);
+void    GdPanScreen(PSD psd, int, int);
+
 extern SCREENDEVICE scrdev;
 
 
Index: microwin/src/include/mwtypes.h
===================================================================
--- microwin.orig/src/include/mwtypes.h
+++ microwin/src/include/mwtypes.h
@@ -314,6 +314,8 @@ typedef unsigned int	MWKEYMOD;
 typedef struct {
 	MWCOORD  rows;		/* number of rows on screen */
 	MWCOORD  cols;		/* number of columns on screen */
+	MWCOORD  visrows;       /* number of visible rows */
+	MWCOORD  viscols;       /* number of visible columns */
 	int 	 xdpcm;		/* dots/centimeter in x direction */
 	int 	 ydpcm;		/* dots/centimeter in y direction */
 	int	 planes;	/* hw # planes*/
Index: microwin/src/include/nano-X.h
===================================================================
--- microwin.orig/src/include/nano-X.h
+++ microwin/src/include/nano-X.h
@@ -559,6 +559,12 @@ typedef union {
 
 typedef void (*GR_FNCALLBACKEVENT)(GR_EVENT *);
 
+typedef struct {
+   GR_WINDOW_ID buf[2];
+   int active;
+   int size;
+} GR_DOUBLE_BUFFER;
+	
 /* GR_BITMAP macros*/
 /* size of GR_BITMAP image in words*/
 #define	GR_BITMAP_SIZE(width, height)	MWIMAGE_SIZE(width, height)
@@ -925,6 +931,7 @@ void            GrSetTransform(GR_TRANSF
 int             GrCalcTransform(GR_CAL_DATA *, GR_TRANSFORM *);
 int             GrLoadTransformData(char *filename, GR_TRANSFORM *);
 int             GrSaveTransformData(GR_TRANSFORM *, char *filename);
+void            GrPanDisplay(int, int);
 
 /* nxutil.c - utility routines*/
 GR_WINDOW_ID	GrNewWindowEx(GR_WM_PROPS props, GR_CHAR *title,
@@ -944,6 +951,12 @@ GR_BITMAP *	GrNewBitmapFromPixmap(GR_WIN
 GR_REGION_ID	GrNewRegionFromPixmap(GR_WINDOW_ID src, MWCOORD x, MWCOORD y,
 			GR_SIZE width, GR_SIZE height);
 
+/* nxdblbuf.c */
+
+GR_DOUBLE_BUFFER *GrInitDoubleBuffer(void);
+void GrCloseDoubleBuffer(GR_DOUBLE_BUFFER *);
+void GrFlipBuffers(GR_DOUBLE_BUFFER *);
+
 /* direct client-side framebuffer mapping routines*/
 unsigned char * GrOpenClientFramebuffer(void);
 void		GrCloseClientFramebuffer(void);
Index: microwin/src/nanox/Makefile
===================================================================
--- microwin.orig/src/nanox/Makefile
+++ microwin/src/nanox/Makefile
@@ -38,7 +38,8 @@ NANOXFILES := \
 OBJS := \
 	$(MW_DIR_OBJ)/nanox/nxdraw.o \
 	$(MW_DIR_OBJ)/nanox/nxutil.o \
-	$(MW_DIR_OBJ)/nanox/nxtransform.o
+	$(MW_DIR_OBJ)/nanox/nxtransform.o \
+	$(MW_DIR_OBJ)/nanox/nxdblbuf.o
 
 ifeq ($(LINK_APP_INTO_SERVER), Y)
 OBJS += $(NANOXFILES)
Index: microwin/src/nanox/client.c
===================================================================
--- microwin.orig/src/nanox/client.c
+++ microwin/src/nanox/client.c
@@ -4761,5 +4761,19 @@ GrCopyFont(GR_FONT_ID fontid, GR_COORD h
 }
 #endif /*HAVE_FREETYPE_2_SUPPORT*/
 
+/* Used to pan the display for those devices that have such support */
 
+void
+GrPanDisplay(int xoffset, int yoffset) {
+
+  nxPanDisplayReq *req;
+
+  LOCK(&nxGlobalLock);
+
+  req = AllocReq(PanDisplay);
+  req->xoffset = xoffset;
+  req->yoffset = yoffset;
+
+  UNLOCK(&nxGlobalLock);
+}
 
Index: microwin/src/nanox/nxdblbuf.c
===================================================================
--- /dev/null
+++ microwin/src/nanox/nxdblbuf.c
@@ -0,0 +1,49 @@
+#include "nano-X.h"
+#include "device.h"
+
+/* Initalize two windows that act as double buffers */
+
+GR_DOUBLE_BUFFER *GrInitDoubleBuffer(void) {
+  
+  GR_SCREEN_INFO si;
+  GR_DOUBLE_BUFFER *s = 0;
+
+  GrGetScreenInfo(&si);
+
+  if (si.rows < si.visrows * 2) return 0;
+  
+  s = malloc(sizeof(GR_DOUBLE_BUFFER));
+  if (!s) return 0;
+
+  printf("VISROWS=%d\n", si.visrows);
+
+  s->buf[0] = GrNewWindow(GR_ROOT_WINDOW_ID, 0, 0, si.cols, 
+			  si.visrows, 0, 0, 0);
+  
+  s->buf[1] = GrNewWindow(GR_ROOT_WINDOW_ID, 0, si.visrows, 
+			  si.cols, si.visrows, 0, 0, 0);
+
+  s->active = 0;
+  s->size = si.visrows;
+
+  return s;
+}
+
+void GrCloseDoubleBuffer(GR_DOUBLE_BUFFER *buf) {
+  GrDestroyWindow(buf->buf[0]);
+  GrDestroyWindow(buf->buf[1]);
+
+  free(buf);
+}
+
+/* Flip the screen betwee nteh two buffers */
+
+void GrFlipBuffers(GR_DOUBLE_BUFFER *buf) {
+
+  if (!buf) return;
+
+  buf->active = !buf->active;
+  GrPanDisplay(0, buf->size * buf->active);
+}
+
+  
Index: microwin/src/nanox/nxproto.h
===================================================================
--- microwin.orig/src/nanox/nxproto.h
+++ microwin/src/nanox/nxproto.h
@@ -1366,4 +1366,13 @@ typedef struct {
 	INT16 height;
 } nxCopyFontReq;
 
-#define GrTotalNumCalls         125
+#define GrNumPanDisplay         125
+typedef struct 	{
+	BYTE8 reqType;
+	BYTE8 hilength;
+	UINT16 length;
+	INT16 xoffset;
+	INT16 yoffset;
+} nxPanDisplayReq;
+	
+#define GrTotalNumCalls         126
Index: microwin/src/nanox/srvfunc.c
===================================================================
--- microwin.orig/src/nanox/srvfunc.c
+++ microwin/src/nanox/srvfunc.c
@@ -4314,3 +4314,15 @@ GrUngrabKey(GR_WINDOW_ID id, GR_KEY key)
 
 	SERVER_UNLOCK();
 }
+
+/**
+ * Pan the display 
+ *
+ * @param xoffset New xoffset of the display
+ * @param yoffset New yoffset of the display
+ */
+
+void
+GrPanDisplay(int xoffset, int yoffset) {  
+  GdPanScreen(rootwp->psd, xoffset, yoffset);
+}
Index: microwin/src/nanox/srvmain.c
===================================================================
--- microwin.orig/src/nanox/srvmain.c
+++ microwin/src/nanox/srvmain.c
@@ -1169,7 +1169,15 @@ GsInitialize(void)
 	 * Tell the mouse driver some things.
 	 */
 	curbuttons = 0;
-	GdRestrictMouse(0, 0, psd->xvirtres - 1, psd->yvirtres - 1);
+
+	/* If panning is indicated, we now allow the mouse the full range
+	   of motion */
+	
+	if (psd->PanScreen)
+	  GdRestrictMouse(0, 0, psd->xres - 1, psd->yres - 1);
+	else
+	  GdRestrictMouse(0, 0, psd->xvirtres - 1, psd->yvirtres - 1);
+
 	GdMoveMouse(psd->xvirtres / 2, psd->yvirtres / 2);
 
 	/* Force root window screen paint*/
Index: microwin/src/nanox/srvnet.c
===================================================================
--- microwin.orig/src/nanox/srvnet.c
+++ microwin/src/nanox/srvnet.c
@@ -1593,6 +1593,11 @@ GrCopyFontWrapper(void *r)
 #endif /*HAVE_FREETYPE_2_SUPPORT*/
 }
 
+static void
+GrPanDisplayWrapper(void *r) {
+	nxPanDisplayReq *req = r;
+	GrPanDisplay(req->xoffset, req->yoffset);
+}
 
 void GrShmCmdsFlushWrapper(void *r);
 
@@ -1729,6 +1734,7 @@ static const struct GrFunction GrFunctio
 	/* 122 */ {GrSetTransformWrapper, "GrSetTransform" },
 	/* 123 */ {GrCreateFontFromBufferWrapper, "GrCreateFontFromBuffer"},
 	/* 124 */ {GrCopyFontWrapper, "GrCopyFont"},
+	/* 125 */ {GrPanDisplayWrapper, "GrPanDisplay" }
 };
 
 void



Previous by date: 27 Jun 2008 04:00:05 -0000 Re: Doublebuffering, Aaron J. Grier
Next by date: 27 Jun 2008 04:00:05 -0000 Re: Panning and double buffering, Natarajan N
Previous in thread: 27 Jun 2008 04:00:05 -0000 Re: Panning and double buffering, Steven Scholz
Next in thread: 27 Jun 2008 04:00:05 -0000 Re: Panning and double buffering, Natarajan N


Powered by ezmlm-browse 0.20.