Backed out changeset 2450366cf7ca (bug 1891629) for causing win msix mochitest failures
[gecko.git] / widget / windows / WinCompositorWidget.h
blobdf5d443067b8bed3142bfe13ebf4bd2f69c8660d
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #ifndef widget_windows_WinCompositorWidget_h
7 #define widget_windows_WinCompositorWidget_h
9 #include "CompositorWidget.h"
10 #include "mozilla/Atomics.h"
11 #include "mozilla/gfx/CriticalSection.h"
12 #include "mozilla/gfx/Point.h"
13 #include "mozilla/layers/LayersTypes.h"
14 #include "mozilla/Mutex.h"
15 #include "mozilla/widget/WinCompositorWindowThread.h"
16 #include "FxROutputHandler.h"
17 #include "nsIWidget.h"
19 class nsWindow;
21 namespace mozilla::widget {
23 class PlatformCompositorWidgetDelegate : public CompositorWidgetDelegate {
24 public:
25 // Callbacks for nsWindow.
26 virtual void EnterPresentLock() = 0;
27 virtual void LeavePresentLock() = 0;
28 virtual void OnDestroyWindow() = 0;
29 virtual bool OnWindowResize(const LayoutDeviceIntSize& aSize) = 0;
30 virtual void OnWindowModeChange(nsSizeMode aSizeMode) = 0;
32 // Transparency handling.
33 virtual void UpdateTransparency(TransparencyMode aMode) = 0;
34 virtual void ClearTransparentWindow() = 0;
36 // Deliver visibility info
37 virtual void NotifyVisibilityUpdated(nsSizeMode aSizeMode,
38 bool aIsFullyOccluded) = 0;
40 // CompositorWidgetDelegate Overrides
42 PlatformCompositorWidgetDelegate* AsPlatformSpecificDelegate() override {
43 return this;
47 class WinCompositorWidgetInitData;
49 // This is the Windows-specific implementation of CompositorWidget. For
50 // the most part it only requires an HWND, however it maintains extra state
51 // for transparent windows, as well as for synchronizing WM_SETTEXT messages
52 // with the compositor.
53 class WinCompositorWidget : public CompositorWidget {
54 public:
55 WinCompositorWidget(const WinCompositorWidgetInitData& aInitData,
56 const layers::CompositorOptions& aOptions);
57 ~WinCompositorWidget() override;
59 // CompositorWidget Overrides
61 uintptr_t GetWidgetKey() override;
62 WinCompositorWidget* AsWindows() override { return this; }
64 HWND GetHwnd() const {
65 return mCompositorWnds.mCompositorWnd ? mCompositorWnds.mCompositorWnd
66 : mWnd;
69 HWND GetCompositorHwnd() const { return mCompositorWnds.mCompositorWnd; }
71 void EnsureCompositorWindow();
72 void DestroyCompositorWindow();
73 void UpdateCompositorWndSizeIfNecessary();
75 void RequestFxrOutput();
76 bool HasFxrOutputHandler() const { return !!mFxrHandler; }
77 FxROutputHandler* GetFxrOutputHandler() const { return mFxrHandler.get(); }
79 virtual nsSizeMode GetWindowSizeMode() const = 0;
80 virtual bool GetWindowIsFullyOccluded() const = 0;
82 virtual void UpdateCompositorWnd(const HWND aCompositorWnd,
83 const HWND aParentWnd) = 0;
84 virtual void SetRootLayerTreeID(const layers::LayersId& aRootLayerTreeId) = 0;
86 protected:
87 bool mSetParentCompleted;
89 private:
90 uintptr_t mWidgetKey;
91 HWND mWnd;
93 WinCompositorWnds mCompositorWnds;
94 LayoutDeviceIntSize mLastCompositorWndSize;
96 UniquePtr<FxROutputHandler> mFxrHandler;
99 } // namespace mozilla::widget
101 #endif // widget_windows_WinCompositorWidget_h