OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright (C) 2006 The Android Open Source Project | |
3 * | |
4 * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 * you may not use this file except in compliance with the License. | |
6 * You may obtain a copy of the License at | |
7 * | |
8 * http://www.apache.org/licenses/LICENSE-2.0 | |
9 * | |
10 * Unless required by applicable law or agreed to in writing, software | |
11 * distributed under the License is distributed on an "AS IS" BASIS, | |
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 * See the License for the specific language governing permissions and | |
14 * limitations under the License. | |
15 */ | |
16 | |
17 #include "SkRect.h" | |
18 | |
19 void SkIRect::join(int32_t left, int32_t top, int32_t right, int32_t bottom) | |
20 { | |
21 // do nothing if the params are empty | |
22 if (left >= right || top >= bottom) | |
23 return; | |
24 | |
25 // if we are empty, just assign | |
26 if (fLeft >= fRight || fTop >= fBottom) | |
27 this->set(left, top, right, bottom); | |
28 else | |
29 { | |
30 if (left < fLeft) fLeft = left; | |
31 if (top < fTop) fTop = top; | |
32 if (right > fRight) fRight = right; | |
33 if (bottom > fBottom) fBottom = bottom; | |
34 } | |
35 } | |
36 | |
37 void SkIRect::sort() | |
38 { | |
39 if (fLeft > fRight) | |
40 SkTSwap<int32_t>(fLeft, fRight); | |
41 if (fTop > fBottom) | |
42 SkTSwap<int32_t>(fTop, fBottom); | |
43 } | |
44 | |
45 ///////////////////////////////////////////////////////////////////////////// | |
46 | |
47 void SkRect::sort() | |
48 { | |
49 if (fLeft > fRight) | |
50 SkTSwap<SkScalar>(fLeft, fRight); | |
51 if (fTop > fBottom) | |
52 SkTSwap<SkScalar>(fTop, fBottom); | |
53 } | |
54 | |
55 void SkRect::toQuad(SkPoint quad[4]) const | |
56 { | |
57 SkASSERT(quad); | |
58 | |
59 quad[0].set(fLeft, fTop); | |
60 quad[1].set(fRight, fTop); | |
61 quad[2].set(fRight, fBottom); | |
62 quad[3].set(fLeft, fBottom); | |
63 } | |
64 | |
65 void SkRect::set(const SkPoint pts[], int count) | |
66 { | |
67 SkASSERT((pts && count > 0) || count == 0); | |
68 | |
69 if (count <= 0) { | |
70 bzero(this, sizeof(SkRect)); | |
71 } else { | |
72 #ifdef SK_SCALAR_SLOW_COMPARES | |
73 int32_t l, t, r, b; | |
74 | |
75 l = r = SkScalarAs2sCompliment(pts[0].fX); | |
76 t = b = SkScalarAs2sCompliment(pts[0].fY); | |
77 | |
78 for (int i = 1; i < count; i++) { | |
79 int32_t x = SkScalarAs2sCompliment(pts[i].fX); | |
80 int32_t y = SkScalarAs2sCompliment(pts[i].fY); | |
81 | |
82 if (x < l) l = x; else if (x > r) r = x; | |
83 if (y < t) t = y; else if (y > b) b = y; | |
84 } | |
85 this->set(Sk2sComplimentAsScalar(l), | |
86 Sk2sComplimentAsScalar(t), | |
87 Sk2sComplimentAsScalar(r), | |
88 Sk2sComplimentAsScalar(b)); | |
89 #else | |
90 SkScalar l, t, r, b; | |
91 | |
92 l = r = pts[0].fX; | |
93 t = b = pts[0].fY; | |
94 | |
95 for (int i = 1; i < count; i++) { | |
96 SkScalar x = pts[i].fX; | |
97 SkScalar y = pts[i].fY; | |
98 | |
99 if (x < l) l = x; else if (x > r) r = x; | |
100 if (y < t) t = y; else if (y > b) b = y; | |
101 } | |
102 this->set(l, t, r, b); | |
103 #endif | |
104 } | |
105 } | |
106 | |
107 bool SkRect::intersect(SkScalar left, SkScalar top, SkScalar right, SkScalar bot
tom) | |
108 { | |
109 if (left < right && top < bottom && !this->isEmpty() && // check for empties | |
110 fLeft < right && left < fRight && fTop < bottom && top < fBottom) | |
111 { | |
112 if (fLeft < left) fLeft = left; | |
113 if (fTop < top) fTop = top; | |
114 if (fRight > right) fRight = right; | |
115 if (fBottom > bottom) fBottom = bottom; | |
116 return true; | |
117 } | |
118 return false; | |
119 } | |
120 | |
121 bool SkRect::intersect(const SkRect& r) | |
122 { | |
123 SkASSERT(&r); | |
124 return this->intersect(r.fLeft, r.fTop, r.fRight, r.fBottom); | |
125 } | |
126 | |
127 void SkRect::join(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom) | |
128 { | |
129 // do nothing if the params are empty | |
130 if (left >= right || top >= bottom) | |
131 return; | |
132 | |
133 // if we are empty, just assign | |
134 if (fLeft >= fRight || fTop >= fBottom) | |
135 this->set(left, top, right, bottom); | |
136 else | |
137 { | |
138 if (left < fLeft) fLeft = left; | |
139 if (top < fTop) fTop = top; | |
140 if (right > fRight) fRight = right; | |
141 if (bottom > fBottom) fBottom = bottom; | |
142 } | |
143 } | |
144 | |
145 | |
OLD | NEW |