Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(606)

Side by Side Diff: core/include/fxcrt/fx_coordinates.h

Issue 1745683002: Fixup FX_RECT and FX_SMALL_RECT classes. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Rebase, Dan's comments Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #ifndef CORE_INCLUDE_FXCRT_FX_COORDINATES_H_ 7 #ifndef CORE_INCLUDE_FXCRT_FX_COORDINATES_H_
8 #define CORE_INCLUDE_FXCRT_FX_COORDINATES_H_ 8 #define CORE_INCLUDE_FXCRT_FX_COORDINATES_H_
9 9
10 #include "core/include/fxcrt/fx_basic.h" 10 #include "core/include/fxcrt/fx_basic.h"
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 void Rotate(FX_FLOAT fRadian) { 113 void Rotate(FX_FLOAT fRadian) {
114 FX_FLOAT cosValue = FXSYS_cos(fRadian); 114 FX_FLOAT cosValue = FXSYS_cos(fRadian);
115 FX_FLOAT sinValue = FXSYS_sin(fRadian); 115 FX_FLOAT sinValue = FXSYS_sin(fRadian);
116 x = x * cosValue - y * sinValue; 116 x = x * cosValue - y * sinValue;
117 y = x * sinValue + y * cosValue; 117 y = x * sinValue + y * cosValue;
118 } 118 }
119 }; 119 };
120 typedef CFX_VTemplate<int32_t> CFX_Vector; 120 typedef CFX_VTemplate<int32_t> CFX_Vector;
121 typedef CFX_VTemplate<FX_FLOAT> CFX_VectorF; 121 typedef CFX_VTemplate<FX_FLOAT> CFX_VectorF;
122 122
123 // Rectangles.
124 // TODO(tsepez): Consolidate all these different rectangle classes.
125
126 // LTRB rectangles (y-axis runs downwards).
127 struct FX_SMALL_RECT {
128 FX_SMALL_RECT() : FX_SMALL_RECT(kInvalid, kInvalid, kInvalid, kInvalid) {}
129
130 FX_SMALL_RECT(int16_t l, int16_t t, int16_t r, int16_t b)
131 : left(l), top(t), right(r), bottom(b) {}
132
133 static const int16_t kInvalid = -1;
134
135 int16_t left;
136 int16_t top;
137 int16_t right;
138 int16_t bottom;
139 };
140
141 struct FX_RECT {
142 FX_RECT() : left(0), top(0), right(0), bottom(0) {}
143
144 FX_RECT(int l, int t, int r, int b) : left(l), top(t), right(r), bottom(b) {}
145
146 explicit FX_RECT(const FX_SMALL_RECT& small)
147 : FX_RECT(small.left, small.top, small.right, small.bottom) {}
148
149 int Width() const { return right - left; }
150 int Height() const { return bottom - top; }
151 bool IsEmpty() const { return right <= left || bottom <= top; }
152
153 void Normalize();
154
155 void Intersect(const FX_RECT& src);
156 void Intersect(int l, int t, int r, int b) { Intersect(FX_RECT(l, t, r, b)); }
157
158 void Union(const FX_RECT& other_rect);
159 void Union(int l, int t, int r, int b) { Union(FX_RECT(l, t, r, b)); }
160
161 void Offset(int dx, int dy) {
162 left += dx;
163 right += dx;
164 top += dy;
165 bottom += dy;
166 }
167
168 bool operator==(const FX_RECT& src) const {
169 return left == src.left && right == src.right && top == src.top &&
170 bottom == src.bottom;
171 }
172
173 FX_BOOL Contains(const FX_RECT& other_rect) const {
174 return other_rect.left >= left && other_rect.right <= right &&
175 other_rect.top >= top && other_rect.bottom <= bottom;
176 }
177
178 FX_BOOL Contains(int x, int y) const {
179 return x >= left && x < right && y >= top && y < bottom;
180 }
181
182 FX_SMALL_RECT ToSmallRect() const {
183 return FX_SMALL_RECT(
184 static_cast<uint16_t>(left), static_cast<uint16_t>(top),
185 static_cast<uint16_t>(right), static_cast<uint16_t>(bottom));
186 }
187
188 int left;
189 int top;
190 int right;
191 int bottom;
192 };
193
194 // LBRT rectangles (y-axis runs upwards).
195 class CFX_FloatPoint {
196 public:
197 CFX_FloatPoint(FX_FLOAT xx, FX_FLOAT yy) : x(xx), y(yy) {}
198
199 FX_FLOAT x;
200 FX_FLOAT y;
201 };
202
203 class CFX_FloatRect {
204 public:
205 CFX_FloatRect() : CFX_FloatRect(0.0f, 0.0f, 0.0f, 0.0f) {}
206 CFX_FloatRect(FX_FLOAT l, FX_FLOAT b, FX_FLOAT r, FX_FLOAT t)
207 : left(l), bottom(b), right(r), top(t) {}
208
209 explicit CFX_FloatRect(const FX_FLOAT* pArray)
210 : CFX_FloatRect(pArray[0], pArray[1], pArray[2], pArray[3]) {}
211
212 explicit CFX_FloatRect(const FX_RECT& rect);
213
214 void Normalize();
215
216 void Reset() {
217 left = 0.0f;
218 right = 0.0f;
219 bottom = 0.0f;
220 top = 0.0f;
221 }
222
223 FX_BOOL IsEmpty() const { return left >= right || bottom >= top; }
224 FX_BOOL Contains(const CFX_FloatRect& other_rect) const;
225 FX_BOOL Contains(FX_FLOAT x, FX_FLOAT y) const;
226
227 void Transform(const CFX_Matrix* pMatrix);
228 void Intersect(const CFX_FloatRect& other_rect);
229 void Union(const CFX_FloatRect& other_rect);
230
231 FX_RECT GetInnerRect() const;
232 FX_RECT GetOutterRect() const;
233 FX_RECT GetClosestRect() const;
234
235 int Substract4(CFX_FloatRect& substract_rect, CFX_FloatRect* pRects);
236
237 void InitRect(FX_FLOAT x, FX_FLOAT y) {
238 left = x;
239 right = x;
240 bottom = y;
241 top = y;
242 }
243 void UpdateRect(FX_FLOAT x, FX_FLOAT y);
244
245 FX_FLOAT Width() const { return right - left; }
246 FX_FLOAT Height() const { return top - bottom; }
247
248 void Inflate(FX_FLOAT x, FX_FLOAT y) {
249 Normalize();
250 left -= x;
251 right += x;
252 bottom -= y;
253 top += y;
254 }
255
256 void Inflate(FX_FLOAT other_left,
257 FX_FLOAT other_bottom,
258 FX_FLOAT other_right,
259 FX_FLOAT other_top) {
260 Normalize();
261 left -= other_left;
262 bottom -= other_bottom;
263 right += other_right;
264 top += other_top;
265 }
266
267 void Inflate(const CFX_FloatRect& rt) {
268 Inflate(rt.left, rt.bottom, rt.right, rt.top);
269 }
270
271 void Deflate(FX_FLOAT x, FX_FLOAT y) {
272 Normalize();
273 left += x;
274 right -= x;
275 bottom += y;
276 top -= y;
277 }
278
279 void Deflate(FX_FLOAT other_left,
280 FX_FLOAT other_bottom,
281 FX_FLOAT other_right,
282 FX_FLOAT other_top) {
283 Normalize();
284 left += other_left;
285 bottom += other_bottom;
286 right -= other_right;
287 top -= other_top;
288 }
289
290 void Deflate(const CFX_FloatRect& rt) {
291 Deflate(rt.left, rt.bottom, rt.right, rt.top);
292 }
293
294 void Translate(FX_FLOAT e, FX_FLOAT f) {
295 left += e;
296 right += e;
297 top += f;
298 bottom += f;
299 }
300
301 static CFX_FloatRect GetBBox(const CFX_PointF* pPoints, int nPoints);
302
303 FX_FLOAT left;
304 FX_FLOAT bottom;
305 FX_FLOAT right;
306 FX_FLOAT top;
307 };
308
309 // LTWH rectangles (y-axis runs downwards).
123 template <class baseType> 310 template <class baseType>
124 class CFX_RTemplate { 311 class CFX_RTemplate {
125 public: 312 public:
126 typedef CFX_PSTemplate<baseType> FXT_POINT; 313 typedef CFX_PSTemplate<baseType> FXT_POINT;
127 typedef CFX_PSTemplate<baseType> FXT_SIZE; 314 typedef CFX_PSTemplate<baseType> FXT_SIZE;
128 typedef CFX_VTemplate<baseType> FXT_VECTOR; 315 typedef CFX_VTemplate<baseType> FXT_VECTOR;
129 typedef CFX_RTemplate<baseType> FXT_RECT; 316 typedef CFX_RTemplate<baseType> FXT_RECT;
130 void Set(baseType left, baseType top, baseType width, baseType height) { 317 void Set(baseType left, baseType top, baseType width, baseType height) {
131 FXT_RECT::left = left, FXT_RECT::top = top, FXT_RECT::width = width, 318 FXT_RECT::left = left, FXT_RECT::top = top, FXT_RECT::width = width,
132 FXT_RECT::height = height; 319 FXT_RECT::height = height;
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 baseType left, top; 530 baseType left, top;
344 baseType width, height; 531 baseType width, height;
345 }; 532 };
346 typedef CFX_RTemplate<int32_t> CFX_Rect; 533 typedef CFX_RTemplate<int32_t> CFX_Rect;
347 typedef CFX_RTemplate<FX_FLOAT> CFX_RectF; 534 typedef CFX_RTemplate<FX_FLOAT> CFX_RectF;
348 typedef CFX_RTemplate<int32_t>* FX_LPRECT; 535 typedef CFX_RTemplate<int32_t>* FX_LPRECT;
349 typedef CFX_RTemplate<FX_FLOAT>* FX_LPRECTF; 536 typedef CFX_RTemplate<FX_FLOAT>* FX_LPRECTF;
350 typedef CFX_RTemplate<int32_t> const* FX_LPCRECT; 537 typedef CFX_RTemplate<int32_t> const* FX_LPCRECT;
351 typedef CFX_RTemplate<FX_FLOAT> const* FX_LPCRECTF; 538 typedef CFX_RTemplate<FX_FLOAT> const* FX_LPCRECTF;
352 typedef CFX_ArrayTemplate<CFX_RectF> CFX_RectFArray; 539 typedef CFX_ArrayTemplate<CFX_RectF> CFX_RectFArray;
353 struct FX_RECT {
354 int left;
355
356 int top;
357
358 int right;
359
360 int bottom;
361
362 FX_RECT() : left(0), top(0), right(0), bottom(0) {}
363
364 FX_RECT(int left1, int top1, int right1, int bottom1) {
365 left = left1;
366 top = top1;
367 right = right1;
368 bottom = bottom1;
369 }
370
371 int Width() const { return right - left; }
372
373 int Height() const { return bottom - top; }
374
375 FX_BOOL IsEmpty() const { return right <= left || bottom <= top; }
376
377 void Normalize();
378
379 void Intersect(const FX_RECT& src);
380
381 void Intersect(int left1, int top1, int right1, int bottom1) {
382 Intersect(FX_RECT(left1, top1, right1, bottom1));
383 }
384
385 void Union(const FX_RECT& other_rect);
386
387 bool operator==(const FX_RECT& src) const {
388 return left == src.left && right == src.right && top == src.top &&
389 bottom == src.bottom;
390 }
391
392 void Offset(int dx, int dy) {
393 left += dx;
394 right += dx;
395 top += dy;
396 bottom += dy;
397 }
398
399 FX_BOOL Contains(const FX_RECT& other_rect) const {
400 return other_rect.left >= left && other_rect.right <= right &&
401 other_rect.top >= top && other_rect.bottom <= bottom;
402 }
403
404 FX_BOOL Contains(int x, int y) const {
405 return x >= left && x < right && y >= top && y < bottom;
406 }
407 };
408 struct FX_SMALL_RECT {
409 int16_t Left;
410
411 int16_t Top;
412
413 int16_t Right;
414
415 int16_t Bottom;
416 };
417
418 class CFX_FloatPoint {
419 public:
420 CFX_FloatPoint(FX_FLOAT xx, FX_FLOAT yy) : x(xx), y(yy) {}
421
422 FX_FLOAT x;
423 FX_FLOAT y;
424 };
425
426 class CFX_FloatRect {
427 public:
428 CFX_FloatRect() { left = right = bottom = top = 0; }
429
430 CFX_FloatRect(FX_FLOAT left1,
431 FX_FLOAT bottom1,
432 FX_FLOAT right1,
433 FX_FLOAT top1) {
434 left = left1;
435 bottom = bottom1;
436 right = right1;
437 top = top1;
438 }
439
440 CFX_FloatRect(const FX_FLOAT* pArray) {
441 left = pArray[0];
442 bottom = pArray[1];
443 right = pArray[2];
444 top = pArray[3];
445 }
446
447 CFX_FloatRect(const FX_RECT& rect);
448
449 FX_BOOL IsEmpty() const { return left >= right || bottom >= top; }
450
451 void Normalize();
452
453 void Reset() { left = right = bottom = top = 0; }
454
455 FX_BOOL Contains(const CFX_FloatRect& other_rect) const;
456
457 FX_BOOL Contains(FX_FLOAT x, FX_FLOAT y) const;
458
459 void Transform(const CFX_Matrix* pMatrix);
460
461 void Intersect(const CFX_FloatRect& other_rect);
462
463 void Union(const CFX_FloatRect& other_rect);
464
465 FX_RECT GetInnerRect() const;
466
467 FX_RECT GetOutterRect() const;
468
469 FX_RECT GetClosestRect() const;
470
471 int Substract4(CFX_FloatRect& substract_rect, CFX_FloatRect* pRects);
472
473 void InitRect(FX_FLOAT x, FX_FLOAT y) {
474 left = right = x;
475 bottom = top = y;
476 }
477
478 void UpdateRect(FX_FLOAT x, FX_FLOAT y);
479
480 FX_FLOAT Width() const { return right - left; }
481
482 FX_FLOAT Height() const { return top - bottom; }
483
484 void Inflate(FX_FLOAT x, FX_FLOAT y) {
485 Normalize();
486 left -= x;
487 right += x;
488 bottom -= y;
489 top += y;
490 }
491
492 void Inflate(FX_FLOAT other_left,
493 FX_FLOAT other_bottom,
494 FX_FLOAT other_right,
495 FX_FLOAT other_top) {
496 Normalize();
497 left -= other_left;
498 bottom -= other_bottom;
499 right += other_right;
500 top += other_top;
501 }
502
503 void Inflate(const CFX_FloatRect& rt) {
504 Inflate(rt.left, rt.bottom, rt.right, rt.top);
505 }
506
507 void Deflate(FX_FLOAT x, FX_FLOAT y) {
508 Normalize();
509 left += x;
510 right -= x;
511 bottom += y;
512 top -= y;
513 }
514
515 void Deflate(FX_FLOAT other_left,
516 FX_FLOAT other_bottom,
517 FX_FLOAT other_right,
518 FX_FLOAT other_top) {
519 Normalize();
520 left += other_left;
521 bottom += other_bottom;
522 right -= other_right;
523 top -= other_top;
524 }
525
526 void Deflate(const CFX_FloatRect& rt) {
527 Deflate(rt.left, rt.bottom, rt.right, rt.top);
528 }
529
530 void Translate(FX_FLOAT e, FX_FLOAT f) {
531 left += e;
532 right += e;
533 top += f;
534 bottom += f;
535 }
536
537 static CFX_FloatRect GetBBox(const CFX_PointF* pPoints, int nPoints);
538
539 FX_FLOAT left;
540 FX_FLOAT right;
541 FX_FLOAT bottom;
542 FX_FLOAT top;
543 };
544 540
545 class CFX_Matrix { 541 class CFX_Matrix {
546 public: 542 public:
547 CFX_Matrix() { SetIdentity(); } 543 CFX_Matrix() { SetIdentity(); }
548 544
549 CFX_Matrix(FX_FLOAT a1, 545 CFX_Matrix(FX_FLOAT a1,
550 FX_FLOAT b1, 546 FX_FLOAT b1,
551 FX_FLOAT c1, 547 FX_FLOAT c1,
552 FX_FLOAT d1, 548 FX_FLOAT d1,
553 FX_FLOAT e1, 549 FX_FLOAT e1,
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 public: 661 public:
666 FX_FLOAT a; 662 FX_FLOAT a;
667 FX_FLOAT b; 663 FX_FLOAT b;
668 FX_FLOAT c; 664 FX_FLOAT c;
669 FX_FLOAT d; 665 FX_FLOAT d;
670 FX_FLOAT e; 666 FX_FLOAT e;
671 FX_FLOAT f; 667 FX_FLOAT f;
672 }; 668 };
673 669
674 #endif // CORE_INCLUDE_FXCRT_FX_COORDINATES_H_ 670 #endif // CORE_INCLUDE_FXCRT_FX_COORDINATES_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698