910e62b5创建于 1月15日历史提交
// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef UI_DISPLAY_TEST_TEST_SCREEN_H_
#define UI_DISPLAY_TEST_TEST_SCREEN_H_

#include "build/build_config.h"
#include "ui/display/display.h"
#include "ui/display/screen_base.h"
#include "ui/display/tablet_state.h"

namespace display::test {

// A dummy implementation of Screen that contains a single
// Display only. The contained Display can be accessed and modified via
// TestScreen::display().
//
// NOTE: Adding and removing DisplayObserver's are no-ops and observers
// will NOT be notified ever.
class TestScreen : public ScreenBase {
 public:
  static constexpr gfx::Rect kDefaultScreenBounds = gfx::Rect(0, 0, 800, 600);

  static TestScreen* Get();

  // TODO(weili): Split this into a protected no-argument constructor for
  // subclass uses and the public one with gfx::Size argument.
  explicit TestScreen(bool create_display = true, bool register_screen = false);
  TestScreen(const TestScreen&) = delete;
  TestScreen& operator=(const TestScreen&) = delete;
  ~TestScreen() override;

  // Sets the fake cursor location for the TestScreen.
  void set_cursor_screen_point(const gfx::Point& point);

  // ScreenBase:
  gfx::Point GetCursorScreenPoint() override;
  bool IsWindowUnderCursor(gfx::NativeWindow window) override;
  gfx::NativeWindow GetWindowAtScreenPoint(const gfx::Point& point) override;
  Display GetDisplayNearestWindow(gfx::NativeWindow window) const override;
  void SetCursorScreenPointForTesting(const gfx::Point& point) override;

#if BUILDFLAG(IS_CHROMEOS)
  TabletState GetTabletState() const override;
  void OverrideTabletStateForTesting(TabletState state);
#endif  // BUILDFLAG(IS_CHROMEOS)

 private:
  gfx::Point cursor_screen_point_;
  bool register_screen_ = false;
#if BUILDFLAG(IS_CHROMEOS)
  TabletState state_ = TabletState::kInClamshellMode;
#endif  // BUILDFLAG(IS_CHROMEOS)
};

}  // namespace display::test

#endif  // UI_DISPLAY_TEST_TEST_SCREEN_H_