From 6fb77fb0c15fdc8185a160704db4c87891ace742 Mon Sep 17 00:00:00 2001
From: dscho <dscho>
Date: Tue, 24 May 2005 08:56:35 +0000
Subject: fix off by one bug

---
 examples/example.c  | 6 ++++--
 libvncserver/font.c | 6 ++++--
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/examples/example.c b/examples/example.c
index 15bedec..536497f 100644
--- a/examples/example.c
+++ b/examples/example.c
@@ -107,7 +107,6 @@ static void drawline(unsigned char* buffer,int rowstride,int bpp,int x1,int y1,i
   if(j<0) j=-j;
   if(i<j) {
     if(y1>y2) { i=y2; y2=y1; y1=i; i=x2; x2=x1; x1=i; }
-    if(y2==y1) { if(y2>0) y1--; else y2++; }
     for(j=y1;j<=y2;j++)
       for(i=0;i<bpp;i++)
 	buffer[j*rowstride+(x1+(j-y1)*(x2-x1)/(y2-y1))*bpp+i]=0xff;
@@ -132,6 +131,9 @@ static void doptr(int buttonMask,int x,int y,rfbClientPtr cl)
 	 if(cd->oldButton==buttonMask) { /* draw a line */
 	    drawline((unsigned char*)cl->screen->frameBuffer,cl->screen->paddedWidthInBytes,bpp,
 		     x,y,cd->oldx,cd->oldy);
+	    x1=x; y1=y;
+	    if(x1>cd->oldx) x1++; else cd->oldx++;
+	    if(y1>cd->oldy) y1++; else cd->oldy++;
 	    rfbMarkRectAsModified(cl->screen,x,y,cd->oldx,cd->oldy);
 	 } else { /* draw a point (diameter depends on button) */
 	    int w=cl->screen->paddedWidthInBytes;
@@ -143,7 +145,7 @@ static void doptr(int buttonMask,int x,int y,rfbClientPtr cl)
 	    for(i=x1*bpp;i<x2*bpp;i++)
 	      for(j=y1;j<y2;j++)
 		cl->screen->frameBuffer[j*w+i]=(char)0xff;
-	    rfbMarkRectAsModified(cl->screen,x1,y1,x2-1,y2-1);
+	    rfbMarkRectAsModified(cl->screen,x1,y1,x2,y2);
 	 }
 
 	 /* we could get a selection like that:
diff --git a/libvncserver/font.c b/libvncserver/font.c
index 267d8a2..8ba1020 100755
--- a/libvncserver/font.c
+++ b/libvncserver/font.c
@@ -131,8 +131,8 @@ void rfbFontBBox(rfbFontDataPtr font,unsigned char c,int* x1,int* y1,int* x2,int
 {
   *x1+=font->metaData[c*5+3];
   *y1+=-font->metaData[c*5+4]-font->metaData[c*5+2]+1;
-  *x2=*x1+font->metaData[c*5+1];
-  *y2=*y1+font->metaData[c*5+2];
+  *x2=*x1+font->metaData[c*5+1]+1;
+  *y2=*y1+font->metaData[c*5+2]+1;
 }
 
 #ifndef INT_MAX
@@ -156,6 +156,8 @@ void rfbWholeFontBBox(rfbFontDataPtr font,
       if(-m[i*5+4]>(*y2))
 	(*y2)=-m[i*5+4];
    }
+   (*x2)++;
+   (*y2)++;
 }
 
 rfbFontDataPtr rfbLoadConsoleFont(char *filename)
-- 
cgit v1.2.3

