OLD | NEW |
| (Empty) |
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 #include "ui/gfx/rect.h" | |
6 | |
7 #include <algorithm> | |
8 | |
9 #if defined(OS_WIN) | |
10 #include <windows.h> | |
11 #elif defined(TOOLKIT_GTK) | |
12 #include <gdk/gdk.h> | |
13 #endif | |
14 | |
15 #include "base/logging.h" | |
16 #include "base/strings/stringprintf.h" | |
17 #include "ui/gfx/insets.h" | |
18 #include "ui/gfx/rect_base_impl.h" | |
19 | |
20 namespace gfx { | |
21 | |
22 template class RectBase<Rect, Point, Size, Insets, Vector2d, int>; | |
23 | |
24 typedef class RectBase<Rect, Point, Size, Insets, Vector2d, int> RectBaseT; | |
25 | |
26 #if defined(OS_WIN) | |
27 Rect::Rect(const RECT& r) | |
28 : RectBaseT(gfx::Point(r.left, r.top)) { | |
29 set_width(std::abs(r.right - r.left)); | |
30 set_height(std::abs(r.bottom - r.top)); | |
31 } | |
32 #elif defined(OS_MACOSX) | |
33 Rect::Rect(const CGRect& r) | |
34 : RectBaseT(gfx::Point(r.origin.x, r.origin.y)) { | |
35 set_width(r.size.width); | |
36 set_height(r.size.height); | |
37 } | |
38 #elif defined(TOOLKIT_GTK) | |
39 Rect::Rect(const GdkRectangle& r) | |
40 : RectBaseT(gfx::Point(r.x, r.y)) { | |
41 set_width(r.width); | |
42 set_height(r.height); | |
43 } | |
44 #endif | |
45 | |
46 #if defined(OS_WIN) | |
47 RECT Rect::ToRECT() const { | |
48 RECT r; | |
49 r.left = x(); | |
50 r.right = right(); | |
51 r.top = y(); | |
52 r.bottom = bottom(); | |
53 return r; | |
54 } | |
55 #elif defined(OS_MACOSX) | |
56 CGRect Rect::ToCGRect() const { | |
57 return CGRectMake(x(), y(), width(), height()); | |
58 } | |
59 #elif defined(TOOLKIT_GTK) | |
60 GdkRectangle Rect::ToGdkRectangle() const { | |
61 GdkRectangle r = {x(), y(), width(), height()}; | |
62 return r; | |
63 } | |
64 #endif | |
65 | |
66 std::string Rect::ToString() const { | |
67 return base::StringPrintf("%s %s", | |
68 origin().ToString().c_str(), | |
69 size().ToString().c_str()); | |
70 } | |
71 | |
72 Rect operator+(const Rect& lhs, const Vector2d& rhs) { | |
73 Rect result(lhs); | |
74 result += rhs; | |
75 return result; | |
76 } | |
77 | |
78 Rect operator-(const Rect& lhs, const Vector2d& rhs) { | |
79 Rect result(lhs); | |
80 result -= rhs; | |
81 return result; | |
82 } | |
83 | |
84 Rect IntersectRects(const Rect& a, const Rect& b) { | |
85 Rect result = a; | |
86 result.Intersect(b); | |
87 return result; | |
88 } | |
89 | |
90 Rect UnionRects(const Rect& a, const Rect& b) { | |
91 Rect result = a; | |
92 result.Union(b); | |
93 return result; | |
94 } | |
95 | |
96 Rect SubtractRects(const Rect& a, const Rect& b) { | |
97 Rect result = a; | |
98 result.Subtract(b); | |
99 return result; | |
100 } | |
101 | |
102 Rect BoundingRect(const Point& p1, const Point& p2) { | |
103 int rx = std::min(p1.x(), p2.x()); | |
104 int ry = std::min(p1.y(), p2.y()); | |
105 int rr = std::max(p1.x(), p2.x()); | |
106 int rb = std::max(p1.y(), p2.y()); | |
107 return Rect(rx, ry, rr - rx, rb - ry); | |
108 } | |
109 | |
110 } // namespace gfx | |
OLD | NEW |