rpms/gtk-vnc/devel gtk-vnc-0.1.0-clear-area.patch, NONE, 1.1 gtk-vnc-0.1.0-endian-bgr.patch, NONE, 1.1 gtk-vnc-0.1.0-python-demo.patch, NONE, 1.1 gtk-vnc.spec, 1.1, 1.2

Daniel P. Berrange (berrange) fedora-extras-commits at redhat.com
Wed Aug 22 22:49:28 UTC 2007


Author: berrange

Update of /cvs/pkgs/rpms/gtk-vnc/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv14920

Modified Files:
	gtk-vnc.spec 
Added Files:
	gtk-vnc-0.1.0-clear-area.patch gtk-vnc-0.1.0-endian-bgr.patch 
	gtk-vnc-0.1.0-python-demo.patch 
Log Message:
Fixed endian handling, BGR pixel format and clear widget areas

gtk-vnc-0.1.0-clear-area.patch:

--- NEW FILE gtk-vnc-0.1.0-clear-area.patch ---
changeset:   54:b1c48ddc01d9
tag:         tip
user:        "Daniel P. Berrange <berrange at redhat.com>"
date:        Wed Aug 22 15:10:12 2007 -0400
files:       src/vncdisplay.c
description:
Clear excess space in widget


diff -r f6b6e9e2ac43 -r b1c48ddc01d9 src/vncdisplay.c
--- a/src/vncdisplay.c	Wed Aug 22 15:09:58 2007 -0400
+++ b/src/vncdisplay.c	Wed Aug 22 15:10:12 2007 -0400
@@ -103,6 +103,8 @@ static gboolean expose_event(GtkWidget *
 	VncDisplay *obj = VNC_DISPLAY(widget);
 	VncDisplayPrivate *priv = obj->priv;
 	int x, y, w, h;
+	GdkRectangle drawn;
+	GdkRegion *clear, *copy;
 
 	if (priv->shm_image == NULL)
 		return TRUE;
@@ -114,9 +116,27 @@ static gboolean expose_event(GtkWidget *
 	w -= x;
 	h -= y;
 
+	drawn.x = x;
+	drawn.y = y;
+	drawn.width = w;
+	drawn.height = h;
+
+	clear = gdk_region_rectangle(&expose->area);
+	copy = gdk_region_rectangle(&drawn);
+	gdk_region_subtract(clear, copy);
+
+	gdk_gc_set_clip_region(priv->gc, copy);
 	vnc_shm_image_draw(priv->shm_image, widget->window,
-			   priv->gc, 
+			   priv->gc,
 			   x, y, x, y, w, h);
+
+	gdk_gc_set_clip_region(priv->gc, clear);
+	gdk_draw_rectangle(widget->window, priv->gc, TRUE, expose->area.x, expose->area.y,
+			   expose->area.width, expose->area.height);
+
+	gdk_region_destroy(clear);
+	gdk_region_destroy(copy);
+
 	return TRUE;
 }
 


gtk-vnc-0.1.0-endian-bgr.patch:

--- NEW FILE gtk-vnc-0.1.0-endian-bgr.patch ---
changeset:   53:f6b6e9e2ac43
user:        "Daniel P. Berrange <berrange at redhat.com>"
date:        Wed Aug 22 15:09:58 2007 -0400
files:       src/blt.h src/gvnc.c
description:
Fixed handling of shifts for BGR displays and mixed endian client vs server


diff -r 453f9ca2a737 -r f6b6e9e2ac43 src/blt.h
--- a/src/blt.h	Wed Aug 22 10:40:33 2007 -0400
+++ b/src/blt.h	Wed Aug 22 15:09:58 2007 -0400
@@ -40,9 +40,9 @@ static void FILL(struct gvnc *gvnc, src_
 		int j;
 
 		for (j = 0; j < width; j++) {
-			*dp = ((*sp >> f->red_shift) & gvnc->rm) << gvnc->rp
-			    | ((*sp >> f->green_shift) & gvnc->gm) << gvnc->gp
-			    | ((*sp >> f->blue_shift) & gvnc->bm) << gvnc->bp;
+			*dp = ((*sp >> f->red_shift) & gvnc->rm) << gvnc->local.red_shift
+			    | ((*sp >> f->green_shift) & gvnc->gm) << gvnc->local.green_shift
+			    | ((*sp >> f->blue_shift) & gvnc->bm) << gvnc->local.blue_shift;
 			dp++;
 		}
 		dst += gvnc->local.linesize;
@@ -65,9 +65,9 @@ static void BLIT(struct gvnc *gvnc, uint
 		int j;
 
 		for (j = 0; j < w; j++) {
-			*dp = ((*sp >> f->red_shift) & gvnc->rm) << gvnc->rp
-			    | ((*sp >> f->green_shift) & gvnc->gm) << gvnc->gp
-			    | ((*sp >> f->blue_shift) & gvnc->bm) << gvnc->bp;
+			*dp = ((*sp >> f->red_shift) & gvnc->rm) << gvnc->local.red_shift
+			    | ((*sp >> f->green_shift) & gvnc->gm) << gvnc->local.green_shift
+			    | ((*sp >> f->blue_shift) & gvnc->bm) << gvnc->local.blue_shift;
 			dp++;
 			sp++;
 		}
diff -r 453f9ca2a737 -r f6b6e9e2ac43 src/gvnc.c
--- a/src/gvnc.c	Wed Aug 22 10:40:33 2007 -0400
+++ b/src/gvnc.c	Wed Aug 22 15:09:58 2007 -0400
@@ -26,6 +26,7 @@
 #include <string.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <endian.h>
 
 #include "coroutine.h"
 #include "d3des.h"
@@ -102,7 +103,6 @@ struct gvnc
 	gboolean perfect_match;
 	struct gvnc_framebuffer local;
 
-	int rp, gp, bp;
 	int rm, gm, bm;
 
 	gvnc_blt_func *blt;
@@ -676,9 +676,6 @@ static void gvnc_read_pixel_format(struc
 	fmt->big_endian_flag = gvnc_read_u8(gvnc);
 	fmt->true_color_flag = gvnc_read_u8(gvnc);
 
-	GVNC_DEBUG("Pixel format BPP: %d,  Depth: %d, Endian: %d, True color: %d\n",
-		   fmt->bits_per_pixel, fmt->depth, fmt->big_endian_flag, fmt->true_color_flag);
-
 	fmt->red_max         = gvnc_read_u16(gvnc);
 	fmt->green_max       = gvnc_read_u16(gvnc);
 	fmt->blue_max        = gvnc_read_u16(gvnc);
@@ -688,6 +685,24 @@ static void gvnc_read_pixel_format(struc
 	fmt->blue_shift      = gvnc_read_u8(gvnc);
 
 	gvnc_read(gvnc, pad, 3);
+
+	GVNC_DEBUG("Pixel format BPP: %d,  Depth: %d, Endian: %d, True color: %d\n"
+		   "             Mask  red: %3d, green: %3d, blue: %3d\n"
+		   "             Shift red: %3d, green: %3d, blue: %3d\n",
+		   fmt->bits_per_pixel, fmt->depth, fmt->big_endian_flag, fmt->true_color_flag,
+		   fmt->red_max, fmt->green_max, fmt->blue_max,
+		   fmt->red_shift, fmt->green_shift, fmt->blue_shift);
+
+
+	if (((__BYTE_ORDER == __BIG_ENDIAN) && !fmt->big_endian_flag) ||
+	    ((__BYTE_ORDER == __LITTLE_ENDIAN) && fmt->big_endian_flag)) {
+		fmt->red_shift = fmt->bits_per_pixel - fmt->red_shift - (fmt->bits_per_pixel - fmt->depth);
+		fmt->green_shift = fmt->bits_per_pixel - fmt->green_shift - (fmt->bits_per_pixel - fmt->depth);
+		fmt->blue_shift = fmt->bits_per_pixel - fmt->blue_shift - (fmt->bits_per_pixel - fmt->depth);
+
+		GVNC_DEBUG("Flipped shifts Shift red: %3d, green: %3d, blue: %3d\n",
+			   fmt->red_shift, fmt->green_shift, fmt->blue_shift);
+	}
 }
 
 /* initialize function */
@@ -1981,7 +1996,9 @@ gboolean gvnc_set_local(struct gvnc *gvn
 	    fb->blue_mask == gvnc->fmt.blue_max &&
 	    fb->red_shift == gvnc->fmt.red_shift &&
 	    fb->green_shift == gvnc->fmt.green_shift &&
-	    fb->blue_shift == gvnc->fmt.blue_shift)
+	    fb->blue_shift == gvnc->fmt.blue_shift &&
+	    ((gvnc->fmt.big_endian_flag && (__BYTE_ORDER == __BIG_ENDIAN)) ||
+	     (!gvnc->fmt.big_endian_flag && (__BYTE_ORDER == __LITTLE_ENDIAN))))
 		gvnc->perfect_match = TRUE;
 	else
 		gvnc->perfect_match = FALSE;
@@ -1990,21 +2007,15 @@ gboolean gvnc_set_local(struct gvnc *gvn
 	if (depth == 32)
 		depth = 24;
 
-	gvnc->rp =  (gvnc->local.depth - gvnc->local.red_shift);
-	gvnc->rp -= (depth - gvnc->fmt.red_shift);
-	gvnc->gp =  (gvnc->local.red_shift - gvnc->local.green_shift);
-	gvnc->gp -= (gvnc->fmt.red_shift - gvnc->fmt.green_shift);
-	gvnc->bp =  (gvnc->local.green_shift - gvnc->local.blue_shift);
-	gvnc->bp -= (gvnc->fmt.green_shift - gvnc->fmt.blue_shift);
-
-	gvnc->rp = gvnc->local.red_shift + gvnc->rp;
-	gvnc->gp = gvnc->local.green_shift + gvnc->gp;
-	gvnc->bp = gvnc->local.blue_shift + gvnc->bp;
-
 	gvnc->rm = gvnc->local.red_mask & gvnc->fmt.red_max;
 	gvnc->gm = gvnc->local.green_mask & gvnc->fmt.green_max;
 	gvnc->bm = gvnc->local.blue_mask & gvnc->fmt.blue_max;
-
+	GVNC_DEBUG("Mask local: %3d %3d %3d\n"
+		   "    remote: %3d %3d %3d\n"
+		   "    merged: %3d %3d %3d\n",
+		   gvnc->local.red_mask, gvnc->local.green_mask, gvnc->local.blue_mask,
+		   gvnc->fmt.red_max, gvnc->fmt.green_max, gvnc->fmt.blue_max,
+		   gvnc->rm, gvnc->gm, gvnc->bm);
 	i = gvnc->fmt.bits_per_pixel / 8;
 	j = gvnc->local.bpp;
 


gtk-vnc-0.1.0-python-demo.patch:

--- NEW FILE gtk-vnc-0.1.0-python-demo.patch ---
changeset:   51:a4bd9ecc4e4e
user:        "Daniel P. Berrange <berrange at redhat.com>"
date:        Wed Aug 22 10:35:47 2007 -0400
files:       examples/gvncviewer.py
description:
Fix offf by one in argv use


diff -r 860bcf129876 -r a4bd9ecc4e4e examples/gvncviewer.py
--- a/examples/gvncviewer.py	Wed Aug 15 17:45:56 2007 -0400
+++ b/examples/gvncviewer.py	Wed Aug 22 10:35:47 2007 -0400
@@ -153,7 +153,7 @@ vnc.set_keyboard_grab(True)
 #v.set_pointer_local(True)
 
 if len(sys.argv) == 3:
-    vnc.set_credential(gtkvnc.CREDENTIAL_PASSWORD, sys.argv[3])
+    vnc.set_credential(gtkvnc.CREDENTIAL_PASSWORD, sys.argv[2])
 
 disp = sys.argv[1].find(":")
 if disp != -1:



Index: gtk-vnc.spec
===================================================================
RCS file: /cvs/pkgs/rpms/gtk-vnc/devel/gtk-vnc.spec,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- gtk-vnc.spec	17 Aug 2007 19:19:12 -0000	1.1
+++ gtk-vnc.spec	22 Aug 2007 22:48:51 -0000	1.2
@@ -3,10 +3,13 @@
 Summary: A GTK widget for VNC clients
 Name: gtk-vnc
 Version: 0.1.0
-Release: 3%{?dist}
+Release: 4%{?dist}
 License: LGPLv2+
 Group: Development/Libraries
 Source: http://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.gz
+Patch1: %{name}-%{version}-clear-area.patch
+Patch2: %{name}-%{version}-endian-bgr.patch
+Patch3: %{name}-%{version}-python-demo.patch
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 URL: http://gtk-vnc.sf.net/
 BuildRequires: gtk2-devel pygtk2-devel python-devel gnutls-devel
@@ -41,6 +44,9 @@
 
 %prep
 %setup -q
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
 
 %build
 %configure
@@ -80,6 +86,11 @@
 %{_libdir}/python*/site-packages/gtkvnc.so
 
 %changelog
+* Wed Aug 22 2007 Daniel P. Berrange <berrange at redhat.com> - 0.1.0-4.fc8
+- Fix mixed endian handling & BGR pixel format (rhbz #253597)
+- Clear widget areas outside of framebuffer (rhbz #253599)
+- Fix off-by-one in python demo
+
 * Thu Aug 16 2007 Daniel P. Berrange <berrange at redhat.com> - 0.1.0-3.fc8
 - Tweaked post scripts
 - Removed docs from sub-packages




More information about the fedora-extras-commits mailing list