WindowBaseImpl.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. //
  2. // Created by Dan Walmsley on 04/05/2022.
  3. // Copyright (c) 2022 Avalonia. All rights reserved.
  4. //
  5. #ifndef AVALONIA_NATIVE_OSX_WINDOWBASEIMPL_H
  6. #define AVALONIA_NATIVE_OSX_WINDOWBASEIMPL_H
  7. #include "rendertarget.h"
  8. #include "INSWindowHolder.h"
  9. @class AutoFitContentView;
  10. @class AvnMenu;
  11. @protocol AvnWindowProtocol;
  12. class WindowBaseImpl : public virtual ComObject,
  13. public virtual IAvnWindowBase,
  14. public INSWindowHolder {
  15. public:
  16. FORWARD_IUNKNOWN()
  17. BEGIN_INTERFACE_MAP()
  18. INTERFACE_MAP_ENTRY(IAvnWindowBase, IID_IAvnWindowBase)
  19. END_INTERFACE_MAP()
  20. virtual ~WindowBaseImpl();
  21. WindowBaseImpl(IAvnWindowBaseEvents *events, IAvnGlContext *gl, bool usePanel = false);
  22. virtual HRESULT ObtainNSWindowHandle(void **ret) override;
  23. virtual HRESULT ObtainNSWindowHandleRetained(void **ret) override;
  24. virtual HRESULT ObtainNSViewHandle(void **ret) override;
  25. virtual HRESULT ObtainNSViewHandleRetained(void **ret) override;
  26. virtual NSWindow *GetNSWindow() override;
  27. virtual AvnView *GetNSView() override;
  28. virtual HRESULT Show(bool activate, bool isDialog) override;
  29. virtual bool IsShown ();
  30. virtual bool ShouldTakeFocusOnShow();
  31. virtual HRESULT Hide() override;
  32. virtual HRESULT Activate() override;
  33. virtual HRESULT SetTopMost(bool value) override;
  34. virtual HRESULT Close() override;
  35. virtual HRESULT GetClientSize(AvnSize *ret) override;
  36. virtual HRESULT GetFrameSize(AvnSize *ret) override;
  37. virtual HRESULT GetScaling(double *ret) override;
  38. virtual HRESULT SetMinMaxSize(AvnSize minSize, AvnSize maxSize) override;
  39. virtual HRESULT Resize(double x, double y, AvnPlatformResizeReason reason) override;
  40. virtual HRESULT Invalidate(__attribute__((unused)) AvnRect rect) override;
  41. virtual HRESULT SetMainMenu(IAvnMenu *menu) override;
  42. virtual HRESULT BeginMoveDrag() override;
  43. virtual HRESULT BeginResizeDrag(__attribute__((unused)) AvnWindowEdge edge) override;
  44. virtual HRESULT GetPosition(AvnPoint *ret) override;
  45. virtual HRESULT SetPosition(AvnPoint point) override;
  46. virtual HRESULT PointToClient(AvnPoint point, AvnPoint *ret) override;
  47. virtual HRESULT PointToScreen(AvnPoint point, AvnPoint *ret) override;
  48. virtual HRESULT ThreadSafeSetSwRenderedFrame(AvnFramebuffer *fb, IUnknown *dispose) override;
  49. virtual HRESULT SetCursor(IAvnCursor *cursor) override;
  50. virtual void UpdateCursor();
  51. virtual HRESULT CreateGlRenderTarget(IAvnGlSurfaceRenderTarget **ppv) override;
  52. virtual HRESULT CreateNativeControlHost(IAvnNativeControlHost **retOut) override;
  53. virtual HRESULT SetBlurEnabled(bool enable) override;
  54. virtual HRESULT BeginDragAndDropOperation(AvnDragDropEffects effects, AvnPoint point,
  55. IAvnClipboard *clipboard, IAvnDndResultCallback *cb,
  56. void *sourceHandle) override;
  57. virtual bool IsDialog();
  58. id<AvnWindowProtocol> GetWindowProtocol ();
  59. virtual void BringToFront ();
  60. protected:
  61. virtual NSWindowStyleMask GetStyle();
  62. void UpdateStyle();
  63. private:
  64. void CreateNSWindow (bool isDialog);
  65. void CleanNSWindow ();
  66. NSCursor *cursor;
  67. ComPtr<IAvnGlContext> _glContext;
  68. bool hasPosition;
  69. NSSize lastSize;
  70. NSSize lastMinSize;
  71. NSSize lastMaxSize;
  72. AvnMenu* lastMenu;
  73. bool _inResize;
  74. protected:
  75. AvnPoint lastPositionSet;
  76. AutoFitContentView *StandardContainer;
  77. bool _shown;
  78. public:
  79. NSObject <IRenderTarget> *renderTarget;
  80. NSWindow * Window;
  81. ComPtr<IAvnWindowBaseEvents> BaseEvents;
  82. AvnView *View;
  83. };
  84. #endif //AVALONIA_NATIVE_OSX_WINDOWBASEIMPL_H