Fix for moving to previous url from PDF page in OOP case.
[chromium-blink-merge.git] / ppapi / cpp / rect.h
blob15bb1f5205cc86d485620b91cdbd59a53ac4a1e4
1 // Copyright (c) 2011 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.
5 #ifndef PPAPI_CPP_RECT_H_
6 #define PPAPI_CPP_RECT_H_
8 #include "ppapi/c/pp_rect.h"
9 #include "ppapi/cpp/point.h"
10 #include "ppapi/cpp/size.h"
12 /// @file
13 /// This file defines the APIs for creating a 2 dimensional rectangle.
15 namespace pp {
17 /// A 2 dimensional rectangle. A rectangle is represented by x and y (which
18 /// identifies the upper-left corner of the rectangle), width, and height.
19 class Rect {
20 public:
22 /// The default constructor. Creates a <code>Rect</code> in the upper-left
23 /// at 0,0 with height and width of 0.
24 Rect() {
25 rect_.point.x = 0;
26 rect_.point.y = 0;
27 rect_.size.width = 0;
28 rect_.size.height = 0;
31 /// A constructor accepting a reference to a <code>PP_Rect and</code>
32 /// converting the <code>PP_Rect</code> to a <code>Rect</code>. This is an
33 /// implicit conversion constructor.
34 ///
35 /// @param[in] rect A <code>PP_Rect</code>.
36 Rect(const PP_Rect& rect) { // Implicit.
37 set_x(rect.point.x);
38 set_y(rect.point.y);
39 set_width(rect.size.width);
40 set_height(rect.size.height);
43 /// A constructor accepting two int32_t values for width and height and
44 /// converting them to a <code>Rect</code> in the upper-left starting
45 /// coordinate of 0,0.
46 ///
47 /// @param[in] w An int32_t value representing a width.
48 /// @param[in] h An int32_t value representing a height.
49 Rect(int32_t w, int32_t h) {
50 set_x(0);
51 set_y(0);
52 set_width(w);
53 set_height(h);
56 /// A constructor accepting four int32_t values for width, height, x, and y.
57 ///
58 /// @param[in] x An int32_t value representing a horizontal coordinate
59 /// of a point, starting with 0 as the left-most coordinate.
60 /// @param[in] y An int32_t value representing a vertical coordinate
61 /// of a point, starting with 0 as the top-most coordinate.
62 /// @param[in] w An int32_t value representing a width.
63 /// @param[in] h An int32_t value representing a height.
64 Rect(int32_t x, int32_t y, int32_t w, int32_t h) {
65 set_x(x);
66 set_y(y);
67 set_width(w);
68 set_height(h);
71 /// A constructor accepting a pointer to a Size and converting the
72 /// <code>Size</code> to a <code>Rect</code> in the upper-left starting
73 /// coordinate of 0,0.
74 ///
75 /// @param[in] s A pointer to a <code>Size</code>.
76 explicit Rect(const Size& s) {
77 set_x(0);
78 set_y(0);
79 set_size(s);
82 /// A constructor accepting a pointer to a <code>Point</code> representing
83 /// the origin of the rectangle and a pointer to a <code>Size</code>
84 /// representing the height and width.
85 ///
86 /// @param[in] origin A pointer to a <code>Point</code> representing the
87 /// upper-left starting coordinate.
88 /// @param[in] size A pointer to a <code>Size</code> representing the height
89 /// and width.
90 Rect(const Point& origin, const Size& size) {
91 set_point(origin);
92 set_size(size);
95 /// Destructor.
96 ~Rect() {
99 /// PP_Rect() allows implicit conversion of a <code>Rect</code> to a
100 /// <code>PP_Rect</code>.
102 /// @return A <code>Point</code>.
103 operator PP_Rect() const {
104 return rect_;
107 /// Getter function for returning the internal <code>PP_Rect</code> struct.
109 /// @return A const reference to the internal <code>PP_Rect</code> struct.
110 const PP_Rect& pp_rect() const {
111 return rect_;
114 /// Getter function for returning the internal <code>PP_Rect</code> struct.
116 /// @return A mutable reference to the <code>PP_Rect</code> struct.
117 PP_Rect& pp_rect() {
118 return rect_;
122 /// Getter function for returning the value of x.
124 /// @return The value of x for this <code>Point</code>.
125 int32_t x() const {
126 return rect_.point.x;
129 /// Setter function for setting the value of x.
131 /// @param[in] in_x A new x value.
132 void set_x(int32_t in_x) {
133 rect_.point.x = in_x;
136 /// Getter function for returning the value of y.
138 /// @return The value of y for this <code>Point</code>.
139 int32_t y() const {
140 return rect_.point.y;
143 /// Setter function for setting the value of y.
145 /// @param[in] in_y A new y value.
146 void set_y(int32_t in_y) {
147 rect_.point.y = in_y;
150 /// Getter function for returning the value of width.
152 /// @return The value of width for this <code>Rect</code>.
153 int32_t width() const {
154 return rect_.size.width;
157 /// Setter function for setting the value of width.
159 /// @param[in] w A new width value.
160 void set_width(int32_t w) {
161 if (w < 0) {
162 PP_DCHECK(w >= 0);
163 w = 0;
165 rect_.size.width = w;
168 /// Getter function for returning the value of height.
170 /// @return The value of height for this <code>Rect</code>.
171 int32_t height() const {
172 return rect_.size.height;
175 /// Setter function for setting the value of height.
177 /// @param[in] h A new width height.
178 void set_height(int32_t h) {
179 if (h < 0) {
180 PP_DCHECK(h >= 0);
181 h = 0;
183 rect_.size.height = h;
186 /// Getter function for returning the <code>Point</code>.
188 /// @return A <code>Point</code>.
189 Point point() const {
190 return Point(rect_.point);
193 /// Setter function for setting the value of the <code>Point</code>.
195 /// @param[in] origin A <code>Point</code> representing the upper-left
196 /// starting coordinate.
197 void set_point(const Point& origin) {
198 rect_.point = origin;
201 /// Getter function for returning the <code>Size</code>.
203 /// @return The size of the rectangle.
204 Size size() const {
205 return Size(rect_.size);
208 /// Setter function for setting the <code>Size</code>.
210 /// @param[in] s A pointer to a <code>Size</code> representing the height
211 /// and width.
212 void set_size(const Size& s) {
213 rect_.size.width = s.width();
214 rect_.size.height = s.height();
217 /// Getter function to get the upper-bound for the x-coordinates of the
218 /// rectangle. Note that this coordinate value is one past the highest x
219 /// value of pixels in the rectangle. This loop will access all the pixels
220 /// in a horizontal line in the rectangle:
221 /// <code>for (int32_t x = rect.x(); x < rect.right(); ++x) {}</code>
223 /// @return The value of x + width for this point.
224 int32_t right() const {
225 return x() + width();
228 /// Getter function to get the upper-bound for the y-coordinates of the
229 /// rectangle. Note that this coordinate value is one past the highest xy
230 /// value of pixels in the rectangle. This loop will access all the pixels
231 /// in a horizontal line in the rectangle:
232 /// <code>for (int32_t y = rect.y(); y < rect.bottom(); ++y) {}</code>
234 /// @return The value of y + height for this point.
235 int32_t bottom() const {
236 return y() + height();
239 /// Setter function for setting the value of the <code>Rect</code>.
241 /// @param[in] x A new x value.
242 /// @param[in] y A new y value.
243 /// @param[in] w A new width value.
244 /// @param[in] h A new height value.
245 void SetRect(int32_t x, int32_t y, int32_t w, int32_t h) {
246 set_x(x);
247 set_y(y);
248 set_width(w);
249 set_height(h);
252 /// Setter function for setting the value of the <code>Rect</code>.
254 /// @param[in] rect A pointer to a <code>PP_Rect</code>.
255 void SetRect(const PP_Rect& rect) {
256 rect_ = rect;
259 /// Inset() shrinks the rectangle by a horizontal and vertical
260 /// distance on all sides.
262 /// @param[in] horizontal An int32_t value representing a horizontal
263 /// shrinking distance.
264 /// @param[in] vertical An int32_t value representing a vertical
265 /// shrinking distance.
266 void Inset(int32_t horizontal, int32_t vertical) {
267 Inset(horizontal, vertical, horizontal, vertical);
270 /// Inset() shrinks the rectangle by the specified amount on each
271 /// side.
273 /// @param[in] left An int32_t value representing a left
274 /// shrinking distance.
275 /// @param[in] top An int32_t value representing a top
276 /// shrinking distance.
277 /// @param[in] right An int32_t value representing a right
278 /// shrinking distance.
279 /// @param[in] bottom An int32_t value representing a bottom
280 /// shrinking distance.
281 void Inset(int32_t left, int32_t top, int32_t right, int32_t bottom);
283 /// Offset() moves the rectangle by a horizontal and vertical distance.
285 /// @param[in] horizontal An int32_t value representing a horizontal
286 /// move distance.
287 /// @param[in] vertical An int32_t value representing a vertical
288 /// move distance.
289 void Offset(int32_t horizontal, int32_t vertical);
291 /// Offset() moves the rectangle by a horizontal and vertical distance.
293 /// @param[in] point A pointer to a <code>Point</code> representing the
294 /// horizontal and vertical move distances.
295 void Offset(const Point& point) {
296 Offset(point.x(), point.y());
299 /// IsEmpty() determines if the area of a rectangle is zero. Returns true if
300 /// the area of the rectangle is zero.
302 /// @return true if the area of the rectangle is zero.
303 bool IsEmpty() const {
304 return rect_.size.width == 0 || rect_.size.height == 0;
307 /// Contains() determines if the point identified by point_x and point_y
308 /// falls inside this rectangle. The point (x, y) is inside the rectangle,
309 /// but the point (x + width, y + height) is not.
311 /// @param[in] point_x An int32_t value representing a x value.
312 /// @param[in] point_y An int32_t value representing a y value.
314 /// @return true if the point_x and point_y fall inside the rectangle.
315 bool Contains(int32_t point_x, int32_t point_y) const;
317 /// Contains() determines if the specified point is contained by this
318 /// rectangle.
320 /// @param[in] point A pointer to a Point representing a 2D coordinate.
322 /// @return true if the point_x and point_y fall inside the rectangle.
323 bool Contains(const Point& point) const {
324 return Contains(point.x(), point.y());
327 /// Contains() determines if this rectangle contains the specified rectangle.
329 /// @param[in] rect A pointer to a <code>Rect</code>.
331 /// @return true if the rectangle fall inside this rectangle.
332 bool Contains(const Rect& rect) const;
334 /// Intersects() determines if this rectangle intersects the specified
335 /// rectangle.
337 /// @param[in] rect A pointer to a <code>Rect</code>.
339 /// @return true if the rectangle intersects this rectangle.
340 bool Intersects(const Rect& rect) const;
342 /// Intersect() computes the intersection of this rectangle with the given
343 /// rectangle.
345 /// @param[in] rect A pointer to a <code>Rect</code>.
347 /// @return A <code>Rect</code> representing the intersection.
348 Rect Intersect(const Rect& rect) const;
350 /// Union() computes the union of this rectangle with the given rectangle.
351 /// The union is the smallest rectangle containing both rectangles.
353 /// @param[in] rect A pointer to a <code>Rect</code>.
355 /// @return A <code>Rect</code> representing the union.
356 Rect Union(const Rect& rect) const;
358 /// Subtract() computes the rectangle resulting from subtracting
359 /// <code>rect</code> from this Rect. If <code>rect</code>does not intersect
360 /// completely in either the x or y direction, then <code>*this</code> is
361 /// returned. If <code>rect</code> contains <code>this</code>, then an empty
362 /// <code>Rect</code> is returned.
364 /// @param[in] rect A pointer to a <code>Rect</code>.
366 /// @return A <code>Rect</code> representing the subtraction.
367 Rect Subtract(const Rect& rect) const;
369 /// AdjustToFit() fits as much of the receiving rectangle within
370 /// the supplied rectangle as possible, returning the result. For example,
371 /// if the receiver had a x-location of 2 and a width of 4, and the supplied
372 /// rectangle had an x-location of 0 with a width of 5, the returned
373 /// rectangle would have an x-location of 1 with a width of 4.
375 /// @param[in] rect A pointer to a <code>Rect</code>.
377 /// @return A <code>Rect</code> representing the difference between this
378 /// rectangle and the receiving rectangle.
379 Rect AdjustToFit(const Rect& rect) const;
381 /// CenterPoint() determines the center of this rectangle.
383 /// @return A <code>Point</code> representing the center of this rectangle.
384 Point CenterPoint() const;
386 /// SharesEdgeWith() determines if this rectangle shares an entire edge
387 /// (same width or same height) with the given rectangle, and the
388 /// rectangles do not overlap.
390 /// @param[in] rect A pointer to a <code>Rect</code>.
392 /// @return true if this rectangle and supplied rectangle share an edge.
393 bool SharesEdgeWith(const Rect& rect) const;
395 private:
396 PP_Rect rect_;
399 /// A 2 dimensional rectangle. A rectangle is represented by x and y (which
400 /// identifies the upper-left corner of the rectangle), width, and height.
401 class FloatRect {
402 public:
404 /// The default constructor. Creates a <code>Rect</code> in the upper-left
405 /// at 0.0f,0.0f with height and width of 0.0f.
406 FloatRect() {
407 rect_.point.x = 0.0f;
408 rect_.point.y = 0.0f;
409 rect_.size.width = 0.0f;
410 rect_.size.height = 0.0f;
413 /// A constructor accepting a reference to a <code>PP_FloatRect and</code>
414 /// converting the <code>PP_FloatRect</code> to a <code>FloatRect</code>. This
415 /// is an implicit conversion constructor.
417 /// @param[in] rect A <code>PP_FloatRect</code>.
418 FloatRect(const PP_FloatRect& rect) { // Implicit.
419 set_x(rect.point.x);
420 set_y(rect.point.y);
421 set_width(rect.size.width);
422 set_height(rect.size.height);
425 /// A constructor accepting two float values for width and height and
426 /// converting them to a <code>FloatRect</code> in the upper-left starting
427 /// coordinate of 0.0f, 0.0f.
429 /// @param[in] w An float value representing a width.
430 /// @param[in] h An float value representing a height.
431 FloatRect(float w, float h) {
432 set_x(0);
433 set_y(0);
434 set_width(w);
435 set_height(h);
438 /// A constructor accepting four float values for width, height, x, and y.
440 /// @param[in] x An float value representing a horizontal coordinate
441 /// of a point, starting with 0.0f as the left-most coordinate.
442 /// @param[in] y An float value representing a vertical coordinate
443 /// of a point, starting with 0.0f as the top-most coordinate.
444 /// @param[in] w An float value representing a width.
445 /// @param[in] h An float value representing a height.
446 FloatRect(float x, float y, float w, float h) {
447 set_x(x);
448 set_y(y);
449 set_width(w);
450 set_height(h);
453 /// A constructor accepting a pointer to a FloatSize and converting the
454 /// <code>FloatSize</code> to a <code>FloatRect</code> in the upper-left
455 /// starting coordinate of 0.0f,0.0f.
457 /// @param[in] s A pointer to a <code>FloatSize</code>.
458 explicit FloatRect(const FloatSize& s) {
459 set_x(0);
460 set_y(0);
461 set_size(s);
464 /// A constructor accepting a pointer to a <code>FloatPoint</code>
465 /// representing the origin of the rectangle and a pointer to a
466 /// <code>FloatSize</code> representing the height and width.
468 /// @param[in] origin A pointer to a <code>FloatPoint</code> representing the
469 /// upper-left starting coordinate.
470 /// @param[in] size A pointer to a <code>FloatSize</code> representing the
471 /// height and width.
472 FloatRect(const FloatPoint& origin, const FloatSize& size) {
473 set_point(origin);
474 set_size(size);
477 /// Destructor.
478 ~FloatRect() {
481 /// PP_FloatRect() allows implicit conversion of a <code>FloatRect</code> to a
482 /// <code>PP_FloatRect</code>.
484 /// @return A <code>Point</code>.
485 operator PP_FloatRect() const {
486 return rect_;
489 /// Getter function for returning the internal <code>PP_FloatRect</code>
490 /// struct.
492 /// @return A const reference to the internal <code>PP_FloatRect</code>
493 /// struct.
494 const PP_FloatRect& pp_float_rect() const {
495 return rect_;
498 /// Getter function for returning the internal <code>PP_FloatRect</code>
499 /// struct.
501 /// @return A mutable reference to the <code>PP_FloatRect</code> struct.
502 PP_FloatRect& pp_float_rect() {
503 return rect_;
507 /// Getter function for returning the value of x.
509 /// @return The value of x for this <code>FloatPoint</code>.
510 float x() const {
511 return rect_.point.x;
514 /// Setter function for setting the value of x.
516 /// @param[in] in_x A new x value.
517 void set_x(float in_x) {
518 rect_.point.x = in_x;
521 /// Getter function for returning the value of y.
523 /// @return The value of y for this <code>FloatPoint</code>.
524 float y() const {
525 return rect_.point.y;
528 /// Setter function for setting the value of y.
530 /// @param[in] in_y A new y value.
531 void set_y(float in_y) {
532 rect_.point.y = in_y;
535 /// Getter function for returning the value of width.
537 /// @return The value of width for this <code>FloatRect</code>.
538 float width() const {
539 return rect_.size.width;
542 /// Setter function for setting the value of width.
544 /// @param[in] w A new width value.
545 void set_width(float w) {
546 if (w < 0.0f) {
547 PP_DCHECK(w >= 0.0f);
548 w = 0.0f;
550 rect_.size.width = w;
553 /// Getter function for returning the value of height.
555 /// @return The value of height for this <code>FloatRect</code>.
556 float height() const {
557 return rect_.size.height;
560 /// Setter function for setting the value of height.
562 /// @param[in] h A new width height.
563 void set_height(float h) {
564 if (h < 0.0f) {
565 PP_DCHECK(h >= 0.0f);
566 h = 0.0f;
568 rect_.size.height = h;
571 /// Getter function for returning the <code>FloatPoint</code>.
573 /// @return A <code>FloatPoint</code>.
574 FloatPoint point() const {
575 return FloatPoint(rect_.point);
578 /// Setter function for setting the value of the <code>FloatPoint</code>.
580 /// @param[in] origin A <code>FloatPoint</code> representing the upper-left
581 /// starting coordinate.
582 void set_point(const FloatPoint& origin) {
583 rect_.point = origin;
586 /// Getter function for returning the <code>FloatSize</code>.
588 /// @return The size of the rectangle.
589 FloatSize Floatsize() const {
590 return FloatSize(rect_.size);
593 /// Setter function for setting the <code>FloatSize</code>.
595 /// @param[in] s A pointer to a <code>FloatSize</code> representing the height
596 /// and width.
597 void set_size(const FloatSize& s) {
598 rect_.size.width = s.width();
599 rect_.size.height = s.height();
602 /// Getter function to get the upper-bound for the x-coordinates of the
603 /// rectangle. Note that this coordinate value is one past the highest x
604 /// value of pixels in the rectangle. This loop will access all the pixels
605 /// in a horizontal line in the rectangle:
606 /// <code>for (float x = rect.x(); x < rect.right(); ++x) {}</code>
608 /// @return The value of x + width for this point.
609 float right() const {
610 return x() + width();
613 /// Getter function to get the upper-bound for the y-coordinates of the
614 /// rectangle. Note that this coordinate value is one past the highest xy
615 /// value of pixels in the rectangle. This loop will access all the pixels
616 /// in a horizontal line in the rectangle:
617 /// <code>for (float y = rect.y(); y < rect.bottom(); ++y) {}</code>
619 /// @return The value of y + height for this point.
620 float bottom() const {
621 return y() + height();
624 /// Setter function for setting the value of the <code>FloatRect</code>.
626 /// @param[in] x A new x value.
627 /// @param[in] y A new y value.
628 /// @param[in] w A new width value.
629 /// @param[in] h A new height value.
630 void SetRect(float x, float y, float w, float h) {
631 set_x(x);
632 set_y(y);
633 set_width(w);
634 set_height(h);
637 /// Setter function for setting the value of the <code>FloatRect</code>.
639 /// @param[in] rect A pointer to a <code>PP_FloatRect</code>.
640 void SetRect(const PP_FloatRect& rect) {
641 rect_ = rect;
644 /// Inset() shrinks the rectangle by a horizontal and vertical
645 /// distance on all sides.
647 /// @param[in] horizontal An float value representing a horizontal
648 /// shrinking distance.
649 /// @param[in] vertical An float value representing a vertical
650 /// shrinking distance.
651 void Inset(float horizontal, float vertical) {
652 Inset(horizontal, vertical, horizontal, vertical);
655 /// Inset() shrinks the rectangle by the specified amount on each
656 /// side.
658 /// @param[in] left An float value representing a left
659 /// shrinking distance.
660 /// @param[in] top An float value representing a top
661 /// shrinking distance.
662 /// @param[in] right An float value representing a right
663 /// shrinking distance.
664 /// @param[in] bottom An float value representing a bottom
665 /// shrinking distance.
666 void Inset(float left, float top, float right, float bottom);
668 /// Offset() moves the rectangle by a horizontal and vertical distance.
670 /// @param[in] horizontal An float value representing a horizontal
671 /// move distance.
672 /// @param[in] vertical An float value representing a vertical
673 /// move distance.
674 void Offset(float horizontal, float vertical);
676 /// Offset() moves the rectangle by a horizontal and vertical distance.
678 /// @param[in] point A pointer to a <code>FloatPoint</code> representing the
679 /// horizontal and vertical move distances.
680 void Offset(const FloatPoint& point) {
681 Offset(point.x(), point.y());
684 /// IsEmpty() determines if the area of a rectangle is zero. Returns true if
685 /// the area of the rectangle is zero.
687 /// @return true if the area of the rectangle is zero.
688 bool IsEmpty() const {
689 return rect_.size.width == 0.0f || rect_.size.height == 0.0f;
692 /// Contains() determines if the point identified by point_x and point_y
693 /// falls inside this rectangle. The point (x, y) is inside the rectangle,
694 /// but the point (x + width, y + height) is not.
696 /// @param[in] point_x An float value representing a x value.
697 /// @param[in] point_y An float value representing a y value.
699 /// @return true if the point_x and point_y fall inside the rectangle.
700 bool Contains(float point_x, float point_y) const;
702 /// Contains() determines if the specified point is contained by this
703 /// rectangle.
705 /// @param[in] point A pointer to a Point representing a 2D coordinate.
707 /// @return true if the point_x and point_y fall inside the rectangle.
708 bool Contains(const FloatPoint& point) const {
709 return Contains(point.x(), point.y());
712 /// Contains() determines if this rectangle contains the specified rectangle.
714 /// @param[in] rect A pointer to a <code>FloatRect</code>.
716 /// @return true if the rectangle fall inside this rectangle.
717 bool Contains(const FloatRect& rect) const;
719 /// Intersects() determines if this rectangle intersects the specified
720 /// rectangle.
722 /// @param[in] rect A pointer to a <code>FloatRect</code>.
724 /// @return true if the rectangle intersects this rectangle.
725 bool Intersects(const FloatRect& rect) const;
727 /// Intersect() computes the intersection of this rectangle with the given
728 /// rectangle.
730 /// @param[in] rect A pointer to a <code>FloatRect</code>.
732 /// @return A <code>FloatRect</code> representing the intersection.
733 FloatRect Intersect(const FloatRect& rect) const;
735 /// Union() computes the union of this rectangle with the given rectangle.
736 /// The union is the smallest rectangle containing both rectangles.
738 /// @param[in] rect A pointer to a <code>FloatRect</code>.
740 /// @return A <code>FloatRect</code> representing the union.
741 FloatRect Union(const FloatRect& rect) const;
743 /// Subtract() computes the rectangle resulting from subtracting
744 /// <code>rect</code> from this Rect. If <code>rect</code>does not intersect
745 /// completely in either the x or y direction, then <code>*this</code> is
746 /// returned. If <code>rect</code> contains <code>this</code>, then an empty
747 /// <code>Rect</code> is returned.
749 /// @param[in] rect A pointer to a <code>FloatRect</code>.
751 /// @return A <code>FloatRect</code> representing the subtraction.
752 FloatRect Subtract(const FloatRect& rect) const;
754 /// AdjustToFit() fits as much of the receiving rectangle within
755 /// the supplied rectangle as possible, returning the result. For example,
756 /// if the receiver had a x-location of 2 and a width of 4, and the supplied
757 /// rectangle had an x-location of 0 with a width of 5, the returned
758 /// rectangle would have an x-location of 1 with a width of 4.
760 /// @param[in] rect A pointer to a <code>FloatRect</code>.
762 /// @return A <code>FloatRect</code> representing the difference between this
763 /// rectangle and the receiving rectangle.
764 FloatRect AdjustToFit(const FloatRect& rect) const;
766 /// CenterPoint() determines the center of this rectangle.
768 /// @return A <code>FloatPoint</code> representing the center of this
769 /// rectangle.
770 FloatPoint CenterPoint() const;
772 /// SharesEdgeWith() determines if this rectangle shares an entire edge
773 /// (same width or same height) with the given rectangle, and the
774 /// rectangles do not overlap.
776 /// @param[in] rect A pointer to a <code>FloatRect</code>.
778 /// @return true if this rectangle and supplied rectangle share an edge.
779 bool SharesEdgeWith(const FloatRect& rect) const;
781 private:
782 PP_FloatRect rect_;
785 } // namespace pp
787 /// This function determines whether the x, y, width, and height values of two
788 /// rectangles and are equal.
790 /// @param[in] lhs The <code>Rect</code> on the left-hand side of the equation.
791 /// @param[in] rhs The <code>Rect</code> on the right-hand side of the equation.
793 /// @return true if they are equal, false if unequal.
794 inline bool operator==(const pp::Rect& lhs, const pp::Rect& rhs) {
795 return lhs.x() == rhs.x() &&
796 lhs.y() == rhs.y() &&
797 lhs.width() == rhs.width() &&
798 lhs.height() == rhs.height();
801 /// This function determines whether two Rects are not equal.
803 /// @param[in] lhs The <code>Rect</code> on the left-hand side of the equation.
804 /// @param[in] rhs The <code>Rect</code> on the right-hand side of the
805 /// equation.
807 /// @return true if the given Rects are equal, otherwise false.
808 inline bool operator!=(const pp::Rect& lhs, const pp::Rect& rhs) {
809 return !(lhs == rhs);
812 /// This function determines whether the x, y, width, and height values of two
813 /// rectangles and are equal.
815 /// @param[in] lhs The <code>FloatRect</code> on the left-hand side of the
816 /// equation.
817 /// @param[in] rhs The <code>FloatRect</code> on the right-hand side of the
818 /// equation.
820 /// @return true if they are equal, false if unequal.
821 inline bool operator==(const pp::FloatRect& lhs, const pp::FloatRect& rhs) {
822 return lhs.x() == rhs.x() &&
823 lhs.y() == rhs.y() &&
824 lhs.width() == rhs.width() &&
825 lhs.height() == rhs.height();
828 /// This function determines whether two Rects are not equal.
830 /// @param[in] lhs The <code>FloatRect</code> on the left-hand side of the
831 /// equation.
832 /// @param[in] rhs The <code>FloatRect</code> on the right-hand side of the
833 /// equation.
835 /// @return true if the given Rects are equal, otherwise false.
836 inline bool operator!=(const pp::FloatRect& lhs, const pp::FloatRect& rhs) {
837 return !(lhs == rhs);
840 #endif