summaryrefslogtreecommitdiff
path: root/core/fxcrt
diff options
context:
space:
mode:
Diffstat (limited to 'core/fxcrt')
-rw-r--r--core/fxcrt/fx_coordinates.cpp6
-rw-r--r--core/fxcrt/fx_coordinates.h138
-rw-r--r--core/fxcrt/fx_coordinates_unittest.cpp12
3 files changed, 56 insertions, 100 deletions
diff --git a/core/fxcrt/fx_coordinates.cpp b/core/fxcrt/fx_coordinates.cpp
index bd06ce1473..ad64f0b43e 100644
--- a/core/fxcrt/fx_coordinates.cpp
+++ b/core/fxcrt/fx_coordinates.cpp
@@ -205,6 +205,12 @@ std::ostream& operator<<(std::ostream& os, const CFX_FloatRect& rect) {
<< rect.left << ", bot " << rect.bottom << ")]";
return os;
}
+
+std::ostream& operator<<(std::ostream& os, const CFX_RectF& rect) {
+ os << "rect[w " << rect.Width() << " x h " << rect.Height() << " (left "
+ << rect.left << ", top " << rect.top << ")]";
+ return os;
+}
#endif // NDEBUG
CFX_Matrix CFX_Matrix::GetInverse() const {
diff --git a/core/fxcrt/fx_coordinates.h b/core/fxcrt/fx_coordinates.h
index a458fa8b50..0b98ff2e43 100644
--- a/core/fxcrt/fx_coordinates.h
+++ b/core/fxcrt/fx_coordinates.h
@@ -363,79 +363,49 @@ std::ostream& operator<<(std::ostream& os, const CFX_FloatRect& rect);
#endif
// LTWH rectangles (y-axis runs downwards).
-template <class BaseType>
-class CFX_RTemplate {
+class CFX_RectF {
public:
- using PointType = CFX_PTemplate<BaseType>;
- using SizeType = CFX_STemplate<BaseType>;
- using VectorType = CFX_VTemplate<BaseType>;
- using RectType = CFX_RTemplate<BaseType>;
-
- CFX_RTemplate() : left(0), top(0), width(0), height(0) {}
- CFX_RTemplate(BaseType dst_left,
- BaseType dst_top,
- BaseType dst_width,
- BaseType dst_height)
+ using PointType = CFX_PointF;
+ using SizeType = CFX_SizeF;
+
+ CFX_RectF() : left(0), top(0), width(0), height(0) {}
+ CFX_RectF(float dst_left, float dst_top, float dst_width, float dst_height)
: left(dst_left), top(dst_top), width(dst_width), height(dst_height) {}
- CFX_RTemplate(BaseType dst_left, BaseType dst_top, const SizeType& dst_size)
+ CFX_RectF(float dst_left, float dst_top, const SizeType& dst_size)
: left(dst_left),
top(dst_top),
width(dst_size.width),
height(dst_size.height) {}
- CFX_RTemplate(const PointType& p, BaseType dst_width, BaseType dst_height)
+ CFX_RectF(const PointType& p, float dst_width, float dst_height)
: left(p.x), top(p.y), width(dst_width), height(dst_height) {}
- CFX_RTemplate(const PointType& p1, const SizeType& s2)
+ CFX_RectF(const PointType& p1, const SizeType& s2)
: left(p1.x), top(p1.y), width(s2.width), height(s2.height) {}
- CFX_RTemplate(const PointType& p1, const PointType& p2)
- : left(p1.x),
- top(p1.y),
- width(p2.width - p1.width),
- height(p2.height - p1.height) {
- Normalize();
- }
- CFX_RTemplate(const PointType& p, const VectorType& v)
- : left(p.x), top(p.y), width(v.x), height(v.y) {
- Normalize();
- }
-
- explicit CFX_RTemplate(const CFX_FloatRect& r)
- : left(static_cast<BaseType>(r.left)),
- top(static_cast<BaseType>(r.top)),
- width(static_cast<BaseType>(r.Width())),
- height(static_cast<BaseType>(r.Height())) {}
// NOLINTNEXTLINE(runtime/explicit)
- CFX_RTemplate(const RectType& other)
+ CFX_RectF(const CFX_RectF& other)
: left(other.left),
top(other.top),
width(other.width),
height(other.height) {}
- template <typename OtherType>
- CFX_RTemplate<OtherType> As() const {
- return CFX_RTemplate<OtherType>(
- static_cast<OtherType>(left), static_cast<OtherType>(top),
- static_cast<OtherType>(width), static_cast<OtherType>(height));
- }
-
void Reset() {
left = 0;
top = 0;
width = 0;
height = 0;
}
- RectType& operator+=(const PointType& p) {
+ CFX_RectF& operator+=(const PointType& p) {
left += p.x;
top += p.y;
return *this;
}
- RectType& operator-=(const PointType& p) {
+ CFX_RectF& operator-=(const PointType& p) {
left -= p.x;
top -= p.y;
return *this;
}
- BaseType right() const { return left + width; }
- BaseType bottom() const { return top + height; }
+ float right() const { return left + width; }
+ float bottom() const { return top + height; }
void Normalize() {
if (width < 0) {
left += width;
@@ -446,46 +416,46 @@ class CFX_RTemplate {
height = -height;
}
}
- void Offset(BaseType dx, BaseType dy) {
+ void Offset(float dx, float dy) {
left += dx;
top += dy;
}
- void Inflate(BaseType x, BaseType y) {
+ void Inflate(float x, float y) {
left -= x;
width += x * 2;
top -= y;
height += y * 2;
}
void Inflate(const PointType& p) { Inflate(p.x, p.y); }
- void Inflate(BaseType off_left,
- BaseType off_top,
- BaseType off_right,
- BaseType off_bottom) {
+ void Inflate(float off_left,
+ float off_top,
+ float off_right,
+ float off_bottom) {
left -= off_left;
top -= off_top;
width += off_left + off_right;
height += off_top + off_bottom;
}
- void Inflate(const RectType& rt) {
+ void Inflate(const CFX_RectF& rt) {
Inflate(rt.left, rt.top, rt.left + rt.width, rt.top + rt.height);
}
- void Deflate(BaseType x, BaseType y) {
+ void Deflate(float x, float y) {
left += x;
width -= x * 2;
top += y;
height -= y * 2;
}
void Deflate(const PointType& p) { Deflate(p.x, p.y); }
- void Deflate(BaseType off_left,
- BaseType off_top,
- BaseType off_right,
- BaseType off_bottom) {
+ void Deflate(float off_left,
+ float off_top,
+ float off_right,
+ float off_bottom) {
left += off_left;
top += off_top;
width -= off_left + off_right;
height -= off_top + off_bottom;
}
- void Deflate(const RectType& rt) {
+ void Deflate(const CFX_RectF& rt) {
Deflate(rt.left, rt.top, rt.top + rt.width, rt.top + rt.height);
}
bool IsEmpty() const { return width <= 0 || height <= 0; }
@@ -497,12 +467,12 @@ class CFX_RTemplate {
return p.x >= left && p.x < left + width && p.y >= top &&
p.y < top + height;
}
- bool Contains(const RectType& rt) const {
+ bool Contains(const CFX_RectF& rt) const {
return rt.left >= left && rt.right() <= right() && rt.top >= top &&
rt.bottom() <= bottom();
}
- BaseType Width() const { return width; }
- BaseType Height() const { return height; }
+ float Width() const { return width; }
+ float Height() const { return height; }
SizeType Size() const { return SizeType(width, height); }
PointType TopLeft() const { return PointType(left, top); }
PointType TopRight() const { return PointType(left + width, top); }
@@ -513,9 +483,9 @@ class CFX_RTemplate {
PointType Center() const {
return PointType(left + width / 2, top + height / 2);
}
- void Union(BaseType x, BaseType y) {
- BaseType r = right();
- BaseType b = bottom();
+ void Union(float x, float y) {
+ float r = right();
+ float b = bottom();
left = std::min(left, x);
top = std::min(top, y);
@@ -526,9 +496,9 @@ class CFX_RTemplate {
height = b - top;
}
void Union(const PointType& p) { Union(p.x, p.y); }
- void Union(const RectType& rt) {
- BaseType r = right();
- BaseType b = bottom();
+ void Union(const CFX_RectF& rt) {
+ float r = right();
+ float b = bottom();
left = std::min(left, rt.left);
top = std::min(top, rt.top);
@@ -538,9 +508,9 @@ class CFX_RTemplate {
width = r - left;
height = b - top;
}
- void Intersect(const RectType& rt) {
- BaseType r = right();
- BaseType b = bottom();
+ void Intersect(const CFX_RectF& rt) {
+ float r = right();
+ float b = bottom();
left = std::max(left, rt.left);
top = std::max(top, rt.top);
@@ -550,21 +520,21 @@ class CFX_RTemplate {
width = r - left;
height = b - top;
}
- bool IntersectWith(const RectType& rt) const {
- RectType rect = rt;
+ bool IntersectWith(const CFX_RectF& rt) const {
+ CFX_RectF rect = rt;
rect.Intersect(*this);
return !rect.IsEmpty();
}
- bool IntersectWith(const RectType& rt, float fEpsilon) const {
- RectType rect = rt;
+ bool IntersectWith(const CFX_RectF& rt, float fEpsilon) const {
+ CFX_RectF rect = rt;
rect.Intersect(*this);
return !rect.IsEmpty(fEpsilon);
}
- friend bool operator==(const RectType& rc1, const RectType& rc2) {
+ friend bool operator==(const CFX_RectF& rc1, const CFX_RectF& rc2) {
return rc1.left == rc2.left && rc1.top == rc2.top &&
rc1.width == rc2.width && rc1.height == rc2.height;
}
- friend bool operator!=(const RectType& rc1, const RectType& rc2) {
+ friend bool operator!=(const CFX_RectF& rc1, const CFX_RectF& rc2) {
return !(rc1 == rc2);
}
@@ -574,22 +544,14 @@ class CFX_RTemplate {
return CFX_FloatRect(left, top, right(), bottom());
}
- BaseType left;
- BaseType top;
- BaseType width;
- BaseType height;
+ float left;
+ float top;
+ float width;
+ float height;
};
-using CFX_Rect = CFX_RTemplate<int32_t>;
-using CFX_RectF = CFX_RTemplate<float>;
#ifndef NDEBUG
-template <class BaseType>
-std::ostream& operator<<(std::ostream& os,
- const CFX_RTemplate<BaseType>& rect) {
- os << "rect[w " << rect.Width() << " x h " << rect.Height() << " (left "
- << rect.left << ", top " << rect.top << ")]";
- return os;
-}
+std::ostream& operator<<(std::ostream& os, const CFX_RectF& rect);
#endif // NDEBUG
// The matrix is of the form:
diff --git a/core/fxcrt/fx_coordinates_unittest.cpp b/core/fxcrt/fx_coordinates_unittest.cpp
index 7c25d0da28..d77fe05e91 100644
--- a/core/fxcrt/fx_coordinates_unittest.cpp
+++ b/core/fxcrt/fx_coordinates_unittest.cpp
@@ -210,18 +210,6 @@ TEST(CFX_FloatRect, Print) {
EXPECT_STREQ("rect[w 4.25 x h 3.25 (left 10.5, bot 20.5)]", os.str().c_str());
}
-TEST(CFX_Rect, Print) {
- std::ostringstream os;
- CFX_Rect rect;
- os << rect;
- EXPECT_STREQ("rect[w 0 x h 0 (left 0, top 0)]", os.str().c_str());
-
- os.str("");
- rect = CFX_Rect(10, 20, 4, 3);
- os << rect;
- EXPECT_STREQ("rect[w 4 x h 3 (left 10, top 20)]", os.str().c_str());
-}
-
TEST(CFX_RectF, Print) {
std::ostringstream os;
CFX_RectF rect;