summaryrefslogtreecommitdiff
path: root/libs/canvas
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-03-20 02:15:15 +0100
committerRobin Gareus <robin@gareus.org>2017-03-20 02:15:15 +0100
commit5fe355af9280acc5f721d956f76bff8d76d31649 (patch)
tree1211954644a6002acc4e6fe3457c9edda8f360d4 /libs/canvas
parentc371fc511500acada422cdcf93658fc25e5106de (diff)
Use NSGLView with patched gdk
Special case Ardour's Canvas NSView to forward gdk-events which are otherwise special-cased to read AU-views..
Diffstat (limited to 'libs/canvas')
-rw-r--r--libs/canvas/canvas.cc3
-rw-r--r--libs/canvas/nsglview.mm16
2 files changed, 14 insertions, 5 deletions
diff --git a/libs/canvas/canvas.cc b/libs/canvas/canvas.cc
index 70fd36e8b5..52bff497af 100644
--- a/libs/canvas/canvas.cc
+++ b/libs/canvas/canvas.cc
@@ -45,6 +45,7 @@
#include "canvas/utils.h"
#ifdef __APPLE__
+#include <gdk/gdk.h>
#include "canvas/nsglview.h"
#endif
@@ -401,7 +402,7 @@ GtkCanvas::GtkCanvas ()
Gdk::SCROLL_MASK | Gdk::ENTER_NOTIFY_MASK | Gdk::LEAVE_NOTIFY_MASK |
Gdk::KEY_PRESS_MASK | Gdk::KEY_RELEASE_MASK);
-#ifdef __APPLE__NotYetToDueGdkForeignViewMousePatch // XXX
+#ifdef ARDOUR_CANVAS_NSVIEW_TAG // patched gdkquartz.h
# ifndef __ppc__ // would need to flip RGBA <> RGBA
_nsglview = nsglview_create (this);
# endif
diff --git a/libs/canvas/nsglview.mm b/libs/canvas/nsglview.mm
index 09d0ae1342..b4fea995a3 100644
--- a/libs/canvas/nsglview.mm
+++ b/libs/canvas/nsglview.mm
@@ -31,6 +31,10 @@
#include <OpenGL/gl.h>
#import <Cocoa/Cocoa.h>
+#ifndef ARDOUR_CANVAS_NSVIEW_TAG
+#define ARDOUR_CANVAS_NSVIEW_TAG 0xa2d0c2c4
+#endif
+
__attribute__ ((visibility ("hidden")))
@interface ArdourCanvasOpenGLView : NSOpenGLView
{
@@ -42,9 +46,11 @@ __attribute__ ((visibility ("hidden")))
ArdourCanvas::GtkCanvas *gtkcanvas;
}
+@property (readwrite) NSInteger tag;
+
- (id) initWithFrame:(NSRect)frame;
- (void) dealloc;
-- (void) set_ardour_canvas:(ArdourCanvas::GtkCanvas*)c;
+- (void) setArdourCanvas:(ArdourCanvas::GtkCanvas*)c;
- (void) reshape;
- (void) drawRect:(NSRect)rect;
- (BOOL) canBecomeKeyWindow:(id)sender;
@@ -54,6 +60,8 @@ __attribute__ ((visibility ("hidden")))
@implementation ArdourCanvasOpenGLView
+@synthesize tag = _tag;
+
- (id) initWithFrame:(NSRect)frame
{
NSOpenGLPixelFormatAttribute pixelAttribs[16] = {
@@ -82,7 +90,7 @@ __attribute__ ((visibility ("hidden")))
_height = 0;
if (self) {
-
+ self.tag = ARDOUR_CANVAS_NSVIEW_TAG;
[[self openGLContext] makeCurrentContext];
glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
glDisable (GL_DEPTH_TEST);
@@ -105,7 +113,7 @@ __attribute__ ((visibility ("hidden")))
[super dealloc];
}
-- (void) set_ardour_canvas:(ArdourCanvas::GtkCanvas*)c
+- (void) setArdourCanvas:(ArdourCanvas::GtkCanvas*)c
{
gtkcanvas = c;
}
@@ -242,7 +250,7 @@ ArdourCanvas::nsglview_create (GtkCanvas* canvas)
if (!gl_view) {
return 0;
}
- [gl_view set_ardour_canvas:canvas];
+ [gl_view setArdourCanvas:canvas];
return gl_view;
}