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

Unified Diff: ui/gfx/rect_base_impl.h

Issue 11110004: Make gfx::Rect class operations consistently mutate the class they are called on. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: cc/ fixes Created 8 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/gfx/rect_base.h ('k') | ui/gfx/rect_f.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gfx/rect_base_impl.h
diff --git a/ui/gfx/rect_base_impl.h b/ui/gfx/rect_base_impl.h
index ab71f4278daf53f66034cb48ee1674449f0524ef..291929df4654df2c2684488530a2ece06f1c2e1c 100644
--- a/ui/gfx/rect_base_impl.h
+++ b/ui/gfx/rect_base_impl.h
@@ -165,8 +165,13 @@ template<typename Class,
typename SizeClass,
typename InsetsClass,
typename Type>
-Class RectBase<Class, PointClass, SizeClass, InsetsClass, Type>::Intersect(
- const Class& rect) const {
+void RectBase<Class, PointClass, SizeClass, InsetsClass, Type>::Intersect(
+ const Class& rect) {
+ if (IsEmpty() || rect.IsEmpty()) {
+ SetRect(0, 0, 0, 0);
+ return;
+ }
+
Type rx = std::max(x(), rect.x());
Type ry = std::max(y(), rect.y());
Type rr = std::min(right(), rect.right());
@@ -175,7 +180,7 @@ Class RectBase<Class, PointClass, SizeClass, InsetsClass, Type>::Intersect(
if (rx >= rr || ry >= rb)
rx = ry = rr = rb = 0; // non-intersecting
- return Class(rx, ry, rr - rx, rb - ry);
+ SetRect(rx, ry, rr - rx, rb - ry);
}
template<typename Class,
@@ -183,20 +188,21 @@ template<typename Class,
typename SizeClass,
typename InsetsClass,
typename Type>
-Class RectBase<Class, PointClass, SizeClass, InsetsClass, Type>::Union(
- const Class& rect) const {
- // special case empty rects...
- if (IsEmpty())
- return rect;
+void RectBase<Class, PointClass, SizeClass, InsetsClass, Type>::Union(
+ const Class& rect) {
+ if (IsEmpty()) {
+ *this = rect;
+ return;
+ }
if (rect.IsEmpty())
- return *static_cast<const Class*>(this);
+ return;
Type rx = std::min(x(), rect.x());
Type ry = std::min(y(), rect.y());
Type rr = std::max(right(), rect.right());
Type rb = std::max(bottom(), rect.bottom());
- return Class(rx, ry, rr - rx, rb - ry);
+ SetRect(rx, ry, rr - rx, rb - ry);
}
template<typename Class,
@@ -204,13 +210,14 @@ template<typename Class,
typename SizeClass,
typename InsetsClass,
typename Type>
-Class RectBase<Class, PointClass, SizeClass, InsetsClass, Type>::Subtract(
- const Class& rect) const {
- // boundary cases:
+void RectBase<Class, PointClass, SizeClass, InsetsClass, Type>::Subtract(
+ const Class& rect) {
if (!Intersects(rect))
- return *static_cast<const Class*>(this);
- if (rect.Contains(*static_cast<const Class*>(this)))
- return Class();
+ return;
+ if (rect.Contains(*static_cast<const Class*>(this))) {
+ SetRect(0, 0, 0, 0);
+ return;
+ }
Type rx = x();
Type ry = y();
@@ -232,7 +239,7 @@ Class RectBase<Class, PointClass, SizeClass, InsetsClass, Type>::Subtract(
rb = rect.y();
}
}
- return Class(rx, ry, rr - rx, rb - ry);
+ SetRect(rx, ry, rr - rx, rb - ry);
}
template<typename Class,
@@ -240,15 +247,15 @@ template<typename Class,
typename SizeClass,
typename InsetsClass,
typename Type>
-Class RectBase<Class, PointClass, SizeClass, InsetsClass, Type>::AdjustToFit(
- const Class& rect) const {
+void RectBase<Class, PointClass, SizeClass, InsetsClass, Type>::AdjustToFit(
+ const Class& rect) {
Type new_x = x();
Type new_y = y();
Type new_width = width();
Type new_height = height();
AdjustAlongAxis(rect.x(), rect.width(), &new_x, &new_width);
AdjustAlongAxis(rect.y(), rect.height(), &new_y, &new_height);
- return Class(new_x, new_y, new_width, new_height);
+ SetRect(new_x, new_y, new_width, new_height);
}
template<typename Class,
@@ -266,13 +273,13 @@ template<typename Class,
typename SizeClass,
typename InsetsClass,
typename Type>
-Class RectBase<Class, PointClass, SizeClass, InsetsClass, Type>::Center(
- const SizeClass& size) const {
+void RectBase<Class, PointClass, SizeClass, InsetsClass, Type>::
+ ClampToCenteredSize(const SizeClass& size) {
Type new_width = std::min(width(), size.width());
Type new_height = std::min(height(), size.height());
Type new_x = x() + (width() - new_width) / 2;
Type new_y = y() + (height() - new_height) / 2;
- return Class(new_x, new_y, new_width, new_height);
+ SetRect(new_x, new_y, new_width, new_height);
}
template<typename Class,
« no previous file with comments | « ui/gfx/rect_base.h ('k') | ui/gfx/rect_f.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698