gtk+ r19433 - in trunk: . gdk/directfb
- From: neo svn gnome org
- To: svn-commits-list gnome org
- Subject: gtk+ r19433 - in trunk: . gdk/directfb
- Date: Wed, 30 Jan 2008 19:51:30 +0000 (GMT)
Author: neo
Date: Wed Jan 30 19:51:30 2008
New Revision: 19433
URL: http://svn.gnome.org/viewvc/gtk+?rev=19433&view=rev
Log:
2008-01-30 Sven Neumann <sven gimp org>
* gdk/directfb/gdkdrawable-directfb.c
* gdk/directfb/gdkwindow-directfb.c
* gdk/directfb/gdkprivate-directfb.h: applied patch from Denis
Oliver Kropp <dok directfb org>. Adds debug messages using
DirectFB's debugging system
Modified:
trunk/ChangeLog
trunk/gdk/directfb/gdkdrawable-directfb.c
trunk/gdk/directfb/gdkprivate-directfb.h
trunk/gdk/directfb/gdkwindow-directfb.c
Modified: trunk/gdk/directfb/gdkdrawable-directfb.c
==============================================================================
--- trunk/gdk/directfb/gdkdrawable-directfb.c (original)
+++ trunk/gdk/directfb/gdkdrawable-directfb.c Wed Jan 30 19:51:30 2008
@@ -50,6 +50,16 @@
#include "cairo-directfb.h"
+#include <direct/debug.h>
+#include <direct/messages.h>
+
+/*
+ * There can be multiple domains in one file and one domain (same same) in multiple files.
+ */
+D_DEBUG_DOMAIN( GDKDFB_Drawable, "GDKDFB/Drawable", "GDK DirectFB Drawable" );
+D_DEBUG_DOMAIN( GDKDFB_DrawClip, "GDKDFB/DrawClip", "GDK DirectFB Drawable Clip Region" );
+
+
/* From DirectFB's <gfx/generix/duffs_device.h> */
#define DUFF_1() \
case 1:\
@@ -150,6 +160,8 @@
impl = GDK_DRAWABLE_IMPL_DIRECTFB (drawable);
+ D_DEBUG_AT( GDKDFB_Drawable, "%s( %p, %p ) <- old %p\n", __FUNCTION__, drawable, colormap, impl->colormap );
+
if (impl->colormap == colormap)
return;
@@ -223,6 +235,8 @@
g_return_if_fail (GDK_IS_DRAWABLE_IMPL_DIRECTFB (drawable));
g_return_if_fail (ret_clip != NULL);
+ D_DEBUG_AT( GDKDFB_DrawClip, "%s( %p, %p, %p )\n", __FUNCTION__, drawable, gc, draw_rect );
+
private = GDK_DRAWABLE_IMPL_DIRECTFB (drawable);
if (!draw_rect)
@@ -234,11 +248,18 @@
draw_rect = ▭
}
+ D_DEBUG_AT( GDKDFB_DrawClip, " -> draw rectangle == %4d,%4d - %4dx%4d =\n",
+ draw_rect->x, draw_rect->y, draw_rect->width, draw_rect->height );
temp_region_init_rectangle( ret_clip, draw_rect );
- if (private->buffered)
+ if (private->buffered) {
+ D_DEBUG_AT( GDKDFB_DrawClip, " -> buffered region > %4d,%4d - %4dx%4d < (%ld boxes)\n",
+ GDKDFB_RECTANGLE_VALS_FROM_SEGMENT( &private->paint_region.extents ),
+ private->paint_region.numRects );
+
gdk_region_intersect (ret_clip, &private->paint_region);
+ }
if (gc)
{
@@ -247,6 +268,9 @@
if (region->numRects)
{
+ D_DEBUG_AT( GDKDFB_DrawClip, " -> clipping region > %4d,%4d - %4dx%4d < (%ld boxes)\n",
+ GDKDFB_RECTANGLE_VALS_FROM_SEGMENT( ®ion->extents ), region->numRects );
+
if (gc->clip_x_origin || gc->clip_y_origin)
{
gdk_region_offset (ret_clip, -gc->clip_x_origin, -gc->clip_y_origin);
@@ -264,8 +288,11 @@
return;
}
- if (private->buffered)
+ if (private->buffered) {
+ D_DEBUG_AT( GDKDFB_DrawClip, " => returning clip >> %4d,%4d - %4dx%4d << (%ld boxes)\n",
+ GDKDFB_RECTANGLE_VALS_FROM_SEGMENT( &ret_clip->extents ), ret_clip->numRects );
return;
+ }
if (GDK_IS_WINDOW (private->wrapper) &&
GDK_WINDOW_IS_MAPPED (private->wrapper) &&
@@ -297,9 +324,15 @@
temp.extents.x2 = cur_private->x + cur_impl->width;
temp.extents.y2 = cur_private->y + cur_impl->height;
+ D_DEBUG_AT( GDKDFB_DrawClip, " -> clipping child [ %4d,%4d - %4dx%4d ]\n",
+ GDKDFB_RECTANGLE_VALS_FROM_SEGMENT( &temp.extents ), temp.numRects );
+
gdk_region_subtract (ret_clip, &temp);
}
}
+
+ D_DEBUG_AT( GDKDFB_DrawClip, " => returning clip >> %4d,%4d - %4dx%4d << (%ld boxes)\n",
+ GDKDFB_RECTANGLE_VALS_FROM_SEGMENT( &ret_clip->extents ), ret_clip->numRects );
}
/* Drawing
@@ -402,12 +435,14 @@
g_return_if_fail (GDK_IS_DRAWABLE (drawable));
+ D_DEBUG_AT( GDKDFB_Drawable, "%s( %p, %p, %s, %4d,%4d - %4dx%4d )\n", __FUNCTION__,
+ drawable, gc, filled ? " filled" : "outline", x, y, width, height );
+
impl = GDK_DRAWABLE_IMPL_DIRECTFB (drawable);
if (!impl->surface)
return;
-
if (gc)
gc_private = GDK_GC_DIRECTFB (gc);
@@ -558,13 +593,15 @@
{
g_return_if_fail (GDK_IS_DRAWABLE (drawable));
+ D_DEBUG_AT( GDKDFB_Drawable, "%s( %p, %p, %s, %p, %d )\n", __FUNCTION__,
+ drawable, gc, filled ? " filled" : "outline", points, npoints );
+
if (npoints < 3)
return;
if (filled)
{
- if (npoints == 3 ||
- (npoints == 4 &&
+ if (npoints == 3 || (npoints == 4 &&
points[0].x == points[npoints-1].x &&
points[0].y == points[npoints-1].y))
{
@@ -667,6 +704,9 @@
DFBRectangle rect = { xsrc, ysrc, width, height };
gint i;
+ D_DEBUG_AT( GDKDFB_Drawable, "%s( %p, %p, %p, %4d,%4d -> %4d,%4d - %dx%d )\n", __FUNCTION__,
+ drawable, gc, src, xsrc, ysrc, xdest, ydest, width, height );
+
impl = GDK_DRAWABLE_IMPL_DIRECTFB (drawable);
if (!impl->surface)
@@ -709,6 +749,8 @@
DFBRegion region = { points->x, points->y, points->x, points->y };
+ D_DEBUG_AT( GDKDFB_Drawable, "%s( %p, %p, %p, %d )\n", __FUNCTION__, drawable, gc, points, npoints );
+
if (npoints < 1)
return;
@@ -756,6 +798,8 @@
// DFBRegion region = { segs->x1, segs->y1, segs->x2, segs->y2 };
+ D_DEBUG_AT( GDKDFB_Drawable, "%s( %p, %p, %p, %d )\n", __FUNCTION__, drawable, gc, segs, nsegs );
+
if (nsegs < 1)
return;
@@ -834,6 +878,8 @@
DFBRegion region = { points->x, points->y, points->x, points->y };
+ D_DEBUG_AT( GDKDFB_Drawable, "%s( %p, %p, %p, %d )\n", __FUNCTION__, drawable, gc, points, npoints );
+
if (npoints < 2)
return;
@@ -907,6 +953,9 @@
g_return_if_fail (GDK_IS_DRAWABLE (drawable));
g_return_if_fail (image != NULL);
+ D_DEBUG_AT( GDKDFB_Drawable, "%s( %p, %p, %p, %4d,%4d -> %4d,%4d - %dx%d )\n", __FUNCTION__,
+ drawable, gc, image, xsrc, ysrc, xdest, ydest, width, height );
+
impl = GDK_DRAWABLE_IMPL_DIRECTFB (drawable);
image_private = image->windowing_data;
@@ -1153,6 +1202,9 @@
g_return_if_fail (src_x >= 0 && src_x + width <= pixbuf->width);
g_return_if_fail (src_y >= 0 && src_y + height <= pixbuf->height);
+ D_DEBUG_AT( GDKDFB_Drawable, "%s( %p, %p, %p, %4d,%4d -> %4d,%4d - %dx%d )\n", __FUNCTION__,
+ drawable, gc, pixbuf, src_x, src_y, dest_x, dest_y, width, height );
+
/* Clip to the drawable; this is required for get_from_drawable() so
* can't be done implicitly
*/
@@ -1420,6 +1472,21 @@
/*
* Object stuff
*/
+static inline const char *
+drawable_impl_type_name( GObject *object )
+{
+ if (GDK_IS_PIXMAP (object))
+ return "PIXMAP";
+
+ if (GDK_IS_WINDOW (object))
+ return "WINDOW";
+
+ if (GDK_IS_DRAWABLE_IMPL_DIRECTFB (object))
+ return "DRAWABLE";
+
+ return "unknown";
+}
+
static void
gdk_drawable_impl_directfb_finalize (GObject *object)
@@ -1427,6 +1494,11 @@
GdkDrawableImplDirectFB *impl;
impl = GDK_DRAWABLE_IMPL_DIRECTFB (object);
+ D_DEBUG_AT( GDKDFB_Drawable, "%s( %p ) <- %dx%d (%s at %4d,%4d)\n", __FUNCTION__,
+ object, impl->width, impl->height,
+ drawable_impl_type_name( object ),
+ impl->abs_x, impl->abs_y );
+
gdk_directfb_set_colormap (GDK_DRAWABLE (object), NULL);
if( impl->cairo_surface ) {
cairo_surface_finish(impl->cairo_surface);
Modified: trunk/gdk/directfb/gdkprivate-directfb.h
==============================================================================
--- trunk/gdk/directfb/gdkprivate-directfb.h (original)
+++ trunk/gdk/directfb/gdkprivate-directfb.h Wed Jan 30 19:51:30 2008
@@ -410,4 +410,7 @@
}
+#define GDKDFB_RECTANGLE_VALS_FROM_SEGMENT(s) (s)->x1, (s)->y1, (s)->x2-(s)->x1, (s)->y2-(s)->y1
+
+
#endif /* __GDK_PRIVATE_DIRECTFB_H__ */
Modified: trunk/gdk/directfb/gdkwindow-directfb.c
==============================================================================
--- trunk/gdk/directfb/gdkwindow-directfb.c (original)
+++ trunk/gdk/directfb/gdkwindow-directfb.c Wed Jan 30 19:51:30 2008
@@ -46,8 +46,20 @@
#include "cairo.h"
#include <assert.h>
+#include <direct/debug.h>
+
#include <directfb_util.h>
+
+
+
+
+D_DEBUG_DOMAIN( GDKDFB_Crossing, "GDKDFB/Crossing", "GDK DirectFB Crossing Events" );
+D_DEBUG_DOMAIN( GDKDFB_Updates, "GDKDFB/Updates", "GDK DirectFB Updates" );
+D_DEBUG_DOMAIN( GDKDFB_Paintable, "GDKDFB/Paintable", "GDK DirectFB Paintable" );
+D_DEBUG_DOMAIN( GDKDFB_Window, "GDKDFB/Window", "GDK DirectFB Window" );
+
+
static GdkRegion * gdk_window_impl_directfb_get_visible_region (GdkDrawable *drawable);
static void gdk_window_impl_directfb_set_colormap (GdkDrawable *drawable,
GdkColormap *colormap);
@@ -71,8 +83,8 @@
static void
gdk_window_directfb_process_all_updates (void)
{
+ GSList *tmp_list;
GSList *old_update_windows = update_windows;
- GSList *tmp_list = update_windows;
if (update_idle)
g_source_remove (update_idle);
@@ -80,52 +92,67 @@
update_windows = NULL;
update_idle = 0;
- g_slist_foreach (old_update_windows, (GFunc)g_object_ref, NULL);
+ D_DEBUG_AT( GDKDFB_Updates, "%s()\n", __FUNCTION__ );
+ g_slist_foreach (old_update_windows, (GFunc)g_object_ref, NULL);
+ tmp_list = old_update_windows;
while (tmp_list)
{
- GdkWindowObject *private = (GdkWindowObject *)tmp_list->data;
+ GdkWindowObject *private = GDK_WINDOW_OBJECT( tmp_list->data );
+ GdkWindowImplDirectFB *wimpl = GDK_WINDOW_IMPL_DIRECTFB( private->impl );
if (private->update_freeze_count)
- update_windows = g_slist_prepend (update_windows, private);
+ {
+ D_DEBUG_AT( GDKDFB_Updates, " -> %p frozen [%4d,%4d-%4dx%4d] (%d boxes)\n",
+ private, DFB_RECTANGLE_VALS_FROM_REGION( &wimpl->flips.bounding ),
+ wimpl->flips.num_regions );
+ update_windows = g_slist_prepend (update_windows, private);
+ }
else
- gdk_window_process_updates(tmp_list->data,TRUE);
+ {
+ D_DEBUG_AT( GDKDFB_Updates, " -> %p update [%4d,%4d-%4dx%4d] (%d boxes)\n",
+ private, DFB_RECTANGLE_VALS_FROM_REGION( &wimpl->flips.bounding ),
+ wimpl->flips.num_regions );
+ gdk_window_process_updates(tmp_list->data,TRUE);
+ }
g_object_unref (tmp_list->data);
tmp_list = tmp_list->next;
}
-
#ifndef GDK_DIRECTFB_NO_EXPERIMENTS
- tmp_list = old_update_windows;
-
g_slist_foreach (old_update_windows, (GFunc)g_object_ref, NULL);
+ tmp_list = old_update_windows;
+ while (tmp_list)
+ {
+ GdkWindowObject *top = GDK_WINDOW_OBJECT( gdk_window_get_toplevel( tmp_list->data ) );
- while (tmp_list) {
- GdkWindowObject *top = GDK_WINDOW_OBJECT( gdk_window_get_toplevel( tmp_list->data ) );
-
- if (top) {
- GdkWindowImplDirectFB *wimpl = GDK_WINDOW_IMPL_DIRECTFB (top->impl);
+ if (top)
+ {
+ GdkWindowImplDirectFB *wimpl = GDK_WINDOW_IMPL_DIRECTFB (top->impl);
- if (wimpl->flips.num_regions) {
- //direct_log_printf( NULL, "Flipping bounding box of paints: %d,%d - %dx%d (top %p, wimpl %p)\n",
- // DFB_RECTANGLE_VALS_FROM_REGION( &wimpl->flips.bounding ), top, wimpl );
+ if (wimpl->flips.num_regions)
+ {
+ D_DEBUG_AT( GDKDFB_Updates, " -> %p flip [%4d,%4d-%4dx%4d] (%d boxes)\n",
+ top, DFB_RECTANGLE_VALS_FROM_REGION( &wimpl->flips.bounding ),
+ wimpl->flips.num_regions );
- wimpl->drawable.surface->Flip( wimpl->drawable.surface, &wimpl->flips.bounding, DSFLIP_NONE );
+ wimpl->drawable.surface->Flip( wimpl->drawable.surface, &wimpl->flips.bounding, DSFLIP_NONE );
- dfb_updates_reset( &wimpl->flips );
+ dfb_updates_reset( &wimpl->flips );
}
- }
-
+ else
+ D_DEBUG_AT( GDKDFB_Updates, " -> %p has no flips!\n", top );
+ }
+ else
+ D_DEBUG_AT( GDKDFB_Updates, " -> %p has no top level window!\n", tmp_list->data );
- g_object_unref (tmp_list->data);
- tmp_list = tmp_list->next;
- }
+ g_object_unref (tmp_list->data);
+ tmp_list = tmp_list->next;
+ }
#endif
-
g_slist_free (old_update_windows);
-
}
static gboolean
@@ -139,13 +166,18 @@
static void
gdk_window_schedule_update (GdkWindow *window)
{
+ D_DEBUG_AT( GDKDFB_Updates, "%s( %p ) <- freeze count %d\n", __FUNCTION__, window,
+ window ? GDK_WINDOW_OBJECT (window)->update_freeze_count : -1 );
+
if (window && GDK_WINDOW_OBJECT (window)->update_freeze_count)
return;
if (!update_idle)
{
+ D_DEBUG_AT( GDKDFB_Updates, " -> adding idle callback\n" );
+
update_idle = gdk_threads_add_idle_full (GDK_PRIORITY_REDRAW,
- gdk_window_update_idle, NULL, NULL);
+ gdk_window_update_idle, NULL, NULL);
}
}
@@ -251,6 +283,8 @@
{
GdkWindowImplDirectFB *impl = GDK_WINDOW_IMPL_DIRECTFB (object);
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p ) <- %dx%d\n", __FUNCTION__, impl, impl->drawable.width, impl->drawable.height );
+
if (GDK_WINDOW_IS_MAPPED (impl->drawable.wrapper))
gdk_window_hide (impl->drawable.wrapper);
@@ -280,12 +314,17 @@
GdkRectangle rect = { 0, 0, 0, 0 };
DFBRectangle drect = { 0, 0, 0, 0 };
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p )\n", __FUNCTION__, drawable );
+
if (priv->surface)
priv->surface->GetVisibleRectangle (priv->surface, &drect);
rect.x= drect.x;
rect.y= drect.y;
rect.width=drect.w;
rect.height=drect.h;
+
+ D_DEBUG_AT( GDKDFB_Window, " -> returning %4d,%4d-%4dx%4d\n", drect.x, drect.y, drect.w, drect.h );
+
return gdk_region_rectangle (&rect);
}
@@ -318,6 +357,8 @@
DFBResult ret;
IDirectFBWindow *window;
+ D_DEBUG_AT( GDKDFB_Window, "%s( %4dx%4d, caps 0x%08x )\n", __FUNCTION__, desc->width, desc->height, desc->caps );
+
ret = _gdk_display->layer->CreateWindow (_gdk_display->layer, desc, &window);
if (ret != DFB_OK)
@@ -427,6 +468,8 @@
g_return_val_if_fail (attributes != NULL, NULL);
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p )\n", __FUNCTION__, parent );
+
if (!parent || attributes->window_type != GDK_WINDOW_CHILD)
parent = _gdk_parent_root;
@@ -609,6 +652,8 @@
{
g_return_val_if_fail (attributes != NULL, NULL);
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p )\n", __FUNCTION__, parent );
+
return gdk_directfb_window_new (parent, attributes, attributes_mask,
DWCAPS_NONE, DWOP_NONE, DSCAPS_NONE);
}
@@ -633,6 +678,9 @@
g_return_if_fail (GDK_IS_WINDOW (window));
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p, %srecursing, %sforeign )\n", __FUNCTION__, window,
+ recursing ? "" : "not ", foreign_destroy ? "" : "no " );
+
private = GDK_WINDOW_OBJECT (window);
impl = GDK_WINDOW_IMPL_DIRECTFB (private->impl);
@@ -674,6 +722,8 @@
{
g_return_if_fail (GDK_IS_WINDOW (window));
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p )\n", __FUNCTION__, window );
+
if (!GDK_WINDOW_DESTROYED (window))
{
if (GDK_WINDOW_TYPE(window) != GDK_WINDOW_FOREIGN)
@@ -721,6 +771,7 @@
GdkWindow *new_win;
GdkWindow *event_win;
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p )\n", __FUNCTION__, new_focus_window );
/* No focus changes while the pointer is grabbed */
if (_gdk_directfb_pointer_grab_window)
@@ -796,6 +847,8 @@
{
GdkWindowObject *parent;
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p )\n", __FUNCTION__, window );
+
parent = GDK_WINDOW_OBJECT (window)->parent;
if (parent->children->data == window)
@@ -812,6 +865,8 @@
{
GdkWindowObject *parent;
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p )\n", __FUNCTION__, window );
+
parent = GDK_WINDOW_OBJECT (window)->parent;
parent->children = g_list_remove (parent->children, window);
@@ -841,6 +896,8 @@
if (!GDK_WINDOW_IS_MAPPED (private))
return;
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p )\n", __FUNCTION__, private );
+
event_win = gdk_directfb_other_event_window ((GdkWindow *) private, GDK_MAP);
if (event_win)
gdk_directfb_event_make (event_win, GDK_MAP);
@@ -882,6 +939,8 @@
GdkWindow *b;
GdkWindow *event_win;
+ D_DEBUG_AT( GDKDFB_Crossing, "%s( %p -> %p, %d )\n", __FUNCTION__, src, dest, mode );
+
/* Do a possible cursor change before checking if we need to
generate crossing events so cursor changes due to pointer
grabs work correctly. */
@@ -911,8 +970,10 @@
}
}
- if (dest == gdk_directfb_window_containing_pointer)
+ if (dest == gdk_directfb_window_containing_pointer) {
+ D_DEBUG_AT( GDKDFB_Crossing, " -> already containing the pointer\n" );
return;
+ }
if (gdk_directfb_window_containing_pointer == NULL)
gdk_directfb_window_containing_pointer = g_object_ref (_gdk_parent_root);
@@ -924,25 +985,35 @@
b = dest;
- if (a == b)
+ if (a == b) {
+ D_DEBUG_AT( GDKDFB_Crossing, " -> src == dest\n" );
return;
+ }
/* gdk_directfb_window_containing_pointer might have been destroyed.
* The refcount we hold on it should keep it, but it's parents
* might have died.
*/
- if (GDK_WINDOW_DESTROYED (a))
+ if (GDK_WINDOW_DESTROYED (a)) {
+ D_DEBUG_AT( GDKDFB_Crossing, " -> src is destroyed!\n" );
a = _gdk_parent_root;
+ }
gdk_directfb_mouse_get_info (&x, &y, &modifiers);
c = gdk_directfb_find_common_ancestor (a, b);
+ D_DEBUG_AT( GDKDFB_Crossing, " -> common ancestor %p\n", c );
+
non_linear = (c != a) && (c != b);
+ D_DEBUG_AT( GDKDFB_Crossing, " -> non_linear: %s\n", non_linear ? "YES" : "NO" );
+
event_win = gdk_directfb_pointer_event_window (a, GDK_LEAVE_NOTIFY);
if (event_win)
{
+ D_DEBUG_AT( GDKDFB_Crossing, " -> sending LEAVE to src\n" );
+
event = gdk_directfb_event_make (event_win, GDK_LEAVE_NOTIFY);
event->crossing.subwindow = NULL;
@@ -963,6 +1034,11 @@
event->crossing.focus = FALSE;
event->crossing.state = modifiers;
+
+ D_DEBUG_AT( GDKDFB_Crossing, " => LEAVE (%p/%p) at %4f,%4f (%4f,%4f) mode %d, detail %d\n",
+ event_win, a,
+ event->crossing.x, event->crossing.y, event->crossing.x_root, event->crossing.y_root,
+ event->crossing.mode, event->crossing.detail );
}
/* Traverse up from a to (excluding) c */
@@ -996,6 +1072,11 @@
event->crossing.focus = FALSE;
event->crossing.state = modifiers;
+
+ D_DEBUG_AT( GDKDFB_Crossing, " -> LEAVE (%p/%p) at %4f,%4f (%4f,%4f) mode %d, detail %d\n",
+ event_win, win,
+ event->crossing.x, event->crossing.y, event->crossing.x_root, event->crossing.y_root,
+ event->crossing.mode, event->crossing.detail );
}
last = win;
@@ -1049,6 +1130,11 @@
event->crossing.focus = FALSE;
event->crossing.state = modifiers;
+
+ D_DEBUG_AT( GDKDFB_Crossing, " -> ENTER (%p/%p) at %4f,%4f (%4f,%4f) mode %d, detail %d\n",
+ event_win, win,
+ event->crossing.x, event->crossing.y, event->crossing.x_root, event->crossing.y_root,
+ event->crossing.mode, event->crossing.detail );
}
}
@@ -1079,6 +1165,11 @@
event->crossing.focus = FALSE;
event->crossing.state = modifiers;
+
+ D_DEBUG_AT( GDKDFB_Crossing, " => ENTER (%p/%p) at %4f,%4f (%4f,%4f) mode %d, detail %d\n",
+ event_win, b,
+ event->crossing.x, event->crossing.y, event->crossing.x_root, event->crossing.y_root,
+ event->crossing.mode, event->crossing.detail );
}
if (mode != GDK_CROSSING_GRAB)
@@ -1101,6 +1192,8 @@
GdkWindowImplDirectFB *impl;
GdkWindow *mousewin;
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p, %sraise )\n", __FUNCTION__, window, raise ? "" : "no " );
+
private = GDK_WINDOW_OBJECT (window);
impl = GDK_WINDOW_IMPL_DIRECTFB (private->impl);
@@ -1142,6 +1235,8 @@
{
g_return_if_fail (GDK_IS_WINDOW (window));
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p )\n", __FUNCTION__, window );
+
show_window_internal (window, FALSE);
}
@@ -1150,6 +1245,8 @@
{
g_return_if_fail (GDK_IS_WINDOW (window));
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p )\n", __FUNCTION__, window );
+
show_window_internal (window, TRUE);
}
@@ -1163,6 +1260,8 @@
g_return_if_fail (GDK_IS_WINDOW (window));
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p )\n", __FUNCTION__, window );
+
private = GDK_WINDOW_OBJECT (window);
impl = GDK_WINDOW_IMPL_DIRECTFB (private->impl);
@@ -1527,11 +1626,15 @@
gint dx = 0;
gint dy = 0;
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p, %4d,%4d-%4dx%4d )\n", __FUNCTION__, window, x, y, width, height );
+
g_return_if_fail (GDK_IS_WINDOW (window));
- if (GDK_WINDOW_DESTROYED (window))
+ if (GDK_WINDOW_DESTROYED (window)) {
+ D_DEBUG_AT( GDKDFB_Window, " -> DESTROYED!\n" );
return;
-
+ }
+
private = GDK_WINDOW_OBJECT (window);
impl = GDK_DRAWABLE_IMPL_DIRECTFB (private->impl);
@@ -1555,8 +1658,10 @@
dy += relative_to->y;
}
- if (bg_pixmap == GDK_NO_BG)
+ if (bg_pixmap == GDK_NO_BG) {
+ D_DEBUG_AT( GDKDFB_Window, " -> NO BG\n" );
return;
+ }
if (bg_pixmap && bg_pixmap != GDK_PARENT_RELATIVE_BG)
{
@@ -1567,6 +1672,8 @@
values.ts_x_origin = - dx;
values.ts_y_origin = - dy;
+ D_DEBUG_AT( GDKDFB_Window, " -> PIXMAP\n" );
+
gc = gdk_gc_new_with_values (GDK_DRAWABLE (impl), &values,
GDK_GC_FILL | GDK_GC_TILE |
GDK_GC_TS_X_ORIGIN | GDK_GC_TS_Y_ORIGIN);
@@ -1580,6 +1687,8 @@
values.foreground = relative_to->bg_color;
+ D_DEBUG_AT( GDKDFB_Window, " -> COLOR\n" );
+
gc = gdk_gc_new_with_values (GDK_DRAWABLE (impl), &values,
GDK_GC_FOREGROUND);
}
@@ -1602,6 +1711,8 @@
GdkWindowObject *private;
GdkWindowImplDirectFB *impl;
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p, %4d,%4d-%4dx%4d )\n", __FUNCTION__, window, x, y, width, height );
+
g_return_if_fail (GDK_IS_WINDOW (window));
private = GDK_WINDOW_OBJECT (window);
@@ -1622,8 +1733,10 @@
g_return_if_fail (GDK_IS_WINDOW (window));
- if (GDK_WINDOW_DESTROYED (window))
+ if (GDK_WINDOW_DESTROYED (window)) {
+ D_DEBUG_AT( GDKDFB_Window, " -> DESTROYED!\n" );
return;
+ }
_gdk_windowing_window_clear_area (window, x, y, width, height);
@@ -1635,6 +1748,8 @@
{
GdkWindowImplDirectFB *impl;
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p )\n", __FUNCTION__, window );
+
g_return_if_fail (GDK_IS_WINDOW (window));
if (GDK_WINDOW_DESTROYED (window))
@@ -1664,6 +1779,8 @@
{
GdkWindowImplDirectFB *impl;
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p )\n", __FUNCTION__, window );
+
g_return_if_fail (GDK_IS_WINDOW (window));
if (GDK_WINDOW_DESTROYED (window))
@@ -1703,6 +1820,8 @@
if (GDK_WINDOW_DESTROYED (window))
return;
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p, %3d,%3d, min %4dx%4d, max %4dx%4d, flags 0x%08x )\n", __FUNCTION__,
+ window, x,y, min_width, min_height, max_width, max_height, flags );
/* N/A */
}
@@ -1728,7 +1847,9 @@
if (GDK_WINDOW_DESTROYED (window))
return;
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p, '%s' )\n", __FUNCTION__, window, title );
/* N/A */
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p )\n", __FUNCTION__, window );
}
void
@@ -1796,6 +1917,8 @@
g_return_if_fail (color != NULL);
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p, %d,%d,%d )\n", __FUNCTION__, window, color->red, color->green, color->blue );
+
private = GDK_WINDOW_OBJECT (window);
private->bg_color = *color;
@@ -1818,6 +1941,9 @@
g_return_if_fail (GDK_IS_WINDOW (window));
g_return_if_fail (pixmap == NULL || !parent_relative);
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p, %p, %srelative )\n", __FUNCTION__,
+ window, pixmap, parent_relative ? "" : "not " );
+
private = GDK_WINDOW_OBJECT (window);
old_pixmap = private->bg_pixmap;
@@ -1944,6 +2070,8 @@
impl->abs_y += parent_impl->abs_y;
}
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p ) -> %4d,%4d\n", __FUNCTION__, window, impl->abs_x, impl->abs_y );
+
for (list = private->children; list; list = list->next)
{
_gdk_directfb_calc_abs (list->data);
@@ -2902,64 +3030,62 @@
gdk_window_impl_directfb_process_updates (GdkPaintable *paintable,
gboolean update_children)
{
- GdkWindow *window;
- GdkWindowObject *private;
GdkWindowImplDirectFB *wimpl;
GdkDrawableImplDirectFB *impl;
+ GdkWindow *window;
+ GdkWindowObject *private;
+ GdkRegion *update_area;
wimpl = GDK_WINDOW_IMPL_DIRECTFB (paintable);
impl = (GdkDrawableImplDirectFB *)wimpl;
window = wimpl->gdkWindow;
private = (GdkWindowObject *)window;
- gboolean save_region = FALSE;
+
+ D_DEBUG_AT( GDKDFB_Paintable, "%s( %p, %schildren )\n", __FUNCTION__,
+ paintable, update_children ? "update " : "no " );
/* If an update got queued during update processing, we can get a
* window in the update queue that has an empty update_area.
* just ignore it.
*/
- if (private->update_area)
- {
- GdkRegion *update_area = private->update_area;
- private->update_area = NULL;
+ if (!private->update_area)
+ return;
+
+ update_area = private->update_area;
+ private->update_area = NULL;
- if (_gdk_event_func && gdk_window_is_viewable (window))
- {
- GdkRegion *expose_region;
- GdkRegion window_region;
- save_region = _gdk_windowing_window_queue_antiexpose (window, update_area);
+ D_DEBUG_AT( GDKDFB_Paintable, " -> update area %4d,%4d-%4dx%4d\n",
+ GDKDFB_RECTANGLE_VALS_FROM_SEGMENT( &update_area->extents ) );
- if (save_region)
- expose_region = gdk_region_copy (update_area);
- else
- expose_region = update_area;
+ if (_gdk_event_func && gdk_window_is_viewable (window))
+ {
+ GdkRegion *expose_region = update_area;
+ GdkRegion window_region;
- temp_region_init_rectangle_vals( &window_region, 0, 0, impl->width, impl->height );
- gdk_region_intersect (expose_region,
- &window_region);
- temp_region_deinit (&window_region);
+ temp_region_init_rectangle_vals( &window_region, 0, 0, impl->width, impl->height );
+ gdk_region_intersect( expose_region, &window_region );
+ temp_region_deinit (&window_region);
- if (!gdk_region_empty (expose_region) &&
- (private->event_mask & GDK_EXPOSURE_MASK))
- {
- GdkEvent event;
+ if (!gdk_region_empty (expose_region) && (private->event_mask & GDK_EXPOSURE_MASK))
+ {
+ GdkEvent event;
- event.expose.type = GDK_EXPOSE;
- event.expose.window = g_object_ref (window);
- event.expose.send_event = FALSE;
- event.expose.count = 0;
- event.expose.region = expose_region;
- gdk_region_get_clipbox (expose_region, &event.expose.area);
- (*_gdk_event_func) (&event, _gdk_event_data);
+ event.expose.type = GDK_EXPOSE;
+ event.expose.window = g_object_ref (window);
+ event.expose.send_event = FALSE;
+ event.expose.count = 0;
+ event.expose.region = expose_region;
+ gdk_region_get_clipbox (expose_region, &event.expose.area);
+ (*_gdk_event_func) (&event, _gdk_event_data);
- g_object_unref (window);
- }
-
- if (expose_region != update_area)
- gdk_region_destroy (expose_region);
+ g_object_unref (window);
}
- if (!save_region)
- gdk_region_destroy (update_area);
+
+ if (expose_region != update_area)
+ gdk_region_destroy (expose_region);
}
+
+ gdk_region_destroy (update_area);
}
@@ -2968,7 +3094,7 @@
const GdkRegion *region)
{
GdkDrawableImplDirectFB *impl;
- GdkWindowImplDirectFB *wimpl;
+ GdkWindowImplDirectFB *wimpl;
gint i;
@@ -2979,36 +3105,59 @@
if (!region)
return;
- if (impl->buffered) {
- g_assert( impl->paint_depth > 0 );
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p ) <- %4d,%4d-%4d,%4d (%d boxes)\n", __FUNCTION__,
+ paintable, GDKDFB_RECTANGLE_VALS_FROM_SEGMENT(®ion->extents), region->numRects );
- gdk_region_union (&impl->paint_region, region);
- }
- else {
- g_assert( impl->paint_depth == 0 );
+ /* When it's buffered... */
+ if (impl->buffered)
+ {
+ /* ...we're already painting on it! */
+ g_assert( impl->paint_depth > 0 );
+
+ D_DEBUG_AT( GDKDFB_Window, " -> painted %4d,%4d-%4dx%4d (%d boxes)\n",
+ DFB_RECTANGLE_VALS_FROM_REGION( &impl->paint_region.extents ), impl->paint_region.numRects );
+
+ /* Add the new region to the paint region... */
+ gdk_region_union (&impl->paint_region, region);
+ }
+ else
+ {
+ /* ...otherwise it's the first time! */
+ g_assert( impl->paint_depth == 0 );
- gdk_directfb_clip_region( GDK_DRAWABLE(paintable), NULL, NULL, &impl->clip_region );
+ /* Generate the clip region for painting around child windows. */
+ gdk_directfb_clip_region( GDK_DRAWABLE(paintable), NULL, NULL, &impl->clip_region );
- temp_region_init_copy( &impl->paint_region, region );
+ /* Initialize the paint region with the new one... */
+ temp_region_init_copy( &impl->paint_region, region );
- impl->buffered = TRUE;
- }
+ impl->buffered = TRUE;
+ }
+
+ D_DEBUG_AT( GDKDFB_Window, " -> painting %4d,%4d-%4dx%4d (%d boxes)\n",
+ DFB_RECTANGLE_VALS_FROM_REGION( &impl->paint_region.extents ), impl->paint_region.numRects );
+ /* ...but clip the initial/compound result against the clip region. */
gdk_region_intersect (&impl->paint_region, &impl->clip_region);
+ D_DEBUG_AT( GDKDFB_Window, " -> clipped %4d,%4d-%4dx%4d (%d boxes)\n",
+ DFB_RECTANGLE_VALS_FROM_REGION( &impl->paint_region.extents ), impl->paint_region.numRects );
+
impl->paint_depth++;
+ D_DEBUG_AT( GDKDFB_Window, " -> depth is now %d\n", impl->paint_depth );
for (i = 0; i < region->numRects; i++)
{
GdkRegionBox *box = ®ion->rects[i];
+ D_DEBUG_AT( GDKDFB_Window, " -> [%2d] %4d,%4d-%4dx%4d\n", i, GDKDFB_RECTANGLE_VALS_FROM_SEGMENT( box ) );
+
_gdk_windowing_window_clear_area (GDK_WINDOW(wimpl->gdkWindow),
box->x1,
box->y1,
box->x2 - box->x1,
box->y2 - box->y1);
-
}
}
@@ -3019,6 +3168,8 @@
impl = GDK_DRAWABLE_IMPL_DIRECTFB (paintable);
+ D_DEBUG_AT( GDKDFB_Window, "%s( %p )\n", __FUNCTION__, paintable );
+
g_return_if_fail (impl->paint_depth > 0);
g_assert( impl->buffered );
@@ -3034,8 +3185,11 @@
{
DFBRegion reg = { impl->paint_region.extents.x1,
impl->paint_region.extents.y1,
- impl->paint_region.extents.x2 ,
- impl->paint_region.extents.y2 };
+ impl->paint_region.extents.x2-1,
+ impl->paint_region.extents.y2-1 };
+
+ D_DEBUG_AT( GDKDFB_Window, " -> flip %4d,%4d-%4dx%4d (%d boxes)\n",
+ DFB_RECTANGLE_VALS_FROM_REGION( ® ), impl->paint_region.numRects );
impl->surface->Flip( impl->surface, ®, 0 );
@@ -3043,37 +3197,43 @@
}
}
#else
- if (impl->paint_depth == 0) {
- impl->buffered = FALSE;
-
- temp_region_deinit( &impl->clip_region );
-
- if (impl->paint_region.numRects) {
- GdkWindow *window = GDK_WINDOW( impl->wrapper );
-
- if (GDK_IS_WINDOW(window)) {
- GdkWindowObject *top = GDK_WINDOW_OBJECT( gdk_window_get_toplevel( window ) );
-
- if (top) {
- DFBRegion reg;
- GdkWindowImplDirectFB *wimpl = GDK_WINDOW_IMPL_DIRECTFB (top->impl);
-
- reg.x1 = impl->abs_x - top->x + impl->paint_region.extents.x1;
- reg.y1 = impl->abs_y - top->y + impl->paint_region.extents.y1;
- reg.x2 = impl->abs_x - top->x + impl->paint_region.extents.x2 - 1;
- reg.y2 = impl->abs_y - top->y + impl->paint_region.extents.y2 - 1;
-
- //direct_log_printf( NULL, "Adding bounding box of paint: %d,%d - %dx%d (top %p, wimpl %p)\n",
- // DFB_RECTANGLE_VALS_FROM_REGION( ® ), top, wimpl );
-
- dfb_updates_add( &wimpl->flips, ® );
- }
+ if (impl->paint_depth == 0)
+ {
+ impl->buffered = FALSE;
+
+ temp_region_deinit( &impl->clip_region );
+
+ if (impl->paint_region.numRects)
+ {
+ GdkWindow *window = GDK_WINDOW( impl->wrapper );
+
+ if (GDK_IS_WINDOW(window))
+ {
+ GdkWindowObject *top = GDK_WINDOW_OBJECT( gdk_window_get_toplevel( window ) );
+
+ if (top)
+ {
+ DFBRegion reg;
+ GdkWindowImplDirectFB *wimpl = GDK_WINDOW_IMPL_DIRECTFB (top->impl);
+
+ reg.x1 = impl->abs_x - top->x + impl->paint_region.extents.x1;
+ reg.y1 = impl->abs_y - top->y + impl->paint_region.extents.y1;
+ reg.x2 = impl->abs_x - top->x + impl->paint_region.extents.x2 - 1;
+ reg.y2 = impl->abs_y - top->y + impl->paint_region.extents.y2 - 1;
+
+ D_DEBUG_AT( GDKDFB_Window, " -> queue flip %4d,%4d-%4dx%4d (%d boxes)\n",
+ DFB_RECTANGLE_VALS_FROM_REGION( ® ), impl->paint_region.numRects );
+
+ dfb_updates_add( &wimpl->flips, ® );
+ }
}
-
- temp_region_reset( &impl->paint_region );
- }
- }
+
+ temp_region_reset( &impl->paint_region );
+ }
+ }
#endif
+ else
+ D_DEBUG_AT( GDKDFB_Window, " -> depth is still %d\n", impl->paint_depth );
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]