6bdd276d05
Former-commit-id: fd56571888259555122d8a0f58c68838229cea2b
101 lines
3.4 KiB
Diff
101 lines
3.4 KiB
Diff
From 3c7e6438bb2420c8fd31ba164c400b66ae474f5d Mon Sep 17 00:00:00 2001
|
|
From: Michael Natterer <mitch@gimp.org>
|
|
Date: Fri, 5 Oct 2012 12:10:15 +0200
|
|
Subject: [PATCH 25/68] quartz: Add a dummy NSView serving as layer view
|
|
|
|
By doing this, the GdkQuartzView does not have to be marked as layer
|
|
backed, such that the disadvantages that come with that (not being able
|
|
to copy pixels and large redraw areas) no longer apply.
|
|
---
|
|
gdk/quartz/GdkQuartzView.c | 6 ++++++
|
|
gdk/quartz/gdkquartz.h | 1 +
|
|
gdk/quartz/gdkwindow-quartz.c | 16 ++++++++++++++++
|
|
gdk/quartz/gdkwindow-quartz.h | 1 +
|
|
4 files changed, 24 insertions(+)
|
|
|
|
diff --git a/gdk/quartz/GdkQuartzView.c b/gdk/quartz/GdkQuartzView.c
|
|
index 7f0ec40..c6ccf06 100644
|
|
--- a/gdk/quartz/GdkQuartzView.c
|
|
+++ b/gdk/quartz/GdkQuartzView.c
|
|
@@ -632,6 +632,8 @@
|
|
[[self window] invalidateShadow];
|
|
needsInvalidateShadow = NO;
|
|
}
|
|
+
|
|
+ [[self layer] removeAllAnimations];
|
|
}
|
|
|
|
-(void)setNeedsInvalidateShadow: (BOOL)invalidate
|
|
@@ -690,7 +692,11 @@
|
|
|
|
-(void)setFrame: (NSRect)frame
|
|
{
|
|
+ GdkWindowObject *private = GDK_WINDOW_OBJECT (gdk_window);
|
|
+ GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
|
|
+
|
|
[super setFrame: frame];
|
|
+ [impl->layer_view setFrame: frame];
|
|
|
|
if ([self window])
|
|
[self updateTrackingRect];
|
|
diff --git a/gdk/quartz/gdkquartz.h b/gdk/quartz/gdkquartz.h
|
|
index 3c42983..8b0085c 100644
|
|
--- a/gdk/quartz/gdkquartz.h
|
|
+++ b/gdk/quartz/gdkquartz.h
|
|
@@ -54,6 +54,7 @@ typedef enum
|
|
|
|
NSWindow *gdk_quartz_window_get_nswindow (GdkWindow *window);
|
|
NSView *gdk_quartz_window_get_nsview (GdkWindow *window);
|
|
+NSView *gdk_quartz_window_get_layer_view (GdkWindow *window);
|
|
NSImage *gdk_quartz_pixbuf_to_ns_image_libgtk_only (GdkPixbuf *pixbuf);
|
|
id gdk_quartz_drag_context_get_dragging_info_libgtk_only (GdkDragContext *context);
|
|
NSEvent *gdk_quartz_event_get_nsevent (GdkEvent *event);
|
|
diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c
|
|
index 318a171..500776d 100644
|
|
--- a/gdk/quartz/gdkwindow-quartz.c
|
|
+++ b/gdk/quartz/gdkwindow-quartz.c
|
|
@@ -68,6 +68,17 @@ gdk_quartz_window_get_nsview (GdkWindow *window)
|
|
return ((GdkWindowImplQuartz *)private->impl)->view;
|
|
}
|
|
|
|
+NSView *
|
|
+gdk_quartz_window_get_layer_view (GdkWindow *window)
|
|
+{
|
|
+ GdkWindowObject *private = (GdkWindowObject *)window;
|
|
+
|
|
+ if (GDK_WINDOW_DESTROYED (window))
|
|
+ return NULL;
|
|
+
|
|
+ return ((GdkWindowImplQuartz *)private->impl)->layer_view;
|
|
+}
|
|
+
|
|
NSWindow *
|
|
gdk_quartz_window_get_nswindow (GdkWindow *window)
|
|
{
|
|
@@ -1024,6 +1035,11 @@ _gdk_window_impl_new (GdkWindow *window,
|
|
[impl->view setGdkWindow:window];
|
|
[impl->toplevel setContentView:impl->view];
|
|
[impl->view release];
|
|
+
|
|
+ impl->layer_view = [[NSView alloc] initWithFrame:content_rect];
|
|
+ [impl->view addSubview:impl->layer_view];
|
|
+ [impl->layer_view setWantsLayer:YES];
|
|
+ [impl->layer_view release];
|
|
}
|
|
break;
|
|
|
|
diff --git a/gdk/quartz/gdkwindow-quartz.h b/gdk/quartz/gdkwindow-quartz.h
|
|
index 4a0e27a..f35238b 100644
|
|
--- a/gdk/quartz/gdkwindow-quartz.h
|
|
+++ b/gdk/quartz/gdkwindow-quartz.h
|
|
@@ -47,6 +47,7 @@ struct _GdkWindowImplQuartz
|
|
NSWindow *toplevel;
|
|
NSTrackingRectTag tracking_rect;
|
|
GdkQuartzView *view;
|
|
+ NSView *layer_view;
|
|
|
|
GdkWindowTypeHint type_hint;
|
|
|
|
--
|
|
1.7.10.2 (Apple Git-33)
|