From f14bf846991513c9273c753310d4e428f9bd06c8 Mon Sep 17 00:00:00 2001 From: Richard Hult Date: Wed, 27 Feb 2008 10:49:22 +0000 Subject: [PATCH] Fix performance regression for borderless transparent windows with shadow. 2008-02-27 Richard Hult * gdk/quartz/GdkQuartzView.c: * gdk/quartz/GdkQuartzView.h: * gdk/quartz/gdkwindow-quartz.c: (gdk_window_set_decorations): Fix performance regression for borderless transparent windows with shadow. svn path=/trunk/; revision=19666 --- ChangeLog | 8 ++++++++ gdk/quartz/GdkQuartzView.c | 15 ++++++++++----- gdk/quartz/GdkQuartzView.h | 2 ++ gdk/quartz/gdkwindow-quartz.c | 6 ++++++ 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4bd2585419..91e5f70b05 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-02-27 Richard Hult + + * gdk/quartz/GdkQuartzView.c: + * gdk/quartz/GdkQuartzView.h: + * gdk/quartz/gdkwindow-quartz.c: (gdk_window_set_decorations): + Fix performance regression for borderless transparent windows + with shadow. + 2008-02-27 Emmanuele Bassi * tests/testgtk.c: Revert back to r19454. diff --git a/gdk/quartz/GdkQuartzView.c b/gdk/quartz/GdkQuartzView.c index 44f21e5a4f..1063e7bfb9 100644 --- a/gdk/quartz/GdkQuartzView.c +++ b/gdk/quartz/GdkQuartzView.c @@ -116,15 +116,20 @@ gdk_region_destroy (region); - /* Invalidate the window shadow for non-opaque views that have shadow - * enabled, otherwise the shadow doesn't get updated to what we draw. - */ - if (![self isOpaque] && [[self window] hasShadow]) - [[self window] invalidateShadow]; + if (needsInvalidateShadow) + { + [[self window] invalidateShadow]; + needsInvalidateShadow = NO; + } GDK_QUARTZ_RELEASE_POOL; } +-(void)setNeedsInvalidateShadow:(BOOL)invalidate +{ + needsInvalidateShadow = invalidate; +} + /* For information on setting up tracking rects properly, see here: * http://developer.apple.com/documentation/Cocoa/Conceptual/EventOverview/EventOverview.pdf */ diff --git a/gdk/quartz/GdkQuartzView.h b/gdk/quartz/GdkQuartzView.h index 29172e4382..752c3989b3 100644 --- a/gdk/quartz/GdkQuartzView.h +++ b/gdk/quartz/GdkQuartzView.h @@ -24,9 +24,11 @@ @interface GdkQuartzView : NSView { GdkWindow *gdk_window; NSTrackingRectTag trackingRect; + BOOL needsInvalidateShadow; } -(void)setGdkWindow:(GdkWindow *)window; -(GdkWindow *)gdkWindow; +-(void)setNeedsInvalidateShadow:(BOOL)invalidate; @end diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c index d585f1d604..932e5f568b 100644 --- a/gdk/quartz/gdkwindow-quartz.c +++ b/gdk/quartz/gdkwindow-quartz.c @@ -2631,6 +2631,12 @@ gdk_window_set_decorations (GdkWindow *window, [impl->toplevel setContentView:old_view]; [impl->toplevel setFrame:rect display:YES]; + + /* Invalidate the window shadow for non-opaque views that have shadow + * enabled, to get the shadow shape updated. + */ + if (![old_view isOpaque] && [impl->toplevel hasShadow]) + [(GdkQuartzView*)old_view setNeedsInvalidateShadow:YES]; } GDK_QUARTZ_RELEASE_POOL;