|
|
|
@ -54,6 +54,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT ObtainNSWindowHandle(void** ret) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
if (ret == nullptr) |
|
|
|
{ |
|
|
|
return E_POINTER; |
|
|
|
@ -66,6 +68,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT ObtainNSWindowHandleRetained(void** ret) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
if (ret == nullptr) |
|
|
|
{ |
|
|
|
return E_POINTER; |
|
|
|
@ -78,6 +82,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT ObtainNSViewHandle(void** ret) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
if (ret == nullptr) |
|
|
|
{ |
|
|
|
return E_POINTER; |
|
|
|
@ -90,6 +96,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT ObtainNSViewHandleRetained(void** ret) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
if (ret == nullptr) |
|
|
|
{ |
|
|
|
return E_POINTER; |
|
|
|
@ -107,23 +115,27 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT Show(bool activate) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
SetPosition(lastPositionSet); |
|
|
|
UpdateStyle(); |
|
|
|
|
|
|
|
[Window setContentView: StandardContainer]; |
|
|
|
[Window setTitle:_lastTitle]; |
|
|
|
|
|
|
|
if(ShouldTakeFocusOnShow() && activate) |
|
|
|
{ |
|
|
|
[Window orderFront: Window]; |
|
|
|
[Window makeKeyAndOrderFront:Window]; |
|
|
|
[Window makeFirstResponder:View]; |
|
|
|
[NSApp activateIgnoringOtherApps:YES]; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
[Window orderFront: Window]; |
|
|
|
} |
|
|
|
[Window setTitle:_lastTitle]; |
|
|
|
|
|
|
|
_shown = true; |
|
|
|
|
|
|
|
@ -138,6 +150,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT Hide () override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(Window != nullptr) |
|
|
|
@ -152,6 +166,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT Activate () override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(Window != nullptr) |
|
|
|
@ -166,6 +182,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT SetTopMost (bool value) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
[Window setLevel: value ? NSFloatingWindowLevel : NSNormalWindowLevel]; |
|
|
|
@ -176,11 +194,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; |
|
|
|
@ -189,6 +212,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT GetClientSize(AvnSize* ret) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(ret == nullptr) |
|
|
|
@ -219,6 +244,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT GetScaling (double* ret) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(ret == nullptr) |
|
|
|
@ -237,6 +264,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT SetMinMaxSize (AvnSize minSize, AvnSize maxSize) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
[Window setMinSize: ToNSSize(minSize)]; |
|
|
|
@ -248,6 +277,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT Resize(double x, double y) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
auto maxSize = [Window maxSize]; |
|
|
|
@ -287,6 +318,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT Invalidate (AvnRect rect) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
[View setNeedsDisplayInRect:[View frame]]; |
|
|
|
@ -297,6 +330,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT SetMainMenu(IAvnMenu* menu) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
_mainMenu = menu; |
|
|
|
|
|
|
|
auto nativeMenu = dynamic_cast<AvnAppMenu*>(menu); |
|
|
|
@ -315,6 +350,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT BeginMoveDrag () override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
auto lastEvent = [View lastMouseDownEvent]; |
|
|
|
@ -332,11 +369,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) |
|
|
|
@ -357,6 +398,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT SetPosition (AvnPoint point) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
lastPositionSet = point; |
|
|
|
@ -368,6 +411,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT PointToClient (AvnPoint point, AvnPoint* ret) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(ret == nullptr) |
|
|
|
@ -386,6 +431,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT PointToScreen (AvnPoint point, AvnPoint* ret) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(ret == nullptr) |
|
|
|
@ -403,12 +450,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); |
|
|
|
@ -438,6 +489,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT CreateGlRenderTarget(IAvnGlSurfaceRenderTarget** ppv) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
if(View == NULL) |
|
|
|
return E_FAIL; |
|
|
|
*ppv = [renderTarget createSurfaceRenderTarget]; |
|
|
|
@ -446,6 +499,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT CreateNativeControlHost(IAvnNativeControlHost** retOut) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
if(View == NULL) |
|
|
|
return E_FAIL; |
|
|
|
*retOut = ::CreateNativeControlHost(View); |
|
|
|
@ -454,6 +509,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT SetBlurEnabled (bool enable) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
[StandardContainer ShowBlur:enable]; |
|
|
|
|
|
|
|
return S_OK; |
|
|
|
@ -463,6 +520,8 @@ public: |
|
|
|
IAvnClipboard* clipboard, IAvnDndResultCallback* cb, |
|
|
|
void* sourceHandle) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
auto item = TryGetPasteboardItem(clipboard); |
|
|
|
[item setString:@"" forType:GetAvnCustomDataType()]; |
|
|
|
if(item == nil) |
|
|
|
@ -564,6 +623,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]; |
|
|
|
@ -590,8 +654,10 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT Show (bool activate) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
{ |
|
|
|
WindowBaseImpl::Show(activate); |
|
|
|
|
|
|
|
HideOrShowTrafficLights(); |
|
|
|
@ -602,6 +668,8 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT SetEnabled (bool enable) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
[Window setEnabled:enable]; |
|
|
|
@ -611,6 +679,8 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT SetParent (IAvnWindow* parent) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(parent == nullptr) |
|
|
|
@ -722,6 +792,8 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT SetCanResize(bool value) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
_canResize = value; |
|
|
|
@ -732,6 +804,8 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT SetDecorations(SystemDecorations value) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
auto currentWindowState = _lastWindowState; |
|
|
|
@ -797,6 +871,8 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT SetTitle (char* utf8title) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
_lastTitle = [NSString stringWithUTF8String:(const char*)utf8title]; |
|
|
|
@ -808,6 +884,8 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT SetTitleBarColor(AvnColor color) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
float a = (float)color.Alpha / 255.0f; |
|
|
|
@ -837,6 +915,8 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT GetWindowState (AvnWindowState*ret) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(ret == nullptr) |
|
|
|
@ -870,86 +950,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); |
|
|
|
|
|
|
|
if (wantsTitleBar) |
|
|
|
{ |
|
|
|
[StandardContainer ShowTitleBar:true]; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
[StandardContainer ShowTitleBar:false]; |
|
|
|
} |
|
|
|
_isClientAreaExtended = enable; |
|
|
|
|
|
|
|
if(_extendClientHints & AvnOSXThickTitleBar) |
|
|
|
if(enable) |
|
|
|
{ |
|
|
|
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 () |
|
|
|
@ -978,8 +1083,15 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT SetWindowState (AvnWindowState state) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(Window == nullptr) |
|
|
|
{ |
|
|
|
return S_OK; |
|
|
|
} |
|
|
|
|
|
|
|
if(_actualWindowState == state) |
|
|
|
{ |
|
|
|
return S_OK; |
|
|
|
@ -1926,7 +2038,7 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent |
|
|
|
{ |
|
|
|
if(![self windowShouldClose:self]) return; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
[self close]; |
|
|
|
} |
|
|
|
|
|
|
|
|