|
|
|
@ -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,15 +115,19 @@ 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]; |
|
|
|
[NSApp activateIgnoringOtherApps:YES]; |
|
|
|
} |
|
|
|
@ -123,7 +135,6 @@ public: |
|
|
|
{ |
|
|
|
[Window orderFront: Window]; |
|
|
|
} |
|
|
|
[Window setTitle:_lastTitle]; |
|
|
|
|
|
|
|
_shown = true; |
|
|
|
|
|
|
|
@ -138,6 +149,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT Hide () override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(Window != nullptr) |
|
|
|
@ -152,6 +165,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT Activate () override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(Window != nullptr) |
|
|
|
@ -166,6 +181,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT SetTopMost (bool value) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
[Window setLevel: value ? NSFloatingWindowLevel : NSNormalWindowLevel]; |
|
|
|
@ -176,11 +193,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 +211,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT GetClientSize(AvnSize* ret) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(ret == nullptr) |
|
|
|
@ -219,6 +243,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT GetScaling (double* ret) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(ret == nullptr) |
|
|
|
@ -237,6 +263,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT SetMinMaxSize (AvnSize minSize, AvnSize maxSize) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
[Window setMinSize: ToNSSize(minSize)]; |
|
|
|
@ -248,6 +276,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT Resize(double x, double y) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
auto maxSize = [Window maxSize]; |
|
|
|
@ -287,6 +317,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT Invalidate (AvnRect rect) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
[View setNeedsDisplayInRect:[View frame]]; |
|
|
|
@ -297,6 +329,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT SetMainMenu(IAvnMenu* menu) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
_mainMenu = menu; |
|
|
|
|
|
|
|
auto nativeMenu = dynamic_cast<AvnAppMenu*>(menu); |
|
|
|
@ -315,6 +349,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT BeginMoveDrag () override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
auto lastEvent = [View lastMouseDownEvent]; |
|
|
|
@ -332,11 +368,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 +397,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT SetPosition (AvnPoint point) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
lastPositionSet = point; |
|
|
|
@ -368,6 +410,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT PointToClient (AvnPoint point, AvnPoint* ret) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(ret == nullptr) |
|
|
|
@ -386,6 +430,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT PointToScreen (AvnPoint point, AvnPoint* ret) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(ret == nullptr) |
|
|
|
@ -403,12 +449,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 +488,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT CreateGlRenderTarget(IAvnGlSurfaceRenderTarget** ppv) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
if(View == NULL) |
|
|
|
return E_FAIL; |
|
|
|
*ppv = [renderTarget createSurfaceRenderTarget]; |
|
|
|
@ -446,6 +498,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT CreateNativeControlHost(IAvnNativeControlHost** retOut) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
if(View == NULL) |
|
|
|
return E_FAIL; |
|
|
|
*retOut = ::CreateNativeControlHost(View); |
|
|
|
@ -454,6 +508,8 @@ public: |
|
|
|
|
|
|
|
virtual HRESULT SetBlurEnabled (bool enable) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
[StandardContainer ShowBlur:enable]; |
|
|
|
|
|
|
|
return S_OK; |
|
|
|
@ -463,6 +519,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 +622,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 +653,10 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT Show (bool activate) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
{ |
|
|
|
WindowBaseImpl::Show(activate); |
|
|
|
|
|
|
|
HideOrShowTrafficLights(); |
|
|
|
@ -602,6 +667,8 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT SetEnabled (bool enable) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
[Window setEnabled:enable]; |
|
|
|
@ -611,6 +678,8 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT SetParent (IAvnWindow* parent) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(parent == nullptr) |
|
|
|
@ -722,6 +791,8 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT SetCanResize(bool value) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
_canResize = value; |
|
|
|
@ -732,6 +803,8 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT SetDecorations(SystemDecorations value) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
auto currentWindowState = _lastWindowState; |
|
|
|
@ -797,6 +870,8 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT SetTitle (char* utf8title) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
_lastTitle = [NSString stringWithUTF8String:(const char*)utf8title]; |
|
|
|
@ -808,6 +883,8 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT SetTitleBarColor(AvnColor color) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
float a = (float)color.Alpha / 255.0f; |
|
|
|
@ -837,6 +914,8 @@ private: |
|
|
|
|
|
|
|
virtual HRESULT GetWindowState (AvnWindowState*ret) override |
|
|
|
{ |
|
|
|
START_COM_CALL; |
|
|
|
|
|
|
|
@autoreleasepool |
|
|
|
{ |
|
|
|
if(ret == nullptr) |
|
|
|
@ -870,86 +949,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 +1082,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 +2037,7 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent |
|
|
|
{ |
|
|
|
if(![self windowShouldClose:self]) return; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
[self close]; |
|
|
|
} |
|
|
|
|
|
|
|
|