summaryrefslogtreecommitdiffstats
path: root/libvncserver/main.c
diff options
context:
space:
mode:
authorsteven_carr <steven_carr>2006-05-03 19:29:18 +0000
committersteven_carr <steven_carr>2006-05-03 19:29:18 +0000
commit2670641432683c15529d93f3ec2e09fed220b53c (patch)
tree29d517f032b71b673681574dc352d80096a8426f /libvncserver/main.c
parentafa9fae0248650cb358463c37756c3560da4b57a (diff)
downloadlibtdevnc-2670641432683c15529d93f3ec2e09fed220b53c.tar.gz
libtdevnc-2670641432683c15529d93f3ec2e09fed220b53c.zip
Client Independent Server Side Scaling is now supported
Both PalmVNC and UltraVNC SetScale messages are supported
Diffstat (limited to 'libvncserver/main.c')
-rw-r--r--libvncserver/main.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/libvncserver/main.c b/libvncserver/main.c
index 3aa9673..6a34980 100644
--- a/libvncserver/main.c
+++ b/libvncserver/main.c
@@ -48,9 +48,9 @@ static MUTEX(extMutex);
static int rfbEnableLogging=1;
#ifdef LIBVNCSERVER_WORDS_BIGENDIAN
-char rfbEndianTest = 0;
+char rfbEndianTest = (1==0);
#else
-char rfbEndianTest = -1;
+char rfbEndianTest = (1==1);
#endif
/*
@@ -407,6 +407,7 @@ void rfbMarkRegionAsModified(rfbScreenInfoPtr screen,sraRegionPtr modRegion)
rfbReleaseClientIterator(iterator);
}
+void rfbScaledScreenUpdate(rfbScreenInfoPtr screen, int x1, int y1, int x2, int y2);
void rfbMarkRectAsModified(rfbScreenInfoPtr screen,int x1,int y1,int x2,int y2)
{
sraRegionPtr region;
@@ -421,7 +422,10 @@ void rfbMarkRectAsModified(rfbScreenInfoPtr screen,int x1,int y1,int x2,int y2)
if(y1<0) y1=0;
if(y2>screen->height) y2=screen->height;
if(y1==y2) return;
-
+
+ /* update scaled copies for this rectangle */
+ rfbScaledScreenUpdate(screen,x1,y1,x2,y2);
+
region = sraRgnCreateRect(x1,y1,x2,y2);
rfbMarkRegionAsModified(screen,region);
sraRgnDestroy(region);
@@ -959,6 +963,17 @@ void rfbScreenCleanup(rfbScreenInfoPtr screen)
#ifdef LIBVNCSERVER_HAVE_LIBJPEG
rfbTightCleanup(screen);
#endif
+
+ /* free all 'scaled' versions of this screen */
+ while (screen->scaledScreenNext!=NULL)
+ {
+ rfbScreenInfoPtr ptr;
+ ptr = screen->scaledScreenNext;
+ screen->scaledScreenNext = ptr->scaledScreenNext;
+ free(ptr->frameBuffer);
+ free(ptr);
+ }
+
#endif
free(screen);
}