WindowImpl.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. //
  2. // Created by Dan Walmsley on 04/05/2022.
  3. // Copyright (c) 2022 Avalonia. All rights reserved.
  4. //
  5. #ifndef AVALONIA_NATIVE_OSX_WINDOWIMPL_H
  6. #define AVALONIA_NATIVE_OSX_WINDOWIMPL_H
  7. #import "WindowBaseImpl.h"
  8. #include "IWindowStateChanged.h"
  9. class WindowImpl : public virtual WindowBaseImpl, public virtual IAvnWindow, public IWindowStateChanged
  10. {
  11. public:
  12. FORWARD_IUNKNOWN()
  13. BEGIN_INTERFACE_MAP()
  14. INHERIT_INTERFACE_MAP(WindowBaseImpl)
  15. INTERFACE_MAP_ENTRY(IAvnWindow, IID_IAvnWindow)
  16. END_INTERFACE_MAP()
  17. virtual ~WindowImpl()
  18. {
  19. }
  20. ComPtr<IAvnWindowEvents> WindowEvents;
  21. WindowImpl(IAvnWindowEvents* events);
  22. virtual HRESULT Show (bool activate, bool isDialog) override;
  23. virtual HRESULT SetEnabled (bool enable) override;
  24. void StartStateTransition () override ;
  25. void EndStateTransition () override ;
  26. SystemDecorations Decorations () override ;
  27. AvnWindowState WindowState () override ;
  28. void WindowStateChanged () override ;
  29. bool UndecoratedIsMaximized ();
  30. bool IsZoomed ();
  31. void DoZoom();
  32. virtual HRESULT SetCanResize(bool value) override;
  33. virtual HRESULT SetCanMinimize(bool value) override;
  34. virtual HRESULT SetCanMaximize(bool value) override;
  35. virtual HRESULT SetDecorations(SystemDecorations value) override;
  36. virtual HRESULT SetTitle (char* utf8title) override;
  37. virtual HRESULT SetTitleBarColor(AvnColor color) override;
  38. virtual HRESULT GetWindowState (AvnWindowState*ret) override;
  39. virtual HRESULT TakeFocusFromChildren () override;
  40. virtual HRESULT SetExtendClientArea (bool enable) override;
  41. virtual HRESULT SetExtendClientAreaHints (AvnExtendClientAreaChromeHints hints) override;
  42. virtual HRESULT GetExtendTitleBarHeight (double*ret) override;
  43. virtual HRESULT SetExtendTitleBarHeight (double value) override;
  44. virtual HRESULT GetWindowZOrder (long* zOrder) override;
  45. void EnterFullScreenMode ();
  46. void ExitFullScreenMode ();
  47. virtual HRESULT SetWindowState (AvnWindowState state) override;
  48. virtual HRESULT SetWindowState (AvnWindowState state, bool shouldResize);
  49. virtual bool IsModal() override;
  50. bool IsOwned();
  51. virtual void BringToFront () override;
  52. bool CanBecomeKeyWindow ();
  53. bool CanZoom() override { return _isEnabled && _canMaximize; }
  54. protected:
  55. virtual NSWindowStyleMask CalculateStyleMask() override;
  56. virtual void UpdateAppearance() override;
  57. private:
  58. void ZOrderChildWindows();
  59. void OnInitialiseNSWindow();
  60. NSString *_lastTitle;
  61. bool _isEnabled;
  62. bool _canResize;
  63. bool _canMinimize;
  64. bool _canMaximize;
  65. bool _fullScreenActive;
  66. SystemDecorations _decorations;
  67. AvnWindowState _lastWindowState;
  68. AvnWindowState _actualWindowState;
  69. bool _inSetWindowState;
  70. NSRect _preZoomSize;
  71. bool _transitioningWindowState;
  72. bool _isClientAreaExtended;
  73. AvnExtendClientAreaChromeHints _extendClientHints;
  74. bool _isModal;
  75. };
  76. #endif //AVALONIA_NATIVE_OSX_WINDOWIMPL_H