|
|
|
@ -57,6 +57,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT ObtainNSWindowHandle(void** ret) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
if (ret == nullptr) |
|
|
|
{ |
|
|
|
return E_POINTER; |
|
|
|
@ -69,6 +71,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT ObtainNSWindowHandleRetained(void** ret) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
if (ret == nullptr) |
|
|
|
{ |
|
|
|
return E_POINTER; |
|
|
|
@ -81,6 +85,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT ObtainNSViewHandle(void** ret) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
if (ret == nullptr) |
|
|
|
{ |
|
|
|
return E_POINTER; |
|
|
|
@ -93,6 +99,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT ObtainNSViewHandleRetained(void** ret) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
if (ret == nullptr) |
|
|
|
{ |
|
|
|
return E_POINTER; |
|
|
|
@ -110,6 +118,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT Show(bool activate, bool isDialog) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
SetPosition(lastPositionSet); |
|
|
|
@ -119,6 +129,7 @@ public: |
|
|
|
|
|
|
|
if(ShouldTakeFocusOnShow() && activate) |
|
|
|
{ |
|
|
|
[Window orderFront: Window]; |
|
|
|
[Window makeKeyAndOrderFront:Window]; |
|
|
|
[Window makeFirstResponder:View]; |
|
|
|
[NSApp activateIgnoringOtherApps:YES]; |
|
|
|
@ -141,6 +152,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT Hide () override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(Window != nullptr) |
|
|
|
@ -155,6 +168,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT Activate () override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(Window != nullptr) |
|
|
|
@ -169,6 +184,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT SetTopMost (bool value) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
[Window setLevel: value ? NSFloatingWindowLevel : NSNormalWindowLevel]; |
|
|
|
@ -179,11 +196,16 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT Close() override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if (Window != nullptr) |
|
|
|
{ |
|
|
|
[Window close]; |
|
|
|
auto window = Window; |
|
|
|
Window = nullptr; |
|
|
|
|
|
|
|
[window close]; |
|
|
|
} |
|
|
|
|
|
|
|
return S_OK; |
|
|
|
@ -192,6 +214,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT GetClientSize(AvnSize* ret) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(ret == nullptr) |
|
|
|
@ -207,6 +231,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT GetScaling (double* ret) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(ret == nullptr) |
|
|
|
@ -225,6 +251,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT SetMinMaxSize (AvnSize minSize, AvnSize maxSize) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
[Window setMinSize: ToNSSize(minSize)]; |
|
|
|
@ -236,6 +264,7 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT Resize(double x, double y, AvnPlatformResizeReason reason) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
if(_inResize) |
|
|
|
{ |
|
|
|
return S_OK; |
|
|
|
@ -291,6 +320,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT Invalidate (AvnRect rect) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
[View setNeedsDisplayInRect:[View frame]]; |
|
|
|
@ -301,6 +332,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT SetMainMenu(IAvnMenu* menu) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
_mainMenu = menu; |
|
|
|
|
|
|
|
auto nativeMenu = dynamic_cast<AvnAppMenu*>(menu); |
|
|
|
@ -319,6 +352,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT BeginMoveDrag () override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
auto lastEvent = [View lastMouseDownEvent]; |
|
|
|
@ -336,11 +371,15 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT BeginResizeDrag (AvnWindowEdge edge) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
return S_OK; |
|
|
|
} |
|
|
|
|
|
|
|
virtual HRESULT GetPosition (AvnPoint* ret) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(ret == nullptr) |
|
|
|
@ -361,6 +400,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT SetPosition (AvnPoint point) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
lastPositionSet = point; |
|
|
|
@ -372,6 +413,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT PointToClient (AvnPoint point, AvnPoint* ret) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(ret == nullptr) |
|
|
|
@ -390,6 +433,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT PointToScreen (AvnPoint point, AvnPoint* ret) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(ret == nullptr) |
|
|
|
@ -407,12 +452,16 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT ThreadSafeSetSwRenderedFrame(AvnFramebuffer* fb, IUnknown* dispose) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
[View setSwRenderedFrame: fb dispose: dispose]; |
|
|
|
return S_OK; |
|
|
|
} |
|
|
|
|
|
|
|
virtual HRESULT SetCursor(IAvnCursor* cursor) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
Cursor* avnCursor = dynamic_cast<Cursor*>(cursor); |
|
|
|
@ -442,6 +491,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT CreateGlRenderTarget(IAvnGlSurfaceRenderTarget** ppv) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
if(View == NULL) |
|
|
|
return E_FAIL; |
|
|
|
*ppv = [renderTarget createSurfaceRenderTarget]; |
|
|
|
@ -450,6 +501,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT CreateNativeControlHost(IAvnNativeControlHost** retOut) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
if(View == NULL) |
|
|
|
return E_FAIL; |
|
|
|
*retOut = ::CreateNativeControlHost(View); |
|
|
|
@ -458,6 +511,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT SetBlurEnabled (bool enable) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
[StandardContainer ShowBlur:enable]; |
|
|
|
|
|
|
|
return S_OK; |
|
|
|
@ -467,6 +522,8 @@ public: |
|
|
|
IAvnClipboard* clipboard, IAvnDndResultCallback* cb, |
|
|
|
void* sourceHandle) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
auto item = TryGetPasteboardItem(clipboard); |
|
|
|
[item setString:@"" forType:GetAvnCustomDataType()]; |
|
|
|
if(item == nil) |
|
|
|
@ -574,6 +631,11 @@ private: |
|
|
|
|
|
|
|
void HideOrShowTrafficLights () |
|
|
|
{ |
|
|
|
if (Window == nil) |
|
|
|
{ |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
for (id subview in Window.contentView.superview.subviews) { |
|
|
|
if ([subview isKindOfClass:NSClassFromString(@"NSTitlebarContainerView")]) { |
|
|
|
NSView *titlebarView = [subview subviews][0]; |
|
|
|
@ -600,6 +662,8 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT Show (bool activate, bool isDialog) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
_isDialog = isDialog; |
|
|
|
@ -613,6 +677,8 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT SetEnabled (bool enable) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
[Window setEnabled:enable]; |
|
|
|
@ -622,6 +688,8 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT SetParent (IAvnWindow* parent) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(parent == nullptr) |
|
|
|
@ -740,6 +808,8 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT SetCanResize(bool value) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
_canResize = value; |
|
|
|
@ -750,6 +820,8 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT SetDecorations(SystemDecorations value) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
auto currentWindowState = _lastWindowState; |
|
|
|
@ -815,6 +887,8 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT SetTitle (char* utf8title) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
_lastTitle = [NSString stringWithUTF8String:(const char*)utf8title]; |
|
|
|
@ -826,6 +900,8 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT SetTitleBarColor(AvnColor color) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
float a = (float)color.Alpha / 255.0f; |
|
|
|
@ -855,6 +931,8 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT GetWindowState (AvnWindowState*ret) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(ret == nullptr) |
|
|
|
@ -888,86 +966,111 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT TakeFocusFromChildren () override |
|
|
|
{ |
|
|
|
if(Window == nil) |
|
|
|
return S_OK; |
|
|
|
if([Window isKeyWindow]) |
|
|
|
[Window makeFirstResponder: View]; |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
return S_OK; |
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(Window == nil) |
|
|
|
return S_OK; |
|
|
|
if([Window isKeyWindow]) |
|
|
|
[Window makeFirstResponder: View]; |
|
|
|
|
|
|
|
return S_OK; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
virtual HRESULT SetExtendClientArea (bool enable) override |
|
|
|
{ |
|
|
|
_isClientAreaExtended = enable; |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
if(enable) |
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
Window.titleVisibility = NSWindowTitleHidden; |
|
|
|
|
|
|
|
[Window setTitlebarAppearsTransparent:true]; |
|
|
|
|
|
|
|
auto wantsTitleBar = (_extendClientHints & AvnSystemChrome) || (_extendClientHints & AvnPreferSystemChrome); |
|
|
|
_isClientAreaExtended = enable; |
|
|
|
|
|
|
|
if (wantsTitleBar) |
|
|
|
if(enable) |
|
|
|
{ |
|
|
|
[StandardContainer ShowTitleBar:true]; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
[StandardContainer ShowTitleBar:false]; |
|
|
|
} |
|
|
|
|
|
|
|
if(_extendClientHints & AvnOSXThickTitleBar) |
|
|
|
{ |
|
|
|
Window.toolbar = [NSToolbar new]; |
|
|
|
Window.toolbar.showsBaselineSeparator = false; |
|
|
|
Window.titleVisibility = NSWindowTitleHidden; |
|
|
|
|
|
|
|
[Window setTitlebarAppearsTransparent:true]; |
|
|
|
|
|
|
|
auto wantsTitleBar = (_extendClientHints & AvnSystemChrome) || (_extendClientHints & AvnPreferSystemChrome); |
|
|
|
|
|
|
|
if (wantsTitleBar) |
|
|
|
{ |
|
|
|
[StandardContainer ShowTitleBar:true]; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
[StandardContainer ShowTitleBar:false]; |
|
|
|
} |
|
|
|
|
|
|
|
if(_extendClientHints & AvnOSXThickTitleBar) |
|
|
|
{ |
|
|
|
Window.toolbar = [NSToolbar new]; |
|
|
|
Window.toolbar.showsBaselineSeparator = false; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
Window.toolbar = nullptr; |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
Window.titleVisibility = NSWindowTitleVisible; |
|
|
|
Window.toolbar = nullptr; |
|
|
|
[Window setTitlebarAppearsTransparent:false]; |
|
|
|
View.layer.zPosition = 0; |
|
|
|
} |
|
|
|
|
|
|
|
[Window setIsExtended:enable]; |
|
|
|
|
|
|
|
HideOrShowTrafficLights(); |
|
|
|
|
|
|
|
UpdateStyle(); |
|
|
|
|
|
|
|
return S_OK; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
Window.titleVisibility = NSWindowTitleVisible; |
|
|
|
Window.toolbar = nullptr; |
|
|
|
[Window setTitlebarAppearsTransparent:false]; |
|
|
|
View.layer.zPosition = 0; |
|
|
|
} |
|
|
|
|
|
|
|
[Window setIsExtended:enable]; |
|
|
|
|
|
|
|
HideOrShowTrafficLights(); |
|
|
|
|
|
|
|
UpdateStyle(); |
|
|
|
|
|
|
|
return S_OK; |
|
|
|
} |
|
|
|
|
|
|
|
virtual HRESULT SetExtendClientAreaHints (AvnExtendClientAreaChromeHints hints) override |
|
|
|
{ |
|
|
|
_extendClientHints = hints; |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
SetExtendClientArea(_isClientAreaExtended); |
|
|
|
return S_OK; |
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
_extendClientHints = hints; |
|
|
|
|
|
|
|
SetExtendClientArea(_isClientAreaExtended); |
|
|
|
return S_OK; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
virtual HRESULT GetExtendTitleBarHeight (double*ret) override |
|
|
|
{ |
|
|
|
if(ret == nullptr) |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
return E_POINTER; |
|
|
|
if(ret == nullptr) |
|
|
|
{ |
|
|
|
return E_POINTER; |
|
|
|
} |
|
|
|
|
|
|
|
*ret = [Window getExtendedTitleBarHeight]; |
|
|
|
|
|
|
|
return S_OK; |
|
|
|
} |
|
|
|
|
|
|
|
*ret = [Window getExtendedTitleBarHeight]; |
|
|
|
|
|
|
|
return S_OK; |
|
|
|
} |
|
|
|
|
|
|
|
virtual HRESULT SetExtendTitleBarHeight (double value) override |
|
|
|
{ |
|
|
|
[StandardContainer SetTitleBarHeightHint:value]; |
|
|
|
return S_OK; |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
[StandardContainer SetTitleBarHeightHint:value]; |
|
|
|
return S_OK; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void EnterFullScreenMode () |
|
|
|
@ -996,8 +1099,15 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT SetWindowState (AvnWindowState state) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(Window == nullptr) |
|
|
|
{ |
|
|
|
return S_OK; |
|
|
|
} |
|
|
|
|
|
|
|
if(_actualWindowState == state) |
|
|
|
{ |
|
|
|
return S_OK; |
|
|
|
@ -1957,7 +2067,7 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent |
|
|
|
{ |
|
|
|
if(![self windowShouldClose:self]) return; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
[self close]; |
|
|
|
} |
|
|
|
|
|
|
|
|