summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alla@lysator.liu.se>2001-06-13 21:40:37 +0000
committerAlexander Larsson <alexl@src.gnome.org>2001-06-13 21:40:37 +0000
commitbe12f525266d91ca2977ff92bc1524ad5a60e5e2 (patch)
treeb967976abe4158ade3b90cbb9cef0ca24e03d168
parentb858eb9f59976522592449b40a15e73b2006de57 (diff)
downloadgdk-pixbuf-be12f525266d91ca2977ff92bc1524ad5a60e5e2.tar.gz
Unify shaped window code and make it repaint the area that used to be part
2001-06-13 Alexander Larsson <alla@lysator.liu.se> * gdk/linux-fb/gdkwindow-fb.c: Unify shaped window code and make it repaint the area that used to be part of the shape, but isn't anymore.
-rw-r--r--ChangeLog6
-rw-r--r--ChangeLog.pre-2-06
-rw-r--r--ChangeLog.pre-2-106
-rw-r--r--ChangeLog.pre-2-26
-rw-r--r--ChangeLog.pre-2-46
-rw-r--r--ChangeLog.pre-2-66
-rw-r--r--ChangeLog.pre-2-86
-rw-r--r--gdk/linux-fb/gdkwindow-fb.c88
8 files changed, 103 insertions, 27 deletions
diff --git a/ChangeLog b/ChangeLog
index d7082d032..70a2de8ef 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2001-06-13 Alexander Larsson <alla@lysator.liu.se>
+
+ * gdk/linux-fb/gdkwindow-fb.c:
+ Unify shaped window code and make it repaint the area that used
+ to be part of the shape, but isn't anymore.
+
2001-06-11 Havoc Pennington <hp@redhat.com>
* NEWS: Updates
diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0
index d7082d032..70a2de8ef 100644
--- a/ChangeLog.pre-2-0
+++ b/ChangeLog.pre-2-0
@@ -1,3 +1,9 @@
+2001-06-13 Alexander Larsson <alla@lysator.liu.se>
+
+ * gdk/linux-fb/gdkwindow-fb.c:
+ Unify shaped window code and make it repaint the area that used
+ to be part of the shape, but isn't anymore.
+
2001-06-11 Havoc Pennington <hp@redhat.com>
* NEWS: Updates
diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10
index d7082d032..70a2de8ef 100644
--- a/ChangeLog.pre-2-10
+++ b/ChangeLog.pre-2-10
@@ -1,3 +1,9 @@
+2001-06-13 Alexander Larsson <alla@lysator.liu.se>
+
+ * gdk/linux-fb/gdkwindow-fb.c:
+ Unify shaped window code and make it repaint the area that used
+ to be part of the shape, but isn't anymore.
+
2001-06-11 Havoc Pennington <hp@redhat.com>
* NEWS: Updates
diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2
index d7082d032..70a2de8ef 100644
--- a/ChangeLog.pre-2-2
+++ b/ChangeLog.pre-2-2
@@ -1,3 +1,9 @@
+2001-06-13 Alexander Larsson <alla@lysator.liu.se>
+
+ * gdk/linux-fb/gdkwindow-fb.c:
+ Unify shaped window code and make it repaint the area that used
+ to be part of the shape, but isn't anymore.
+
2001-06-11 Havoc Pennington <hp@redhat.com>
* NEWS: Updates
diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4
index d7082d032..70a2de8ef 100644
--- a/ChangeLog.pre-2-4
+++ b/ChangeLog.pre-2-4
@@ -1,3 +1,9 @@
+2001-06-13 Alexander Larsson <alla@lysator.liu.se>
+
+ * gdk/linux-fb/gdkwindow-fb.c:
+ Unify shaped window code and make it repaint the area that used
+ to be part of the shape, but isn't anymore.
+
2001-06-11 Havoc Pennington <hp@redhat.com>
* NEWS: Updates
diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6
index d7082d032..70a2de8ef 100644
--- a/ChangeLog.pre-2-6
+++ b/ChangeLog.pre-2-6
@@ -1,3 +1,9 @@
+2001-06-13 Alexander Larsson <alla@lysator.liu.se>
+
+ * gdk/linux-fb/gdkwindow-fb.c:
+ Unify shaped window code and make it repaint the area that used
+ to be part of the shape, but isn't anymore.
+
2001-06-11 Havoc Pennington <hp@redhat.com>
* NEWS: Updates
diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8
index d7082d032..70a2de8ef 100644
--- a/ChangeLog.pre-2-8
+++ b/ChangeLog.pre-2-8
@@ -1,3 +1,9 @@
+2001-06-13 Alexander Larsson <alla@lysator.liu.se>
+
+ * gdk/linux-fb/gdkwindow-fb.c:
+ Unify shaped window code and make it repaint the area that used
+ to be part of the shape, but isn't anymore.
+
2001-06-11 Havoc Pennington <hp@redhat.com>
* NEWS: Updates
diff --git a/gdk/linux-fb/gdkwindow-fb.c b/gdk/linux-fb/gdkwindow-fb.c
index 894165030..e5d415475 100644
--- a/gdk/linux-fb/gdkwindow-fb.c
+++ b/gdk/linux-fb/gdkwindow-fb.c
@@ -1868,31 +1868,79 @@ gdk_fb_window_get_abs_shape (GdkDrawable *window)
return shape;
}
-void
-gdk_window_shape_combine_mask (GdkWindow *window,
- GdkBitmap *mask,
- gint x, gint y)
+
+static void
+_gdk_window_shape_combine_region (GdkWindow *window,
+ GdkRegion *shape,
+ gint x,
+ gint y)
{
GdkWindowFBData *private;
+ GdkDrawableFBData *drawable_private;
+ GdkRegion *old_region = NULL;
+ GdkRegion *new_region = NULL;
+ GdkRectangle rect;
g_return_if_fail (window != NULL);
g_return_if_fail (GDK_IS_WINDOW (window));
private = GDK_WINDOW_IMPL_FBDATA (window);
+ drawable_private = GDK_DRAWABLE_IMPL_FBDATA (window);
+
+ if (GDK_WINDOW_IS_MAPPED (window))
+ {
+ old_region = gdk_fb_window_get_abs_shape (window);
+ if (old_region == NULL)
+ {
+ rect.x = drawable_private->llim_x;
+ rect.y = drawable_private->llim_y;
+ rect.width = drawable_private->lim_x - rect.x;
+ rect.height = drawable_private->lim_y - rect.y;
+ old_region = gdk_region_rectangle (&rect);
+ }
+ }
if (private->shape && private->shape != GDK_FB_USE_CHILD_SHAPE)
gdk_region_destroy (private->shape);
- /* Warning. HUGE hack */
- if (mask == GDK_FB_USE_CHILD_SHAPE)
- private->shape = GDK_FB_USE_CHILD_SHAPE;
- else if (mask)
+ if (shape)
{
- private->shape = gdk_fb_region_create_from_bitmap (mask);
- gdk_region_offset (private->shape, x, y);
+ private->shape = shape;
+ if (shape != GDK_FB_USE_CHILD_SHAPE)
+ gdk_region_offset (private->shape, x, y);
}
else
private->shape = NULL;
+
+ if (GDK_WINDOW_IS_MAPPED (window))
+ {
+ new_region = gdk_fb_window_get_abs_shape (window);
+ if (new_region == NULL)
+ {
+ rect.x = drawable_private->llim_x;
+ rect.y = drawable_private->llim_y;
+ rect.width = drawable_private->lim_x - rect.x;
+ rect.height = drawable_private->lim_y - rect.y;
+ new_region = gdk_region_rectangle (&rect);
+ }
+
+ gdk_region_subtract (old_region, new_region);
+ gdk_region_destroy (new_region);
+ gdk_window_invalidate_region (gdk_parent_root, old_region, TRUE);
+ gdk_region_destroy (old_region);
+ }
+}
+
+void
+gdk_window_shape_combine_mask (GdkWindow *window,
+ GdkBitmap *mask,
+ gint x, gint y)
+{
+ _gdk_window_shape_combine_region (window,
+ (mask == GDK_FB_USE_CHILD_SHAPE)?
+ GDK_FB_USE_CHILD_SHAPE :
+ gdk_fb_region_create_from_bitmap (mask),
+ x, y);
}
void
@@ -1901,23 +1949,9 @@ gdk_window_shape_combine_region (GdkWindow *window,
gint x,
gint y)
{
- GdkWindowFBData *private;
-
- g_return_if_fail (window != NULL);
- g_return_if_fail (GDK_IS_WINDOW (window));
-
- private = GDK_WINDOW_IMPL_FBDATA (window);
-
- if (private->shape && private->shape != GDK_FB_USE_CHILD_SHAPE)
- gdk_region_destroy (private->shape);
-
- if (shape)
- {
- private->shape = gdk_region_copy (shape);
- gdk_region_offset (private->shape, x, y);
- }
- else
- private->shape = NULL;
+ _gdk_window_shape_combine_region (window,
+ gdk_region_copy (shape),
+ x, y);
}
void