diff options
author | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-11 09:07:01 +0000 |
---|---|---|
committer | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-11 09:07:01 +0000 |
commit | e5c45f6c5f6778f1da0053ccbb8d95a15bdbcc14 (patch) | |
tree | d319bff466a413f5e090a542e058ce7ef7ed2b85 /ui/gfx/point_base.h | |
parent | 394633964593be10c6bb220c73083e1b8308bf23 (diff) | |
download | chromium_src-e5c45f6c5f6778f1da0053ccbb8d95a15bdbcc14.zip chromium_src-e5c45f6c5f6778f1da0053ccbb8d95a15bdbcc14.tar.gz chromium_src-e5c45f6c5f6778f1da0053ccbb8d95a15bdbcc14.tar.bz2 |
Use template for Point/Size/Rect and remove duplicates
BUG=114664
TEST=none
Review URL: https://chromiumcodereview.appspot.com/10014027
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@131737 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/gfx/point_base.h')
-rw-r--r-- | ui/gfx/point_base.h | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/ui/gfx/point_base.h b/ui/gfx/point_base.h new file mode 100644 index 0000000..82936ee --- /dev/null +++ b/ui/gfx/point_base.h @@ -0,0 +1,83 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef UI_GFX_POINT_BASE_H_ +#define UI_GFX_POINT_BASE_H_ +#pragma once + +#include <string> + +#include "build/build_config.h" +#include "ui/base/ui_export.h" + +namespace gfx { + +// A point has an x and y coordinate. +template<typename Class, typename Type> +class UI_EXPORT PointBase { + public: + Type x() const { return x_; } + Type y() const { return y_; } + + void SetPoint(Type x, Type y) { + x_ = x; + y_ = y; + } + + void set_x(Type x) { x_ = x; } + void set_y(Type y) { y_ = y; } + + void Offset(Type delta_x, Type delta_y) { + x_ += delta_x; + y_ += delta_y; + } + + Class Add(const Class& other) const{ + const Class* orig = static_cast<const Class*>(this); + Class copy = *orig; + copy.Offset(other.x_, other.y_); + return copy; + } + + Class Subtract(const Class& other) const { + const Class* orig = static_cast<const Class*>(this); + Class copy = *orig; + copy.Offset(-other.x_, -other.y_); + return copy; + } + + Class Middle(const Class& other) const { + return Class((x_ + other.x_) / 2, (y_ + other.y_) / 2); + } + + bool operator==(const Class& rhs) const { + return x_ == rhs.x_ && y_ == rhs.y_; + } + + bool operator!=(const Class& rhs) const { + return !(*this == rhs); + } + + // A point is less than another point if its y-value is closer + // to the origin. If the y-values are the same, then point with + // the x-value closer to the origin is considered less than the + // other. + // This comparison is required to use Point in sets, or sorted + // vectors. + bool operator<(const Class& rhs) const { + return (y_ == rhs.y_) ? (x_ < rhs.x_) : (y_ < rhs.y_); + } + + protected: + PointBase(Type x, Type y); + virtual ~PointBase() {} + + private: + Type x_; + Type y_; +}; + +} // namespace gfx + +#endif // UI_GFX_POINT_BASE_H_ |