1 From 3c7e6438bb2420c8fd31ba164c400b66ae474f5d Mon Sep 17 00:00:00 2001
2 From: Michael Natterer <mitch@gimp.org>
3 Date: Fri, 5 Oct 2012 12:10:15 +0200
4 Subject: [PATCH 25/68] quartz: Add a dummy NSView serving as layer view
6 By doing this, the GdkQuartzView does not have to be marked as layer
7 backed, such that the disadvantages that come with that (not being able
8 to copy pixels and large redraw areas) no longer apply.
10 gdk/quartz/GdkQuartzView.c | 6 ++++++
11 gdk/quartz/gdkquartz.h | 1 +
12 gdk/quartz/gdkwindow-quartz.c | 16 ++++++++++++++++
13 gdk/quartz/gdkwindow-quartz.h | 1 +
14 4 files changed, 24 insertions(+)
16 diff --git a/gdk/quartz/GdkQuartzView.c b/gdk/quartz/GdkQuartzView.c
17 index 7f0ec40..c6ccf06 100644
18 --- a/gdk/quartz/GdkQuartzView.c
19 +++ b/gdk/quartz/GdkQuartzView.c
21 [[self window] invalidateShadow];
22 needsInvalidateShadow = NO;
25 + [[self layer] removeAllAnimations];
28 -(void)setNeedsInvalidateShadow: (BOOL)invalidate
31 -(void)setFrame: (NSRect)frame
33 + GdkWindowObject *private = GDK_WINDOW_OBJECT (gdk_window);
34 + GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
36 [super setFrame: frame];
37 + [impl->layer_view setFrame: frame];
40 [self updateTrackingRect];
41 diff --git a/gdk/quartz/gdkquartz.h b/gdk/quartz/gdkquartz.h
42 index 3c42983..8b0085c 100644
43 --- a/gdk/quartz/gdkquartz.h
44 +++ b/gdk/quartz/gdkquartz.h
45 @@ -54,6 +54,7 @@ typedef enum
47 NSWindow *gdk_quartz_window_get_nswindow (GdkWindow *window);
48 NSView *gdk_quartz_window_get_nsview (GdkWindow *window);
49 +NSView *gdk_quartz_window_get_layer_view (GdkWindow *window);
50 NSImage *gdk_quartz_pixbuf_to_ns_image_libgtk_only (GdkPixbuf *pixbuf);
51 id gdk_quartz_drag_context_get_dragging_info_libgtk_only (GdkDragContext *context);
52 NSEvent *gdk_quartz_event_get_nsevent (GdkEvent *event);
53 diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c
54 index 318a171..500776d 100644
55 --- a/gdk/quartz/gdkwindow-quartz.c
56 +++ b/gdk/quartz/gdkwindow-quartz.c
57 @@ -68,6 +68,17 @@ gdk_quartz_window_get_nsview (GdkWindow *window)
58 return ((GdkWindowImplQuartz *)private->impl)->view;
62 +gdk_quartz_window_get_layer_view (GdkWindow *window)
64 + GdkWindowObject *private = (GdkWindowObject *)window;
66 + if (GDK_WINDOW_DESTROYED (window))
69 + return ((GdkWindowImplQuartz *)private->impl)->layer_view;
73 gdk_quartz_window_get_nswindow (GdkWindow *window)
75 @@ -1024,6 +1035,11 @@ _gdk_window_impl_new (GdkWindow *window,
76 [impl->view setGdkWindow:window];
77 [impl->toplevel setContentView:impl->view];
80 + impl->layer_view = [[NSView alloc] initWithFrame:content_rect];
81 + [impl->view addSubview:impl->layer_view];
82 + [impl->layer_view setWantsLayer:YES];
83 + [impl->layer_view release];
87 diff --git a/gdk/quartz/gdkwindow-quartz.h b/gdk/quartz/gdkwindow-quartz.h
88 index 4a0e27a..f35238b 100644
89 --- a/gdk/quartz/gdkwindow-quartz.h
90 +++ b/gdk/quartz/gdkwindow-quartz.h
91 @@ -47,6 +47,7 @@ struct _GdkWindowImplQuartz
93 NSTrackingRectTag tracking_rect;
97 GdkWindowTypeHint type_hint;
100 1.7.10.2 (Apple Git-33)