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/. */
5
6 #include "gfxPlatform.h"
7 #include "HeadlessCompositorWidget.h"
8 #include "HeadlessWidget.h"
9 #include "mozilla/widget/PlatformWidgetTypes.h"
10
11 #include "InProcessWinCompositorWidget.h"
12 #include "nsWindow.h"
13
14 namespace mozilla {
15 namespace widget {
16
CreateLocal(const CompositorWidgetInitData & aInitData,const layers::CompositorOptions & aOptions,nsIWidget * aWidget)17 /* static */ RefPtr<CompositorWidget> CompositorWidget::CreateLocal(
18 const CompositorWidgetInitData& aInitData,
19 const layers::CompositorOptions& aOptions, nsIWidget* aWidget) {
20 if (aInitData.type() ==
21 CompositorWidgetInitData::THeadlessCompositorWidgetInitData) {
22 return new HeadlessCompositorWidget(
23 aInitData.get_HeadlessCompositorWidgetInitData(), aOptions,
24 static_cast<HeadlessWidget*>(aWidget));
25 } else {
26 return new InProcessWinCompositorWidget(
27 aInitData.get_WinCompositorWidgetInitData(), aOptions,
28 static_cast<nsWindow*>(aWidget));
29 }
30 }
31
InProcessWinCompositorWidget(const WinCompositorWidgetInitData & aInitData,const layers::CompositorOptions & aOptions,nsWindow * aWindow)32 InProcessWinCompositorWidget::InProcessWinCompositorWidget(
33 const WinCompositorWidgetInitData& aInitData,
34 const layers::CompositorOptions& aOptions, nsWindow* aWindow)
35 : WinCompositorWidget(aInitData, aOptions), mWindow(aWindow) {
36 MOZ_ASSERT(mWindow);
37 }
38
OnDestroyWindow()39 void InProcessWinCompositorWidget::OnDestroyWindow() {
40 EnterPresentLock();
41 WinCompositorWidget::OnDestroyWindow();
42 LeavePresentLock();
43 }
44
UpdateTransparency(nsTransparencyMode aMode)45 void InProcessWinCompositorWidget::UpdateTransparency(
46 nsTransparencyMode aMode) {
47 EnterPresentLock();
48 WinCompositorWidget::UpdateTransparency(aMode);
49 LeavePresentLock();
50 }
51
ClearTransparentWindow()52 void InProcessWinCompositorWidget::ClearTransparentWindow() {
53 EnterPresentLock();
54 WinCompositorWidget::ClearTransparentWindow();
55 LeavePresentLock();
56 }
57
RealWidget()58 nsIWidget* InProcessWinCompositorWidget::RealWidget() { return mWindow; }
59
ObserveVsync(VsyncObserver * aObserver)60 void InProcessWinCompositorWidget::ObserveVsync(VsyncObserver* aObserver) {
61 if (RefPtr<CompositorVsyncDispatcher> cvd =
62 mWindow->GetCompositorVsyncDispatcher()) {
63 cvd->SetCompositorVsyncObserver(aObserver);
64 }
65 }
66
67 } // namespace widget
68 } // namespace mozilla
69