1 // Copyright 2018 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef UI_OZONE_PLATFORM_SCENIC_SCENIC_SCREEN_H_
6 #define UI_OZONE_PLATFORM_SCENIC_SCENIC_SCREEN_H_
7 
8 #include <vector>
9 
10 #include "base/macros.h"
11 #include "base/memory/weak_ptr.h"
12 #include "base/observer_list.h"
13 #include "ui/ozone/public/ozone_platform.h"
14 #include "ui/ozone/public/platform_screen.h"
15 
16 namespace ui {
17 
18 // A PlatformScreen implementation for Scenic.
19 class ScenicScreen : public PlatformScreen {
20  public:
21   ScenicScreen();
22   ~ScenicScreen() override;
23 
24   // Processes window state change events for the ScenicWindow |window_id_|.
25   void OnWindowAdded(int32_t window_id);
26   void OnWindowRemoved(int32_t window_id);
27   void OnWindowMetrics(int32_t window_id, float device_pixel_ratio);
28   void OnWindowBoundsChanged(int32_t window_id, gfx::Rect bounds);
29 
30   base::WeakPtr<ScenicScreen> GetWeakPtr();
31 
32   // display::Screen implementation.
33   const std::vector<display::Display>& GetAllDisplays() const override;
34   display::Display GetPrimaryDisplay() const override;
35   display::Display GetDisplayForAcceleratedWidget(
36       gfx::AcceleratedWidget widget) const override;
37   gfx::Point GetCursorScreenPoint() const override;
38   gfx::AcceleratedWidget GetAcceleratedWidgetAtScreenPoint(
39       const gfx::Point& point) const override;
40   display::Display GetDisplayNearestPoint(
41       const gfx::Point& point) const override;
42   display::Display GetDisplayMatching(
43       const gfx::Rect& match_rect) const override;
44   void AddObserver(display::DisplayObserver* observer) override;
45   void RemoveObserver(display::DisplayObserver* observer) override;
46 
47  private:
48   using DisplayVector = std::vector<display::Display>;
49 
50   DisplayVector displays_;
51 
52   base::ObserverList<display::DisplayObserver> observers_;
53 
54   base::WeakPtrFactory<ScenicScreen> weak_factory_;
55 
56   DISALLOW_COPY_AND_ASSIGN(ScenicScreen);
57 };
58 
59 }  // namespace ui
60 
61 #endif  // UI_OZONE_PLATFORM_SCENIC_SCENIC_SCREEN_H_
62