1// Copyright (c) 2012 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_AURA_SCREEN_POSITION_CLIENT_H_
6#define UI_AURA_SCREEN_POSITION_CLIENT_H_
7
8#include "ui/aura/aura_export.h"
9#include "ui/aura/window.h"
10
11namespace gfx {
12class Display;
13class Rect;
14}
15
16namespace aura {
17class Window;
18namespace client {
19
20// An interface implemented by an object that changes coordinates within a root
21// Window into system coordinates.
22class AURA_EXPORT ScreenPositionClient {
23 public:
24  virtual ~ScreenPositionClient() {}
25
26  // Converts the |screen_point| from a given |window|'s coordinate space
27  // into screen coordinate space.
28  virtual void ConvertPointToScreen(const Window* window,
29                                    gfx::Point* point) = 0;
30  virtual void ConvertPointFromScreen(const Window* window,
31                                      gfx::Point* point) = 0;
32  // Converts the |screen_point| from root window host's coordinate of
33  // into screen coordinate space.
34  // A typical example of using this function instead of ConvertPointToScreen is
35  // when X's native input is captured by a drag operation.
36  // See the comments for ash::GetRootWindowRelativeToWindow for details.
37  virtual void ConvertHostPointToScreen(Window* root_window,
38                                        gfx::Point* point) = 0;
39  // Sets the bounds of the window. The implementation is responsible
40  // for finding out and translating the right coordinates for the |window|.
41  virtual void SetBounds(Window* window,
42                         const gfx::Rect& bounds,
43                         const gfx::Display& display) = 0;
44};
45
46// Sets/Gets the activation client on the Window.
47AURA_EXPORT void SetScreenPositionClient(Window* root_window,
48                                         ScreenPositionClient* client);
49AURA_EXPORT ScreenPositionClient* GetScreenPositionClient(
50    const Window* root_window);
51
52}  // namespace clients
53}  // namespace aura
54
55#endif  // UI_AURA_SCREEN_POSITION_CLIENT_H_
56