123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- // Copyright (c) 2012 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "ui/aura/client/screen_position_client.h"
- #include "ui/base/class_property.h"
- #include "ui/gfx/geometry/point_conversions.h"
- DEFINE_UI_CLASS_PROPERTY_TYPE(aura::client::ScreenPositionClient*)
- namespace aura {
- namespace client {
- DEFINE_UI_CLASS_PROPERTY_KEY(ScreenPositionClient*,
- kScreenPositionClientKey,
- nullptr)
- void ScreenPositionClient::ConvertPointToScreen(const Window* window,
- gfx::Point* point) {
- gfx::PointF point_float(*point);
- ConvertPointToScreen(window, &point_float);
- *point = gfx::ToFlooredPoint(point_float);
- }
- void ScreenPositionClient::ConvertPointFromScreen(const Window* window,
- gfx::Point* point) {
- gfx::PointF point_float(*point);
- ConvertPointFromScreen(window, &point_float);
- *point = gfx::ToFlooredPoint(point_float);
- }
- void ScreenPositionClient::ConvertPointToRootWindowIgnoringTransforms(
- const Window* window,
- gfx::Point* point) {
- DCHECK(window);
- DCHECK(window->GetRootWindow());
- Window* ancestor = const_cast<Window*>(window);
- while (ancestor && !ancestor->IsRootWindow()) {
- const gfx::Point origin = ancestor->bounds().origin();
- point->Offset(origin.x(), origin.y());
- ancestor = ancestor->parent();
- }
- }
- void ScreenPositionClient::ConvertPointToScreenIgnoringTransforms(
- const aura::Window* window,
- gfx::Point* point) {
- const aura::Window* root_window = window->GetRootWindow();
- ConvertPointToRootWindowIgnoringTransforms(window, point);
- gfx::Point origin = GetRootWindowOriginInScreen(root_window);
- point->Offset(origin.x(), origin.y());
- }
- void SetScreenPositionClient(Window* root_window,
- ScreenPositionClient* client) {
- DCHECK_EQ(root_window->GetRootWindow(), root_window);
- root_window->SetProperty(kScreenPositionClientKey, client);
- }
- ScreenPositionClient* GetScreenPositionClient(const Window* root_window) {
- if (root_window)
- DCHECK_EQ(root_window->GetRootWindow(), root_window);
- return root_window ?
- root_window->GetProperty(kScreenPositionClientKey) : NULL;
- }
- } // namespace client
- } // namespace aura
|