|
|
@@ -496,11 +496,14 @@ private: |
|
|
|
#ifdef CARLA_OS_MAC |
|
|
|
|
|
|
|
#if defined(BUILD_BRIDGE_ALTERNATIVE_ARCH) |
|
|
|
# define CarlaPluginWindow CARLA_JOIN_MACRO(CarlaPluginWindowBridgedArch, CARLA_PLUGIN_UI_CLASS_PREFIX) |
|
|
|
# define CarlaPluginWindow CARLA_JOIN_MACRO3(CarlaPluginWindowBridgedArch, CARLA_BACKEND_NAMESPACE, CARLA_PLUGIN_UI_CLASS_PREFIX) |
|
|
|
# define CarlaPluginWindowDelegate CARLA_JOIN_MACRO3(CarlaPluginWindowDelegateBridgedArch, CARLA_BACKEND_NAMESPACE, CARLA_PLUGIN_UI_CLASS_PREFIX) |
|
|
|
#elif defined(BUILD_BRIDGE) |
|
|
|
# define CarlaPluginWindow CARLA_JOIN_MACRO(CarlaPluginWindowBridged, CARLA_PLUGIN_UI_CLASS_PREFIX) |
|
|
|
# define CarlaPluginWindow CARLA_JOIN_MACRO3(CarlaPluginWindowBridged, CARLA_BACKEND_NAMESPACE, CARLA_PLUGIN_UI_CLASS_PREFIX) |
|
|
|
# define CarlaPluginWindowDelegate CARLA_JOIN_MACRO3(CarlaPluginWindowDelegateBridged, CARLA_BACKEND_NAMESPACE, CARLA_PLUGIN_UI_CLASS_PREFIX) |
|
|
|
#else |
|
|
|
# define CarlaPluginWindow CARLA_JOIN_MACRO(CarlaPluginWindow, CARLA_PLUGIN_UI_CLASS_PREFIX) |
|
|
|
# define CarlaPluginWindow CARLA_JOIN_MACRO3(CarlaPluginWindow, CARLA_BACKEND_NAMESPACE, CARLA_PLUGIN_UI_CLASS_PREFIX) |
|
|
|
# define CarlaPluginWindowDelegate CARLA_JOIN_MACRO3(CarlaPluginWindowDelegate, CARLA_BACKEND_NAMESPACE, CARLA_PLUGIN_UI_CLASS_PREFIX) |
|
|
|
#endif |
|
|
|
|
|
|
|
@interface CarlaPluginWindow : NSWindow |
|
|
@@ -552,6 +555,7 @@ private: |
|
|
|
- (instancetype)initWithWindowAndCallback:(CarlaPluginWindow*)window |
|
|
|
callback:(CarlaPluginUI::Callback*)callback2; |
|
|
|
- (BOOL)windowShouldClose:(id)sender; |
|
|
|
- (NSSize)windowWillResize:(NSWindow*)sender toSize:(NSSize)frameSize; |
|
|
|
@end |
|
|
|
|
|
|
|
@implementation CarlaPluginWindowDelegate |
|
|
@@ -579,26 +583,36 @@ private: |
|
|
|
(void)sender; |
|
|
|
} |
|
|
|
|
|
|
|
@end |
|
|
|
|
|
|
|
@interface CarlaPluginView : NSView |
|
|
|
- (void)resizeWithOldSuperviewSize:(NSSize)oldSize; |
|
|
|
@end |
|
|
|
- (NSSize)windowWillResize:(NSWindow*)sender toSize:(NSSize)frameSize |
|
|
|
{ |
|
|
|
for (NSView* subview in [[window contentView] subviews]) |
|
|
|
{ |
|
|
|
const NSSize minSize = [subview fittingSize]; |
|
|
|
if (frameSize.width < minSize.width) |
|
|
|
frameSize.width = minSize.width; |
|
|
|
if (frameSize.height < minSize.height) |
|
|
|
frameSize.height = minSize.height; |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
@implementation CarlaPluginView |
|
|
|
return frameSize; |
|
|
|
} |
|
|
|
|
|
|
|
- (void)resizeWithOldSuperviewSize:(NSSize)oldSize |
|
|
|
/* |
|
|
|
- (void)windowDidResize:(NSWindow*)sender |
|
|
|
{ |
|
|
|
[super resizeWithOldSuperviewSize:oldSize]; |
|
|
|
carla_stdout("window did resize %p %f %f", sender, [window frame].size.width, [window frame].size.height); |
|
|
|
|
|
|
|
/* |
|
|
|
for (NSView* subview in [self subviews]) |
|
|
|
const NSSize size = [window frame].size; |
|
|
|
NSView* const view = [window contentView]; |
|
|
|
|
|
|
|
for (NSView* subview in [view subviews]) |
|
|
|
{ |
|
|
|
[subview setFrame:NSMakeRect(0, 0, oldSize.width, oldSize.height)]; |
|
|
|
[subview setFrameSize:size]; |
|
|
|
break; |
|
|
|
} |
|
|
|
*/ |
|
|
|
} |
|
|
|
*/ |
|
|
|
|
|
|
|
@end |
|
|
|
|
|
|
@@ -615,7 +629,7 @@ public: |
|
|
|
const CarlaBackend::AutoNSAutoreleasePool arp; |
|
|
|
[NSApplication sharedApplication]; |
|
|
|
|
|
|
|
fView = [[CarlaPluginView new]retain]; |
|
|
|
fView = [[NSView new]retain]; |
|
|
|
CARLA_SAFE_ASSERT_RETURN(fView != nullptr,) |
|
|
|
|
|
|
|
uint style = NSClosableWindowMask | NSTitledWindowMask; |
|
|
@@ -640,13 +654,26 @@ public: |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
((NSWindow*)fWindow).delegate = [[[CarlaPluginWindowDelegate alloc] |
|
|
|
((NSWindow*)fWindow).delegate = [[[CarlaPluginWindowDelegate alloc] |
|
|
|
initWithWindowAndCallback:fWindow |
|
|
|
callback:callback] retain]; |
|
|
|
|
|
|
|
// if (! isResizable) |
|
|
|
/* |
|
|
|
if (isResizable) |
|
|
|
{ |
|
|
|
[fView setAutoresizingMask:(NSViewWidthSizable | |
|
|
|
NSViewHeightSizable | |
|
|
|
NSViewMinXMargin | |
|
|
|
NSViewMaxXMargin | |
|
|
|
NSViewMinYMargin | |
|
|
|
NSViewMaxYMargin)]; |
|
|
|
[fView setAutoresizesSubviews:YES]; |
|
|
|
} |
|
|
|
else |
|
|
|
*/ |
|
|
|
{ |
|
|
|
[fView setAutoresizingMask:NSViewNotSizable]; |
|
|
|
[fView setAutoresizesSubviews:NO]; |
|
|
|
[[fWindow standardWindowButton:NSWindowZoomButton] setHidden:YES]; |
|
|
|
} |
|
|
|
|
|
|
@@ -702,6 +729,19 @@ public: |
|
|
|
void idle() override |
|
|
|
{ |
|
|
|
// carla_debug("CocoaPluginUI::idle()"); |
|
|
|
|
|
|
|
for (NSView* subview in [fView subviews]) |
|
|
|
{ |
|
|
|
const NSSize viewSize = [fView frame].size; |
|
|
|
const NSSize subviewSize = [subview frame].size; |
|
|
|
|
|
|
|
if (viewSize.width != subviewSize.width || viewSize.height != subviewSize.height) |
|
|
|
{ |
|
|
|
[fView setFrameSize:subviewSize]; |
|
|
|
[fWindow setContentSize:subviewSize]; |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void focus() override |
|
|
@@ -720,17 +760,21 @@ public: |
|
|
|
CARLA_SAFE_ASSERT_RETURN(fWindow != nullptr,); |
|
|
|
CARLA_SAFE_ASSERT_RETURN(fView != nullptr,); |
|
|
|
|
|
|
|
[fView setFrame:NSMakeRect(0, 0, width, height)]; |
|
|
|
const NSSize size = NSMakeSize(width, height); |
|
|
|
|
|
|
|
for (NSView* subview in [fView subviews]) |
|
|
|
[fView setFrameSize:size]; |
|
|
|
[fWindow setContentSize:size]; |
|
|
|
|
|
|
|
// this is needed for a few plugins |
|
|
|
if (forceUpdate) |
|
|
|
{ |
|
|
|
[subview setFrame:NSMakeRect(0, 0, width, height)]; |
|
|
|
break; |
|
|
|
for (NSView* subview in [fView subviews]) |
|
|
|
{ |
|
|
|
[subview setFrame:[fView frame]]; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const NSSize size = NSMakeSize(width, height); |
|
|
|
[fWindow setContentSize:size]; |
|
|
|
|
|
|
|
/* |
|
|
|
if (fIsResizable) |
|
|
|
{ |
|
|
|