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 #ifndef widget_headless_HeadlessCompositorWidget_h
7 #define widget_headless_HeadlessCompositorWidget_h
8 
9 #include "mozilla/widget/CompositorWidget.h"
10 
11 #include "HeadlessWidget.h"
12 
13 namespace mozilla {
14 namespace widget {
15 
16 class HeadlessCompositorWidgetInitData;
17 
18 class HeadlessCompositorWidget final : public CompositorWidget,
19                                        public CompositorWidgetDelegate {
20  public:
21   HeadlessCompositorWidget(const HeadlessCompositorWidgetInitData& aInitData,
22                            const layers::CompositorOptions& aOptions,
23                            HeadlessWidget* aWindow);
24 
25   void NotifyClientSizeChanged(const LayoutDeviceIntSize& aClientSize);
26 
27   // CompositorWidget Overrides
28 
29   uintptr_t GetWidgetKey() override;
30 
31   LayoutDeviceIntSize GetClientSize() override;
32 
33   nsIWidget* RealWidget() override;
AsDelegate()34   CompositorWidgetDelegate* AsDelegate() override { return this; }
35 
36   void ObserveVsync(VsyncObserver* aObserver) override;
37 
38   // CompositorWidgetDelegate Overrides
39 
AsHeadlessCompositorWidget()40   HeadlessCompositorWidget* AsHeadlessCompositorWidget() override {
41     return this;
42   }
43 
44  private:
45   HeadlessWidget* mWidget;
46 
47   LayoutDeviceIntSize mClientSize;
48 };
49 
50 }  // namespace widget
51 }  // namespace mozilla
52 
53 #endif  // widget_headless_HeadlessCompositor_h
54