15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UI_AURA_TEST_TEST_SCREEN_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_AURA_TEST_TEST_SCREEN_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/window_observer.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/display.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/screen.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace gfx {
1403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class Insets;
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Rect;
1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class Transform;
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura {
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Window;
21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class WindowTreeHost;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A minimal, testing Aura implementation of gfx::Screen.
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TestScreen : public gfx::Screen,
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                   public WindowObserver {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
276d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  // Creates a gfx::Screen of the specified size. If no size is specified, then
286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  // creates a 800x600 screen. |size| is in physical pixels.
296d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  static TestScreen* Create(const gfx::Size& size);
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Creates a TestScreen that uses fullscreen for the display.
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static TestScreen* CreateFullscreen();
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~TestScreen();
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  WindowTreeHost* CreateHostForPrimaryDisplay();
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetDeviceScaleFactor(float device_scale_fator);
3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void SetDisplayRotation(gfx::Display::Rotation rotation);
3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void SetUIScale(float ui_scale);
3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  void SetWorkAreaInsets(const gfx::Insets& insets);
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  gfx::Transform GetRotationTransform() const;
4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  gfx::Transform GetUIScaleTransform() const;
4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // WindowObserver overrides:
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnWindowBoundsChanged(Window* window,
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                     const gfx::Rect& old_bounds,
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                     const gfx::Rect& new_bounds) OVERRIDE;
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnWindowDestroying(Window* window) OVERRIDE;
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // gfx::Screen overrides:
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsDIPEnabled() OVERRIDE;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual gfx::Point GetCursorScreenPoint() OVERRIDE;
54424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual gfx::NativeWindow GetWindowUnderCursor() OVERRIDE;
55424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual gfx::NativeWindow GetWindowAtScreenPoint(const gfx::Point& point)
56424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      OVERRIDE;
57424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual int GetNumDisplays() const OVERRIDE;
58424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual std::vector<gfx::Display> GetAllDisplays() const OVERRIDE;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual gfx::Display GetDisplayNearestWindow(
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      gfx::NativeView view) const OVERRIDE;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual gfx::Display GetDisplayNearestPoint(
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const gfx::Point& point) const OVERRIDE;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual gfx::Display GetDisplayMatching(
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const gfx::Rect& match_rect) const OVERRIDE;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual gfx::Display GetPrimaryDisplay() const OVERRIDE;
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void AddObserver(gfx::DisplayObserver* observer) OVERRIDE;
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void RemoveObserver(gfx::DisplayObserver* observer) OVERRIDE;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  explicit TestScreen(const gfx::Rect& screen_bounds);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  aura::WindowTreeHost* host_;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Display display_;
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  float ui_scale_;
7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TestScreen);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace aura
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // UI_AURA_TEST_TEST_SCREEN_H_
84