mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-09 00:11:44 +00:00
![Chris Martin](/assets/img/avatar_default.png)
CompositorWidgetChild is about to be responsible for creating, destroying, and presenting a shared buffer that CompositorWidgetParent will draw into. To do this, it will need the window handle, transparency mode changes, window size changes, and window size mode changes. Its creation is also about to become fallible, so it needs a separate initialization routine. Differential Revision: https://phabricator.services.mozilla.com/D57430 --HG-- extra : moz-landing-system : lando
100 lines
3.1 KiB
C++
100 lines
3.1 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef widget_windows_WinCompositorWidget_h
|
|
#define widget_windows_WinCompositorWidget_h
|
|
|
|
#include "CompositorWidget.h"
|
|
#include "gfxASurface.h"
|
|
#include "mozilla/Atomics.h"
|
|
#include "mozilla/gfx/CriticalSection.h"
|
|
#include "mozilla/gfx/Point.h"
|
|
#include "mozilla/layers/LayersTypes.h"
|
|
#include "mozilla/Mutex.h"
|
|
#include "mozilla/widget/WinCompositorWindowThread.h"
|
|
#include "FxROutputHandler.h"
|
|
#include "nsIWidget.h"
|
|
|
|
class nsWindow;
|
|
|
|
namespace mozilla {
|
|
namespace widget {
|
|
|
|
class PlatformCompositorWidgetDelegate : public CompositorWidgetDelegate {
|
|
public:
|
|
// Callbacks for nsWindow.
|
|
virtual void EnterPresentLock() = 0;
|
|
virtual void LeavePresentLock() = 0;
|
|
virtual void OnDestroyWindow() = 0;
|
|
virtual bool OnWindowResize(const LayoutDeviceIntSize& aSize) = 0;
|
|
virtual void OnWindowModeChange(nsSizeMode aSizeMode) = 0;
|
|
|
|
// Transparency handling.
|
|
virtual void UpdateTransparency(nsTransparencyMode aMode) = 0;
|
|
virtual void ClearTransparentWindow() = 0;
|
|
|
|
// CompositorWidgetDelegate Overrides
|
|
|
|
PlatformCompositorWidgetDelegate* AsPlatformSpecificDelegate() override {
|
|
return this;
|
|
}
|
|
};
|
|
|
|
class WinCompositorWidgetInitData;
|
|
|
|
// This is the Windows-specific implementation of CompositorWidget. For
|
|
// the most part it only requires an HWND, however it maintains extra state
|
|
// for transparent windows, as well as for synchronizing WM_SETTEXT messages
|
|
// with the compositor.
|
|
class WinCompositorWidget : public CompositorWidget {
|
|
public:
|
|
WinCompositorWidget(const WinCompositorWidgetInitData& aInitData,
|
|
const layers::CompositorOptions& aOptions);
|
|
~WinCompositorWidget() override;
|
|
|
|
// CompositorWidget Overrides
|
|
|
|
uintptr_t GetWidgetKey() override;
|
|
WinCompositorWidget* AsWindows() override { return this; }
|
|
|
|
HWND GetHwnd() const {
|
|
return mCompositorWnds.mCompositorWnd ? mCompositorWnds.mCompositorWnd
|
|
: mWnd;
|
|
}
|
|
|
|
HWND GetCompositorHwnd() const { return mCompositorWnds.mCompositorWnd; }
|
|
|
|
void EnsureCompositorWindow();
|
|
void DestroyCompositorWindow();
|
|
void UpdateCompositorWndSizeIfNecessary();
|
|
|
|
void RequestFxrOutput();
|
|
bool HasFxrOutputHandler() const { return mFxrHandler != nullptr; }
|
|
FxROutputHandler* GetFxrOutputHandler() const { return mFxrHandler.get(); }
|
|
|
|
virtual bool HasGlass() const = 0;
|
|
|
|
virtual void UpdateCompositorWnd(const HWND aCompositorWnd,
|
|
const HWND aParentWnd) = 0;
|
|
virtual void SetRootLayerTreeID(const layers::LayersId& aRootLayerTreeId) = 0;
|
|
|
|
protected:
|
|
bool mSetParentCompleted;
|
|
|
|
private:
|
|
uintptr_t mWidgetKey;
|
|
HWND mWnd;
|
|
|
|
WinCompositorWnds mCompositorWnds;
|
|
LayoutDeviceIntSize mLastCompositorWndSize;
|
|
|
|
UniquePtr<FxROutputHandler> mFxrHandler;
|
|
};
|
|
|
|
} // namespace widget
|
|
} // namespace mozilla
|
|
|
|
#endif // widget_windows_WinCompositorWidget_h
|