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

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: Make actual changes. 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
« no previous file with comments | « core/include/fpdfapi/fpdf_resource.h ('k') | core/src/fpdfapi/fpdf_font/fpdf_font.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
dsinclair 2016/02/27 03:11:44 Why does this one use upper case (Left) and the on
Tom Sepez 2016/02/29 18:42:08 Because they're inconsistent with public members.
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 left1, int top1, int right1, int bottom1) {
dsinclair 2016/02/27 03:11:44 nit: Why the 1's in the names?
Tom Sepez 2016/02/29 18:42:07 They conflict with instance variables in the class
157 Intersect(FX_RECT(left1, top1, right1, bottom1));
158 }
159
160 void Union(const FX_RECT& other_rect);
161 void Union(int left1, int top1, int right1, int bottom1) {
162 Union(FX_RECT(left1, top1, right1, bottom1));
163 }
164
165 void Offset(int dx, int dy) {
166 left += dx;
167 right += dx;
168 top += dy;
169 bottom += dy;
170 }
171
172 bool operator==(const FX_RECT& src) const {
173 return left == src.left && right == src.right && top == src.top &&
174 bottom == src.bottom;
175 }
176
177 FX_BOOL Contains(const FX_RECT& other_rect) const {
178 return other_rect.left >= left && other_rect.right <= right &&
179 other_rect.top >= top && other_rect.bottom <= bottom;
180 }
181
182 FX_BOOL Contains(int x, int y) const {
183 return x >= left && x < right && y >= top && y < bottom;
dsinclair 2016/02/27 03:11:44 Why >= for left and top but < for right and bottom
Tom Sepez 2016/02/29 18:42:08 Beats me. I'd expect a lot of 1px diffs if we cha
184 }
185
186 FX_SMALL_RECT ToSmallRect() const {
187 return FX_SMALL_RECT(
188 static_cast<uint16_t>(left), static_cast<uint16_t>(top),
189 static_cast<uint16_t>(right), static_cast<uint16_t>(bottom));
190 }
191
192 int left;
193 int top;
194 int right;
195 int bottom;
196 };
197
198 // LBRT rectangles (y-axis runs upwards).
199 class CFX_FloatPoint {
200 public:
201 CFX_FloatPoint(FX_FLOAT xx, FX_FLOAT yy) : x(xx), y(yy) {}
202
203 FX_FLOAT x;
204 FX_FLOAT y;
205 };
206
207 class CFX_FloatRect {
208 public:
209 CFX_FloatRect() { left = right = bottom = top = 0; }
dsinclair 2016/02/27 03:11:44 CFX_FloatRect() : left(0), right(0), bottom(0), to
Tom Sepez 2016/02/29 18:42:07 Done.
210
211 CFX_FloatRect(FX_FLOAT left1,
212 FX_FLOAT bottom1,
213 FX_FLOAT right1,
214 FX_FLOAT top1) {
215 left = left1;
216 bottom = bottom1;
217 right = right1;
218 top = top1;
219 }
220
221 CFX_FloatRect(const FX_FLOAT* pArray) {
dsinclair 2016/02/27 03:11:44 nit: explicit
Tom Sepez 2016/02/29 18:42:08 Yep. Good catch. Done.
222 left = pArray[0];
223 bottom = pArray[1];
224 right = pArray[2];
225 top = pArray[3];
226 }
227
228 CFX_FloatRect(const FX_RECT& rect);
dsinclair 2016/02/27 03:11:44 nit: explicit
Tom Sepez 2016/02/29 18:42:08 Done.
229
230 FX_BOOL IsEmpty() const { return left >= right || bottom >= top; }
231
232 void Normalize();
233
234 void Reset() { left = right = bottom = top = 0; }
235
236 FX_BOOL Contains(const CFX_FloatRect& other_rect) const;
237
238 FX_BOOL Contains(FX_FLOAT x, FX_FLOAT y) const;
239
240 void Transform(const CFX_Matrix* pMatrix);
241
242 void Intersect(const CFX_FloatRect& other_rect);
243
244 void Union(const CFX_FloatRect& other_rect);
245
246 FX_RECT GetInnerRect() const;
247
dsinclair 2016/02/27 03:11:44 nit: Can a bunch of these spaces be removed?
Tom Sepez 2016/02/29 18:42:08 Done.
248 FX_RECT GetOutterRect() const;
249
250 FX_RECT GetClosestRect() const;
251
252 int Substract4(CFX_FloatRect& substract_rect, CFX_FloatRect* pRects);
253
254 void InitRect(FX_FLOAT x, FX_FLOAT y) {
dsinclair 2016/02/27 03:11:44 This seems like a very weird init method? We initi
Tom Sepez 2016/02/29 18:42:08 yes. looking at usage, its always followed by a bu
255 left = right = x;
256 bottom = top = y;
257 }
258
259 void UpdateRect(FX_FLOAT x, FX_FLOAT y);
260
261 FX_FLOAT Width() const { return right - left; }
262
263 FX_FLOAT Height() const { return top - bottom; }
264
265 void Inflate(FX_FLOAT x, FX_FLOAT y) {
dsinclair 2016/02/27 03:11:44 Maybe add a comment that this inflates by 2x and 2
Tom Sepez 2016/02/29 18:42:08 Maybe.
266 Normalize();
267 left -= x;
268 right += x;
269 bottom -= y;
270 top += y;
271 }
272
273 void Inflate(FX_FLOAT other_left,
274 FX_FLOAT other_bottom,
275 FX_FLOAT other_right,
276 FX_FLOAT other_top) {
277 Normalize();
278 left -= other_left;
279 bottom -= other_bottom;
280 right += other_right;
281 top += other_top;
282 }
283
284 void Inflate(const CFX_FloatRect& rt) {
285 Inflate(rt.left, rt.bottom, rt.right, rt.top);
286 }
287
288 void Deflate(FX_FLOAT x, FX_FLOAT y) {
dsinclair 2016/02/27 03:11:44 ditto: deflates by 2x, 2y
289 Normalize();
290 left += x;
291 right -= x;
292 bottom += y;
293 top -= y;
294 }
295
296 void Deflate(FX_FLOAT other_left,
297 FX_FLOAT other_bottom,
298 FX_FLOAT other_right,
299 FX_FLOAT other_top) {
300 Normalize();
301 left += other_left;
302 bottom += other_bottom;
303 right -= other_right;
304 top -= other_top;
305 }
306
307 void Deflate(const CFX_FloatRect& rt) {
308 Deflate(rt.left, rt.bottom, rt.right, rt.top);
309 }
310
311 void Translate(FX_FLOAT e, FX_FLOAT f) {
312 left += e;
313 right += e;
314 top += f;
315 bottom += f;
316 }
317
318 static CFX_FloatRect GetBBox(const CFX_PointF* pPoints, int nPoints);
319
320 FX_FLOAT left;
321 FX_FLOAT right;
322 FX_FLOAT bottom;
323 FX_FLOAT top;
324 };
325
326 // LTWH rectangles (y-axis runs downwards).
dsinclair 2016/02/27 03:11:44 What does LTWH stand for?
Tom Sepez 2016/02/29 18:42:07 Left, Top, Width, Height -- as in we store a point
123 template <class baseType> 327 template <class baseType>
124 class CFX_RTemplate { 328 class CFX_RTemplate {
125 public: 329 public:
126 typedef CFX_PSTemplate<baseType> FXT_POINT; 330 typedef CFX_PSTemplate<baseType> FXT_POINT;
127 typedef CFX_PSTemplate<baseType> FXT_SIZE; 331 typedef CFX_PSTemplate<baseType> FXT_SIZE;
128 typedef CFX_VTemplate<baseType> FXT_VECTOR; 332 typedef CFX_VTemplate<baseType> FXT_VECTOR;
129 typedef CFX_RTemplate<baseType> FXT_RECT; 333 typedef CFX_RTemplate<baseType> FXT_RECT;
130 void Set(baseType left, baseType top, baseType width, baseType height) { 334 void Set(baseType left, baseType top, baseType width, baseType height) {
131 FXT_RECT::left = left, FXT_RECT::top = top, FXT_RECT::width = width, 335 FXT_RECT::left = left, FXT_RECT::top = top, FXT_RECT::width = width,
132 FXT_RECT::height = height; 336 FXT_RECT::height = height;
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 baseType left, top; 547 baseType left, top;
344 baseType width, height; 548 baseType width, height;
345 }; 549 };
346 typedef CFX_RTemplate<int32_t> CFX_Rect; 550 typedef CFX_RTemplate<int32_t> CFX_Rect;
347 typedef CFX_RTemplate<FX_FLOAT> CFX_RectF; 551 typedef CFX_RTemplate<FX_FLOAT> CFX_RectF;
348 typedef CFX_RTemplate<int32_t>* FX_LPRECT; 552 typedef CFX_RTemplate<int32_t>* FX_LPRECT;
349 typedef CFX_RTemplate<FX_FLOAT>* FX_LPRECTF; 553 typedef CFX_RTemplate<FX_FLOAT>* FX_LPRECTF;
350 typedef CFX_RTemplate<int32_t> const* FX_LPCRECT; 554 typedef CFX_RTemplate<int32_t> const* FX_LPCRECT;
351 typedef CFX_RTemplate<FX_FLOAT> const* FX_LPCRECTF; 555 typedef CFX_RTemplate<FX_FLOAT> const* FX_LPCRECTF;
352 typedef CFX_ArrayTemplate<CFX_RectF> CFX_RectFArray; 556 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 557
545 class CFX_Matrix { 558 class CFX_Matrix {
546 public: 559 public:
547 CFX_Matrix() { SetIdentity(); } 560 CFX_Matrix() { SetIdentity(); }
548 561
549 CFX_Matrix(FX_FLOAT a1, 562 CFX_Matrix(FX_FLOAT a1,
550 FX_FLOAT b1, 563 FX_FLOAT b1,
551 FX_FLOAT c1, 564 FX_FLOAT c1,
552 FX_FLOAT d1, 565 FX_FLOAT d1,
553 FX_FLOAT e1, 566 FX_FLOAT e1,
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 public: 678 public:
666 FX_FLOAT a; 679 FX_FLOAT a;
667 FX_FLOAT b; 680 FX_FLOAT b;
668 FX_FLOAT c; 681 FX_FLOAT c;
669 FX_FLOAT d; 682 FX_FLOAT d;
670 FX_FLOAT e; 683 FX_FLOAT e;
671 FX_FLOAT f; 684 FX_FLOAT f;
672 }; 685 };
673 686
674 #endif // CORE_INCLUDE_FXCRT_FX_COORDINATES_H_ 687 #endif // CORE_INCLUDE_FXCRT_FX_COORDINATES_H_
OLDNEW
« no previous file with comments | « core/include/fpdfapi/fpdf_resource.h ('k') | core/src/fpdfapi/fpdf_font/fpdf_font.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698