| OLD | NEW |
| (Empty) | |
| 1 // Copyright 2014 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 #include "services/view_manager/view_coordinate_conversions.h" |
| 6 |
| 7 #include "services/view_manager/server_view.h" |
| 8 #include "ui/gfx/geometry/point.h" |
| 9 #include "ui/gfx/geometry/point_conversions.h" |
| 10 #include "ui/gfx/geometry/point_f.h" |
| 11 #include "ui/gfx/geometry/rect.h" |
| 12 #include "ui/gfx/geometry/vector2d.h" |
| 13 #include "ui/gfx/geometry/vector2d_f.h" |
| 14 |
| 15 namespace view_manager { |
| 16 |
| 17 namespace { |
| 18 |
| 19 gfx::Vector2dF CalculateOffsetToAncestor(const ServerView* view, |
| 20 const ServerView* ancestor) { |
| 21 DCHECK(ancestor->Contains(view)); |
| 22 gfx::Vector2d result; |
| 23 for (const ServerView* v = view; v != ancestor; v = v->parent()) |
| 24 result += v->bounds().OffsetFromOrigin(); |
| 25 return gfx::Vector2dF(result.x(), result.y()); |
| 26 } |
| 27 |
| 28 } // namespace |
| 29 |
| 30 gfx::Point ConvertPointBetweenViews(const ServerView* from, |
| 31 const ServerView* to, |
| 32 const gfx::Point& point) { |
| 33 return gfx::ToFlooredPoint( |
| 34 ConvertPointFBetweenViews(from, to, gfx::PointF(point.x(), point.y()))); |
| 35 } |
| 36 |
| 37 gfx::PointF ConvertPointFBetweenViews(const ServerView* from, |
| 38 const ServerView* to, |
| 39 const gfx::PointF& point) { |
| 40 DCHECK(from); |
| 41 DCHECK(to); |
| 42 if (from == to) |
| 43 return point; |
| 44 |
| 45 if (from->Contains(to)) { |
| 46 const gfx::Vector2dF offset(CalculateOffsetToAncestor(to, from)); |
| 47 return point - offset; |
| 48 } |
| 49 DCHECK(to->Contains(from)); |
| 50 const gfx::Vector2dF offset(CalculateOffsetToAncestor(from, to)); |
| 51 return point + offset; |
| 52 } |
| 53 |
| 54 gfx::Rect ConvertRectBetweenViews(const ServerView* from, |
| 55 const ServerView* to, |
| 56 const gfx::Rect& rect) { |
| 57 DCHECK(from); |
| 58 DCHECK(to); |
| 59 if (from == to) |
| 60 return rect; |
| 61 |
| 62 const gfx::Point top_left(ConvertPointBetweenViews(from, to, rect.origin())); |
| 63 const gfx::Point bottom_right(gfx::ToCeiledPoint(ConvertPointFBetweenViews( |
| 64 from, to, gfx::PointF(rect.right(), rect.bottom())))); |
| 65 return gfx::Rect(top_left.x(), top_left.y(), bottom_right.x() - top_left.x(), |
| 66 bottom_right.y() - top_left.y()); |
| 67 } |
| 68 |
| 69 } // namespace view_manager |
| OLD | NEW |