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