screen_ozone.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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. #ifndef UI_AURA_SCREEN_OZONE_H_
  5. #define UI_AURA_SCREEN_OZONE_H_
  6. #include <memory>
  7. #include <vector>
  8. #include "base/values.h"
  9. #include "build/chromeos_buildflags.h"
  10. #include "ui/aura/aura_export.h"
  11. #include "ui/display/screen.h"
  12. #include "ui/ozone/public/platform_screen.h"
  13. namespace aura {
  14. // display::Screen implementation on top of ui::PlatformScreen provided by
  15. // Ozone.
  16. class AURA_EXPORT ScreenOzone : public display::Screen {
  17. public:
  18. ScreenOzone();
  19. ScreenOzone(const ScreenOzone&) = delete;
  20. ScreenOzone& operator=(const ScreenOzone&) = delete;
  21. ~ScreenOzone() override;
  22. void Initialize();
  23. // display::Screen interface.
  24. gfx::Point GetCursorScreenPoint() override;
  25. bool IsWindowUnderCursor(gfx::NativeWindow window) override;
  26. gfx::NativeWindow GetWindowAtScreenPoint(const gfx::Point& point) override;
  27. gfx::NativeWindow GetLocalProcessWindowAtPoint(
  28. const gfx::Point& point,
  29. const std::set<gfx::NativeWindow>& ignore) override;
  30. int GetNumDisplays() const override;
  31. const std::vector<display::Display>& GetAllDisplays() const override;
  32. display::Display GetDisplayNearestWindow(
  33. gfx::NativeWindow window) const override;
  34. display::Display GetDisplayNearestView(gfx::NativeView view) const override;
  35. display::Display GetDisplayNearestPoint(
  36. const gfx::Point& point) const override;
  37. display::Display GetDisplayMatching(
  38. const gfx::Rect& match_rect) const override;
  39. display::Display GetPrimaryDisplay() const override;
  40. #if BUILDFLAG(IS_CHROMEOS_LACROS) || BUILDFLAG(IS_LINUX)
  41. std::unique_ptr<display::Screen::ScreenSaverSuspender> SuspendScreenSaver()
  42. override;
  43. #endif // BUILDFLAG(IS_CHROMEOS_LACROS) || BUILDFLAG(IS_LINUX)
  44. bool IsScreenSaverActive() const override;
  45. base::TimeDelta CalculateIdleTime() const override;
  46. void AddObserver(display::DisplayObserver* observer) override;
  47. void RemoveObserver(display::DisplayObserver* observer) override;
  48. std::string GetCurrentWorkspace() override;
  49. base::Value::List GetGpuExtraInfo(
  50. const gfx::GpuExtraInfo& gpu_extra_info) override;
  51. // Returns the NativeWindow associated with the AcceleratedWidget.
  52. virtual gfx::NativeWindow GetNativeWindowFromAcceleratedWidget(
  53. gfx::AcceleratedWidget widget) const;
  54. static bool IsOzoneInitialized();
  55. protected:
  56. ui::PlatformScreen* platform_screen() { return platform_screen_.get(); }
  57. private:
  58. #if BUILDFLAG(IS_CHROMEOS_LACROS) || BUILDFLAG(IS_LINUX)
  59. class ScreenSaverSuspenderOzone
  60. : public display::Screen::ScreenSaverSuspender {
  61. public:
  62. explicit ScreenSaverSuspenderOzone(
  63. std::unique_ptr<ui::PlatformScreen::PlatformScreenSaverSuspender>
  64. suspender);
  65. ScreenSaverSuspenderOzone(const ScreenSaverSuspenderOzone&) = delete;
  66. ScreenSaverSuspenderOzone& operator=(const ScreenSaverSuspenderOzone&) =
  67. delete;
  68. ~ScreenSaverSuspenderOzone() override;
  69. private:
  70. std::unique_ptr<ui::PlatformScreen::PlatformScreenSaverSuspender>
  71. suspender_;
  72. };
  73. #endif // BUILDFLAG(IS_CHROMEOS_LACROS) || BUILDFLAG(IS_LINUX)
  74. gfx::AcceleratedWidget GetAcceleratedWidgetForWindow(
  75. aura::Window* window) const;
  76. virtual void OnBeforePlatformScreenInit();
  77. std::unique_ptr<ui::PlatformScreen> platform_screen_;
  78. };
  79. // ScopedScreenOzone creates a ScreenOzone instead of NativeScreen
  80. // (created by `CreateNativeScreen()`) if the screen hasn't been set.
  81. class AURA_EXPORT ScopedScreenOzone : public display::ScopedNativeScreen {
  82. public:
  83. explicit ScopedScreenOzone(const base::Location& location = FROM_HERE);
  84. ScopedScreenOzone(const ScopedScreenOzone&) = delete;
  85. ScopedScreenOzone operator=(const ScopedScreenOzone&) = delete;
  86. ~ScopedScreenOzone() override;
  87. private:
  88. display::Screen* CreateScreen() override;
  89. };
  90. } // namespace aura
  91. #endif // UI_AURA_SCREEN_OZONE_H_