format forked chromium accessibility code

This commit is contained in:
Chun-Heng Tai 2020-12-21 11:38:42 -08:00 committed by chunhtai
parent da504d2db0
commit b4977cb51a
36 changed files with 404 additions and 615 deletions

View File

@ -370,23 +370,23 @@ L* operator-(L* lhs, const StrictNumeric<R> rhs) {
} // namespace internal
using internal::CheckAdd;
using internal::CheckAnd;
using internal::CheckDiv;
using internal::CheckedNumeric;
using internal::IsValidForType;
using internal::ValueOrDieForType;
using internal::ValueOrDefaultForType;
using internal::MakeCheckedNum;
using internal::CheckLsh;
using internal::CheckMax;
using internal::CheckMin;
using internal::CheckAdd;
using internal::CheckSub;
using internal::CheckMul;
using internal::CheckDiv;
using internal::CheckMod;
using internal::CheckLsh;
using internal::CheckRsh;
using internal::CheckAnd;
using internal::CheckMul;
using internal::CheckOr;
using internal::CheckRsh;
using internal::CheckSub;
using internal::CheckXor;
using internal::IsValidForType;
using internal::MakeCheckedNum;
using internal::ValueOrDefaultForType;
using internal::ValueOrDieForType;
} // namespace base

View File

@ -244,20 +244,20 @@ BASE_NUMERIC_COMPARISON_OPERATORS(Clamped, IsNotEqual, !=)
} // namespace internal
using internal::ClampAdd;
using internal::ClampAnd;
using internal::ClampDiv;
using internal::ClampedNumeric;
using internal::MakeClampedNum;
using internal::ClampLsh;
using internal::ClampMax;
using internal::ClampMin;
using internal::ClampAdd;
using internal::ClampSub;
using internal::ClampMul;
using internal::ClampDiv;
using internal::ClampMod;
using internal::ClampLsh;
using internal::ClampRsh;
using internal::ClampAnd;
using internal::ClampMul;
using internal::ClampOr;
using internal::ClampRsh;
using internal::ClampSub;
using internal::ClampXor;
using internal::MakeClampedNum;
} // namespace base

View File

@ -171,7 +171,9 @@ struct SaturateFastOp<
std::is_integral<Dst>::value &&
SaturateFastAsmOp<Dst, Src>::is_supported>::type> {
static constexpr bool is_supported = true;
static constexpr Dst Do(Src value) { return SaturateFastAsmOp<Dst, Src>::Do(value); }
static constexpr Dst Do(Src value) {
return SaturateFastAsmOp<Dst, Src>::Do(value);
}
};
template <typename Dst, typename Src>
@ -343,14 +345,14 @@ BASE_NUMERIC_COMPARISON_OPERATORS(Strict, IsNotEqual, !=)
using internal::as_signed;
using internal::as_unsigned;
using internal::checked_cast;
using internal::strict_cast;
using internal::saturated_cast;
using internal::SafeUnsignedAbs;
using internal::StrictNumeric;
using internal::MakeStrictNum;
using internal::IsValueInRangeForNumericType;
using internal::IsTypeInRangeForNumericType;
using internal::IsValueInRangeForNumericType;
using internal::IsValueNegative;
using internal::MakeStrictNum;
using internal::SafeUnsignedAbs;
using internal::saturated_cast;
using internal::strict_cast;
using internal::StrictNumeric;
// Explicitly make a shorter size_t alias for convenience.
using SizeT = StrictNumeric<size_t>;

View File

@ -30,16 +30,18 @@ struct SaturateFastAsmOp {
uint32_t>::type result;
if (std::is_signed<Dst>::value) {
asm("ssat %[dst], %[shift], %[src]"
: [dst] "=r"(result)
: [src] "r"(src), [shift] "n"(IntegerBitsPlusSign<Dst>::value <= 32
? IntegerBitsPlusSign<Dst>::value
: 32));
: [ dst ] "=r"(result)
:
[ src ] "r"(src), [ shift ] "n"(IntegerBitsPlusSign<Dst>::value <= 32
? IntegerBitsPlusSign<Dst>::value
: 32));
} else {
asm("usat %[dst], %[shift], %[src]"
: [dst] "=r"(result)
: [src] "r"(src), [shift] "n"(IntegerBitsPlusSign<Dst>::value < 32
? IntegerBitsPlusSign<Dst>::value
: 31));
: [ dst ] "=r"(result)
:
[ src ] "r"(src), [ shift ] "n"(IntegerBitsPlusSign<Dst>::value < 32
? IntegerBitsPlusSign<Dst>::value
: 31));
}
return static_cast<Dst>(result);
}

View File

@ -276,7 +276,8 @@ struct NarrowingRange {
template <typename Dst,
typename Src,
template <typename> class Bounds,
template <typename>
class Bounds,
IntegerRepresentation DstSign = std::is_signed<Dst>::value
? INTEGER_REPRESENTATION_SIGNED
: INTEGER_REPRESENTATION_UNSIGNED,
@ -294,7 +295,8 @@ struct DstRangeRelationToSrcRangeImpl;
// Same sign narrowing: The range is contained for normal limits.
template <typename Dst,
typename Src,
template <typename> class Bounds,
template <typename>
class Bounds,
IntegerRepresentation DstSign,
IntegerRepresentation SrcSign>
struct DstRangeRelationToSrcRangeImpl<Dst,
@ -692,9 +694,8 @@ constexpr bool IsLessImpl(const L lhs,
const RangeCheck l_range,
const RangeCheck r_range) {
return l_range.IsUnderflow() || r_range.IsOverflow() ||
(l_range == r_range &&
static_cast<decltype(lhs + rhs)>(lhs) <
static_cast<decltype(lhs + rhs)>(rhs));
(l_range == r_range && static_cast<decltype(lhs + rhs)>(lhs) <
static_cast<decltype(lhs + rhs)>(rhs));
}
template <typename L, typename R>
@ -713,9 +714,8 @@ constexpr bool IsLessOrEqualImpl(const L lhs,
const RangeCheck l_range,
const RangeCheck r_range) {
return l_range.IsUnderflow() || r_range.IsOverflow() ||
(l_range == r_range &&
static_cast<decltype(lhs + rhs)>(lhs) <=
static_cast<decltype(lhs + rhs)>(rhs));
(l_range == r_range && static_cast<decltype(lhs + rhs)>(lhs) <=
static_cast<decltype(lhs + rhs)>(rhs));
}
template <typename L, typename R>
@ -734,9 +734,8 @@ constexpr bool IsGreaterImpl(const L lhs,
const RangeCheck l_range,
const RangeCheck r_range) {
return l_range.IsOverflow() || r_range.IsUnderflow() ||
(l_range == r_range &&
static_cast<decltype(lhs + rhs)>(lhs) >
static_cast<decltype(lhs + rhs)>(rhs));
(l_range == r_range && static_cast<decltype(lhs + rhs)>(lhs) >
static_cast<decltype(lhs + rhs)>(rhs));
}
template <typename L, typename R>
@ -755,9 +754,8 @@ constexpr bool IsGreaterOrEqualImpl(const L lhs,
const RangeCheck l_range,
const RangeCheck r_range) {
return l_range.IsOverflow() || r_range.IsUnderflow() ||
(l_range == r_range &&
static_cast<decltype(lhs + rhs)>(lhs) >=
static_cast<decltype(lhs + rhs)>(rhs));
(l_range == r_range && static_cast<decltype(lhs + rhs)>(lhs) >=
static_cast<decltype(lhs + rhs)>(rhs));
}
template <typename L, typename R>

View File

@ -61,8 +61,8 @@ struct ClampedAddFastAsmOp {
int32_t y_i32 = checked_cast<int32_t>(y);
asm("qadd %[result], %[first], %[second]"
: [result] "=r"(result)
: [first] "r"(x_i32), [second] "r"(y_i32));
: [ result ] "=r"(result)
: [ first ] "r"(x_i32), [ second ] "r"(y_i32));
return saturated_cast<V>(result);
}
};
@ -87,8 +87,8 @@ struct ClampedSubFastAsmOp {
int32_t y_i32 = checked_cast<int32_t>(y);
asm("qsub %[result], %[first], %[second]"
: [result] "=r"(result)
: [first] "r"(x_i32), [second] "r"(y_i32));
: [ result ] "=r"(result)
: [ first ] "r"(x_i32), [ second ] "r"(y_i32));
return saturated_cast<V>(result);
}
};

View File

@ -22,11 +22,11 @@
// Optimized safe math instructions are incompatible with asmjs.
#define BASE_HAS_OPTIMIZED_SAFE_MATH (0)
// Where available use builtin math overflow support on Clang and GCC.
#elif !defined(__native_client__) && \
((defined(__clang__) && \
((__clang_major__ > 3) || \
(__clang_major__ == 3 && __clang_minor__ >= 4))) || \
(defined(__GNUC__) && __GNUC__ >= 5))
#elif !defined(__native_client__) && \
((defined(__clang__) && \
((__clang_major__ > 3) || \
(__clang_major__ == 3 && __clang_minor__ >= 4))) || \
(defined(__GNUC__) && __GNUC__ >= 5))
#include "base/numerics/safe_math_clang_gcc_impl.h"
#define BASE_HAS_OPTIMIZED_SAFE_MATH (1)
#else

View File

@ -11,7 +11,7 @@ namespace gfx {
std::string Insets::ToString() const {
// Print members in the same order of the constructor parameters.
return base::StringPrintf("%d,%d,%d,%d", top(), left(), bottom(), right());
return base::StringPrintf("%d,%d,%d,%d", top(), left(), bottom(), right());
}
Insets Insets::Offset(const gfx::Vector2d& vector) const {

View File

@ -85,9 +85,7 @@ class GEOMETRY_EXPORT Insets {
bottom_ == insets.bottom_ && right_ == insets.right_;
}
bool operator!=(const Insets& insets) const {
return !(*this == insets);
}
bool operator!=(const Insets& insets) const { return !(*this == insets); }
void operator+=(const Insets& insets) {
top_ = base::ClampAdd(top_, insets.top_);

View File

@ -10,7 +10,7 @@ namespace gfx {
std::string InsetsF::ToString() const {
// Print members in the same order of the constructor parameters.
return base::StringPrintf("%f,%f,%f,%f", top(), left(), bottom(), right());
return base::StringPrintf("%f,%f,%f,%f", top(), left(), bottom(), right());
}
} // namespace gfx

View File

@ -53,9 +53,7 @@ class GEOMETRY_EXPORT InsetsF {
bottom_ == insets.bottom_ && right_ == insets.right_;
}
bool operator!=(const InsetsF& insets) const {
return !(*this == insets);
}
bool operator!=(const InsetsF& insets) const { return !(*this == insets); }
void operator+=(const InsetsF& insets) {
top_ += insets.top_;

View File

@ -27,7 +27,7 @@ TEST(InsetsTest, Insets) {
EXPECT_EQ(2, insets.left());
EXPECT_EQ(3, insets.bottom());
EXPECT_EQ(4, insets.right());
EXPECT_EQ(6, insets.width()); // Left + right.
EXPECT_EQ(6, insets.width()); // Left + right.
EXPECT_EQ(4, insets.height()); // Top + bottom.
EXPECT_FALSE(insets.IsEmpty());
}

View File

@ -26,8 +26,7 @@ Point::Point(DWORD point) {
y_ = points.y;
}
Point::Point(const POINT& point) : x_(point.x), y_(point.y) {
}
Point::Point(const POINT& point) : x_(point.x), y_(point.y) {}
Point& Point::operator=(const POINT& point) {
x_ = point.x;
@ -35,8 +34,7 @@ Point& Point::operator=(const POINT& point) {
return *this;
}
#elif defined(OS_APPLE)
Point::Point(const CGPoint& point) : x_(point.x), y_(point.y) {
}
Point::Point(const CGPoint& point) : x_(point.x), y_(point.y) {}
#endif
#if defined(OS_WIN)

View File

@ -83,9 +83,7 @@ class GEOMETRY_EXPORT Point {
// other.
// This comparison is required to use Point in sets, or sorted
// vectors.
bool operator<(const Point& rhs) const {
return std::tie(y_, x_) < std::tie(rhs.y_, rhs.x_);
}
bool operator<(const Point& rhs) const { return std::tie(y_, x_) < std::tie(rhs.y_, rhs.x_); }
// Returns a string representation of point.
std::string ToString() const;
@ -116,8 +114,7 @@ inline Point operator-(const Point& lhs, const Vector2d& rhs) {
}
inline Vector2d operator-(const Point& lhs, const Point& rhs) {
return Vector2d(base::ClampSub(lhs.x(), rhs.x()),
base::ClampSub(lhs.y(), rhs.y()));
return Vector2d(base::ClampSub(lhs.x(), rhs.x()), base::ClampSub(lhs.y(), rhs.y()));
}
inline Point PointAtOffsetFromOrigin(const Vector2d& offset_from_origin) {
@ -130,17 +127,11 @@ inline Point PointAtOffsetFromOrigin(const Vector2d& offset_from_origin) {
void PrintTo(const Point& point, ::std::ostream* os);
// Helper methods to scale a gfx::Point to a new gfx::Point.
GEOMETRY_EXPORT Point ScaleToCeiledPoint(const Point& point,
float x_scale,
float y_scale);
GEOMETRY_EXPORT Point ScaleToCeiledPoint(const Point& point, float x_scale, float y_scale);
GEOMETRY_EXPORT Point ScaleToCeiledPoint(const Point& point, float x_scale);
GEOMETRY_EXPORT Point ScaleToFlooredPoint(const Point& point,
float x_scale,
float y_scale);
GEOMETRY_EXPORT Point ScaleToFlooredPoint(const Point& point, float x_scale, float y_scale);
GEOMETRY_EXPORT Point ScaleToFlooredPoint(const Point& point, float x_scale);
GEOMETRY_EXPORT Point ScaleToRoundedPoint(const Point& point,
float x_scale,
float y_scale);
GEOMETRY_EXPORT Point ScaleToRoundedPoint(const Point& point, float x_scale, float y_scale);
GEOMETRY_EXPORT Point ScaleToRoundedPoint(const Point& point, float x_scale);
} // namespace gfx

View File

@ -21,4 +21,3 @@ Point ToRoundedPoint(const PointF& point) {
}
} // namespace gfx

View File

@ -28,5 +28,4 @@ PointF ScalePoint(const PointF& p, float x_scale, float y_scale) {
return scaled_p;
}
} // namespace gfx

View File

@ -66,9 +66,7 @@ class GEOMETRY_EXPORT PointF {
return std::tie(y_, x_) < std::tie(rhs.y_, rhs.x_);
}
void Scale(float scale) {
Scale(scale, scale);
}
void Scale(float scale) { Scale(scale, scale); }
void Scale(float x_scale, float y_scale) {
SetPoint(x() * x_scale, y() * y_scale);

View File

@ -47,15 +47,13 @@ TEST(PointTest, VectorArithmetic) {
static const struct {
Point expected;
Point actual;
} tests[] = {
{ Point(4, 2), a + v1 },
{ Point(-2, 8), a - v1 },
{ a, a - v1 + v1 },
{ a, a + v1 - v1 },
{ a, a + Vector2d() },
{ Point(12, 1), a + v1 - v2 },
{ Point(-10, 9), a - v1 + v2 }
};
} tests[] = {{Point(4, 2), a + v1},
{Point(-2, 8), a - v1},
{a, a - v1 + v1},
{a, a + v1 - v1},
{a, a + Vector2d()},
{Point(12, 1), a + v1 - v2},
{Point(-10, 9), a - v1 + v2}};
for (size_t i = 0; i < base::size(tests); ++i)
EXPECT_EQ(tests[i].expected.ToString(), tests[i].actual.ToString());

View File

@ -25,12 +25,10 @@ namespace gfx {
#if defined(OS_WIN)
Rect::Rect(const RECT& r)
: origin_(r.left, r.top),
size_(std::abs(r.right - r.left), std::abs(r.bottom - r.top)) {
}
size_(std::abs(r.right - r.left), std::abs(r.bottom - r.top)) {}
#elif defined(OS_APPLE)
Rect::Rect(const CGRect& r)
: origin_(r.origin.x, r.origin.y), size_(r.size.width, r.size.height) {
}
: origin_(r.origin.x, r.origin.y), size_(r.size.width, r.size.height) {}
#endif
#if defined(OS_WIN)
@ -56,7 +54,7 @@ void AdjustAlongAxis(int dst_origin, int dst_size, int* origin, int* size) {
*origin = std::min(dst_origin + dst_size, *origin + *size) - *size;
}
} // namespace
} // namespace gfx
namespace gfx {
@ -139,9 +137,7 @@ void Rect::operator-=(const Vector2d& offset) {
}
Insets Rect::InsetsFrom(const Rect& inner) const {
return Insets(inner.y() - y(),
inner.x() - x(),
bottom() - inner.bottom(),
return Insets(inner.y() - y(), inner.x() - x(), bottom() - inner.bottom(),
right() - inner.right());
}
@ -266,8 +262,8 @@ void Rect::SplitVertically(Rect* left_half, Rect* right_half) const {
DCHECK(right_half);
left_half->SetRect(x(), y(), width() / 2, height());
right_half->SetRect(
left_half->right(), y(), width() - left_half->width(), height());
right_half->SetRect(left_half->right(), y(), width() - left_half->width(),
height());
}
bool Rect::SharesEdgeWith(const Rect& rect) const {
@ -296,8 +292,7 @@ int Rect::ManhattanInternalDistance(const Rect& rect) const {
}
std::string Rect::ToString() const {
return base::StringPrintf("%s %s",
origin().ToString().c_str(),
return base::StringPrintf("%s %s", origin().ToString().c_str(),
size().ToString().c_str());
}

View File

@ -38,8 +38,7 @@ class GEOMETRY_EXPORT Rect {
constexpr Rect() = default;
constexpr Rect(int width, int height) : size_(width, height) {}
constexpr Rect(int x, int y, int width, int height)
: origin_(x, y),
size_(GetClampedValue(x, width), GetClampedValue(y, height)) {}
: origin_(x, y), size_(GetClampedValue(x, width), GetClampedValue(y, height)) {}
constexpr explicit Rect(const Size& size) : size_(size) {}
constexpr Rect(const Point& origin, const Size& size)
: origin_(origin),
@ -78,9 +77,7 @@ class GEOMETRY_EXPORT Rect {
void set_width(int width) { size_.set_width(GetClampedValue(x(), width)); }
constexpr int height() const { return size_.height(); }
void set_height(int height) {
size_.set_height(GetClampedValue(y(), height));
}
void set_height(int height) { size_.set_height(GetClampedValue(y(), height)); }
constexpr const Point& origin() const { return origin_; }
void set_origin(const Point& origin) {
@ -105,12 +102,8 @@ class GEOMETRY_EXPORT Rect {
constexpr Point left_center() const { return Point(x(), y() + height() / 2); }
constexpr Point top_center() const { return Point(x() + width() / 2, y()); }
constexpr Point right_center() const {
return Point(right(), y() + height() / 2);
}
constexpr Point bottom_center() const {
return Point(x() + width() / 2, bottom());
}
constexpr Point right_center() const { return Point(right(), y() + height() / 2); }
constexpr Point bottom_center() const { return Point(x() + width() / 2, bottom()); }
Vector2d OffsetFromOrigin() const { return Vector2d(x(), y()); }
@ -127,9 +120,7 @@ class GEOMETRY_EXPORT Rect {
void SetByBounds(int left, int top, int right, int bottom);
// Shrink the rectangle by a horizontal and vertical distance on all sides.
void Inset(int horizontal, int vertical) {
Inset(horizontal, vertical, horizontal, vertical);
}
void Inset(int horizontal, int vertical) { Inset(horizontal, vertical, horizontal, vertical); }
// Shrink the rectangle by the given insets.
void Inset(const Insets& insets);
@ -162,9 +153,7 @@ class GEOMETRY_EXPORT Rect {
bool Contains(int point_x, int point_y) const;
// Returns true if the specified point is contained by this rectangle.
bool Contains(const Point& point) const {
return Contains(point.x(), point.y());
}
bool Contains(const Point& point) const { return Contains(point.x(), point.y()); }
// Returns true if this rectangle contains the specified rectangle.
bool Contains(const Rect& rect) const;
@ -235,8 +224,7 @@ class GEOMETRY_EXPORT Rect {
//
// This is intended to be: a > 0 && max - a < b
return a > 0 && b > 0 &&
static_cast<unsigned>(std::numeric_limits<int>::max() - a) <
static_cast<unsigned>(b);
static_cast<unsigned>(std::numeric_limits<int>::max() - a) < static_cast<unsigned>(b);
}
// Clamp the size to avoid integer overflow in bottom() and right().
@ -244,9 +232,7 @@ class GEOMETRY_EXPORT Rect {
// TODO(enne): this should probably use base::ClampAdd, but that
// function is not a constexpr.
static constexpr int GetClampedValue(int origin, int size) {
return AddWouldOverflow(origin, size)
? std::numeric_limits<int>::max() - origin
: size;
return AddWouldOverflow(origin, size) ? std::numeric_limits<int>::max() - origin : size;
}
};
@ -280,29 +266,21 @@ GEOMETRY_EXPORT Rect BoundingRect(const Point& p1, const Point& p2);
// Scales the rect and returns the enclosing rect. Use this only the inputs are
// known to not overflow. Use ScaleToEnclosingRectSafe if the inputs are
// unknown and need to use saturated math.
inline Rect ScaleToEnclosingRect(const Rect& rect,
float x_scale,
float y_scale) {
inline Rect ScaleToEnclosingRect(const Rect& rect, float x_scale, float y_scale) {
if (x_scale == 1.f && y_scale == 1.f)
return rect;
// These next functions cast instead of using e.g. base::ClampFloor() because
// we haven't checked to ensure that the clamping behavior of the helper
// functions doesn't degrade performance, and callers shouldn't be passing
// values that cause overflow anyway.
DCHECK(base::IsValueInRangeForNumericType<int>(
std::floor(rect.x() * x_scale)));
DCHECK(base::IsValueInRangeForNumericType<int>(
std::floor(rect.y() * y_scale)));
DCHECK(base::IsValueInRangeForNumericType<int>(
std::ceil(rect.right() * x_scale)));
DCHECK(base::IsValueInRangeForNumericType<int>(
std::ceil(rect.bottom() * y_scale)));
DCHECK(base::IsValueInRangeForNumericType<int>(std::floor(rect.x() * x_scale)));
DCHECK(base::IsValueInRangeForNumericType<int>(std::floor(rect.y() * y_scale)));
DCHECK(base::IsValueInRangeForNumericType<int>(std::ceil(rect.right() * x_scale)));
DCHECK(base::IsValueInRangeForNumericType<int>(std::ceil(rect.bottom() * y_scale)));
int x = static_cast<int>(std::floor(rect.x() * x_scale));
int y = static_cast<int>(std::floor(rect.y() * y_scale));
int r = rect.width() == 0 ?
x : static_cast<int>(std::ceil(rect.right() * x_scale));
int b = rect.height() == 0 ?
y : static_cast<int>(std::ceil(rect.bottom() * y_scale));
int r = rect.width() == 0 ? x : static_cast<int>(std::ceil(rect.right() * x_scale));
int b = rect.height() == 0 ? y : static_cast<int>(std::ceil(rect.bottom() * y_scale));
return Rect(x, y, r - x, b - y);
}
@ -314,9 +292,7 @@ inline Rect ScaleToEnclosingRect(const Rect& rect, float scale) {
// would overflow.
// TODO(pkasting): Attempt to switch ScaleTo...Rect() to this construction and
// check performance.
inline Rect ScaleToEnclosingRectSafe(const Rect& rect,
float x_scale,
float y_scale) {
inline Rect ScaleToEnclosingRectSafe(const Rect& rect, float x_scale, float y_scale) {
if (x_scale == 1.f && y_scale == 1.f)
return rect;
int x = base::ClampFloor(rect.x() * x_scale);
@ -330,25 +306,17 @@ inline Rect ScaleToEnclosingRectSafe(const Rect& rect, float scale) {
return ScaleToEnclosingRectSafe(rect, scale, scale);
}
inline Rect ScaleToEnclosedRect(const Rect& rect,
float x_scale,
float y_scale) {
inline Rect ScaleToEnclosedRect(const Rect& rect, float x_scale, float y_scale) {
if (x_scale == 1.f && y_scale == 1.f)
return rect;
DCHECK(base::IsValueInRangeForNumericType<int>(
std::ceil(rect.x() * x_scale)));
DCHECK(base::IsValueInRangeForNumericType<int>(
std::ceil(rect.y() * y_scale)));
DCHECK(base::IsValueInRangeForNumericType<int>(
std::floor(rect.right() * x_scale)));
DCHECK(base::IsValueInRangeForNumericType<int>(
std::floor(rect.bottom() * y_scale)));
DCHECK(base::IsValueInRangeForNumericType<int>(std::ceil(rect.x() * x_scale)));
DCHECK(base::IsValueInRangeForNumericType<int>(std::ceil(rect.y() * y_scale)));
DCHECK(base::IsValueInRangeForNumericType<int>(std::floor(rect.right() * x_scale)));
DCHECK(base::IsValueInRangeForNumericType<int>(std::floor(rect.bottom() * y_scale)));
int x = static_cast<int>(std::ceil(rect.x() * x_scale));
int y = static_cast<int>(std::ceil(rect.y() * y_scale));
int r = rect.width() == 0 ?
x : static_cast<int>(std::floor(rect.right() * x_scale));
int b = rect.height() == 0 ?
y : static_cast<int>(std::floor(rect.bottom() * y_scale));
int r = rect.width() == 0 ? x : static_cast<int>(std::floor(rect.right() * x_scale));
int b = rect.height() == 0 ? y : static_cast<int>(std::floor(rect.bottom() * y_scale));
return Rect(x, y, r - x, b - y);
}
@ -366,23 +334,15 @@ inline Rect ScaleToRoundedRect(const Rect& rect, float x_scale, float y_scale) {
if (x_scale == 1.f && y_scale == 1.f)
return rect;
DCHECK(
base::IsValueInRangeForNumericType<int>(std::round(rect.x() * x_scale)));
DCHECK(
base::IsValueInRangeForNumericType<int>(std::round(rect.y() * y_scale)));
DCHECK(base::IsValueInRangeForNumericType<int>(
std::round(rect.right() * x_scale)));
DCHECK(base::IsValueInRangeForNumericType<int>(
std::round(rect.bottom() * y_scale)));
DCHECK(base::IsValueInRangeForNumericType<int>(std::round(rect.x() * x_scale)));
DCHECK(base::IsValueInRangeForNumericType<int>(std::round(rect.y() * y_scale)));
DCHECK(base::IsValueInRangeForNumericType<int>(std::round(rect.right() * x_scale)));
DCHECK(base::IsValueInRangeForNumericType<int>(std::round(rect.bottom() * y_scale)));
int x = static_cast<int>(std::round(rect.x() * x_scale));
int y = static_cast<int>(std::round(rect.y() * y_scale));
int r = rect.width() == 0
? x
: static_cast<int>(std::round(rect.right() * x_scale));
int b = rect.height() == 0
? y
: static_cast<int>(std::round(rect.bottom() * y_scale));
int r = rect.width() == 0 ? x : static_cast<int>(std::round(rect.right() * x_scale));
int b = rect.height() == 0 ? y : static_cast<int>(std::round(rect.bottom() * y_scale));
return Rect(x, y, r - x, b - y);
}

View File

@ -34,8 +34,7 @@ static void AdjustAlongAxis(float dst_origin,
#if defined(OS_APPLE)
RectF::RectF(const CGRect& r)
: origin_(r.origin.x, r.origin.y), size_(r.size.width, r.size.height) {
}
: origin_(r.origin.x, r.origin.y), size_(r.size.width, r.size.height) {}
CGRect RectF::ToCGRect() const {
return CGRectMake(x(), y(), width(), height());
@ -65,9 +64,7 @@ void RectF::operator-=(const Vector2dF& offset) {
}
InsetsF RectF::InsetsFrom(const RectF& inner) const {
return InsetsF(inner.y() - y(),
inner.x() - x(),
bottom() - inner.bottom(),
return InsetsF(inner.y() - y(), inner.x() - x(), bottom() - inner.bottom(),
right() - inner.right());
}
@ -192,8 +189,8 @@ void RectF::SplitVertically(RectF* left_half, RectF* right_half) const {
DCHECK(right_half);
left_half->SetRect(x(), y(), width() / 2, height());
right_half->SetRect(
left_half->right(), y(), width() - left_half->width(), height());
right_half->SetRect(left_half->right(), y(), width() - left_half->width(),
height());
}
bool RectF::SharesEdgeWith(const RectF& rect) const {
@ -232,8 +229,7 @@ bool RectF::IsExpressibleAsRect() const {
}
std::string RectF::ToString() const {
return base::StringPrintf("%s %s",
origin().ToString().c_str(),
return base::StringPrintf("%s %s", origin().ToString().c_str(),
size().ToString().c_str());
}

View File

@ -30,8 +30,7 @@ class GEOMETRY_EXPORT RectF {
constexpr RectF(float x, float y, float width, float height)
: origin_(x, y), size_(width, height) {}
constexpr explicit RectF(const SizeF& size) : size_(size) {}
constexpr RectF(const PointF& origin, const SizeF& size)
: origin_(origin), size_(size) {}
constexpr RectF(const PointF& origin, const SizeF& size) : origin_(origin), size_(size) {}
constexpr explicit RectF(const Rect& r)
: RectF(static_cast<float>(r.x()),
@ -70,16 +69,10 @@ class GEOMETRY_EXPORT RectF {
constexpr PointF bottom_left() const { return PointF(x(), bottom()); }
constexpr PointF bottom_right() const { return PointF(right(), bottom()); }
constexpr PointF left_center() const {
return PointF(x(), y() + height() / 2);
}
constexpr PointF left_center() const { return PointF(x(), y() + height() / 2); }
constexpr PointF top_center() const { return PointF(x() + width() / 2, y()); }
constexpr PointF right_center() const {
return PointF(right(), y() + height() / 2);
}
constexpr PointF bottom_center() const {
return PointF(x() + width() / 2, bottom());
}
constexpr PointF right_center() const { return PointF(right(), y() + height() / 2); }
constexpr PointF bottom_center() const { return PointF(x() + width() / 2, bottom()); }
Vector2dF OffsetFromOrigin() const { return Vector2dF(x(), y()); }
@ -124,9 +117,7 @@ class GEOMETRY_EXPORT RectF {
bool Contains(float point_x, float point_y) const;
// Returns true if the specified point is contained by this rectangle.
bool Contains(const PointF& point) const {
return Contains(point.x(), point.y());
}
bool Contains(const PointF& point) const { return Contains(point.x(), point.y()); }
// Returns true if this rectangle contains the specified rectangle.
bool Contains(const RectF& rect) const;
@ -181,9 +172,7 @@ class GEOMETRY_EXPORT RectF {
float ManhattanInternalDistance(const RectF& rect) const;
// Scales the rectangle by |scale|.
void Scale(float scale) {
Scale(scale, scale);
}
void Scale(float scale) { Scale(scale, scale); }
void Scale(float x_scale, float y_scale) {
set_origin(ScalePoint(origin(), x_scale, y_scale));
@ -212,13 +201,11 @@ inline bool operator!=(const RectF& lhs, const RectF& rhs) {
}
inline RectF operator+(const RectF& lhs, const Vector2dF& rhs) {
return RectF(lhs.x() + rhs.x(), lhs.y() + rhs.y(),
lhs.width(), lhs.height());
return RectF(lhs.x() + rhs.x(), lhs.y() + rhs.y(), lhs.width(), lhs.height());
}
inline RectF operator-(const RectF& lhs, const Vector2dF& rhs) {
return RectF(lhs.x() - rhs.x(), lhs.y() - rhs.y(),
lhs.width(), lhs.height());
return RectF(lhs.x() - rhs.x(), lhs.y() - rhs.y(), lhs.width(), lhs.height());
}
inline RectF operator+(const Vector2dF& lhs, const RectF& rhs) {
@ -230,8 +217,7 @@ GEOMETRY_EXPORT RectF UnionRects(const RectF& a, const RectF& b);
GEOMETRY_EXPORT RectF SubtractRects(const RectF& a, const RectF& b);
inline RectF ScaleRect(const RectF& r, float x_scale, float y_scale) {
return RectF(r.x() * x_scale, r.y() * y_scale,
r.width() * x_scale, r.height() * y_scale);
return RectF(r.x() * x_scale, r.y() * y_scale, r.width() * x_scale, r.height() * y_scale);
}
inline RectF ScaleRect(const RectF& r, float scale) {

View File

@ -36,9 +36,9 @@ TEST(RectTest, Contains) {
{0, 0, 10, 10, 10, 5, false},
{0, 0, 10, 10, -1, -1, false},
{0, 0, 10, 10, 50, 50, false},
#if defined(NDEBUG) && !defined(DCHECK_ALWAYS_ON)
#if defined(NDEBUG) && !defined(DCHECK_ALWAYS_ON)
{0, 0, -10, -10, 0, 0, false},
#endif
#endif
};
for (size_t i = 0; i < base::size(contains_cases); ++i) {
const ContainsCase& value = contains_cases[i];
@ -58,18 +58,16 @@ TEST(RectTest, Intersects) {
int w2;
int h2;
bool intersects;
} tests[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, false },
{ 0, 0, 0, 0, -10, -10, 20, 20, false },
{ -10, 0, 0, 20, 0, -10, 20, 0, false },
{ 0, 0, 10, 10, 0, 0, 10, 10, true },
{ 0, 0, 10, 10, 10, 10, 10, 10, false },
{ 10, 10, 10, 10, 0, 0, 10, 10, false },
{ 10, 10, 10, 10, 5, 5, 10, 10, true },
{ 10, 10, 10, 10, 15, 15, 10, 10, true },
{ 10, 10, 10, 10, 20, 15, 10, 10, false },
{ 10, 10, 10, 10, 21, 15, 10, 10, false }
};
} tests[] = {{0, 0, 0, 0, 0, 0, 0, 0, false},
{0, 0, 0, 0, -10, -10, 20, 20, false},
{-10, 0, 0, 20, 0, -10, 20, 0, false},
{0, 0, 10, 10, 0, 0, 10, 10, true},
{0, 0, 10, 10, 10, 10, 10, 10, false},
{10, 10, 10, 10, 0, 0, 10, 10, false},
{10, 10, 10, 10, 5, 5, 10, 10, true},
{10, 10, 10, 10, 15, 15, 10, 10, true},
{10, 10, 10, 10, 20, 15, 10, 10, false},
{10, 10, 10, 10, 21, 15, 10, 10, false}};
for (size_t i = 0; i < base::size(tests); ++i) {
Rect r1(tests[i].x1, tests[i].y1, tests[i].w1, tests[i].h1);
Rect r2(tests[i].x2, tests[i].y2, tests[i].w2, tests[i].h2);
@ -92,26 +90,18 @@ TEST(RectTest, Intersect) {
int y3;
int w3;
int h3;
} tests[] = {
{ 0, 0, 0, 0, // zeros
0, 0, 0, 0,
0, 0, 0, 0 },
{ 0, 0, 4, 4, // equal
0, 0, 4, 4,
0, 0, 4, 4 },
{ 0, 0, 4, 4, // neighboring
4, 4, 4, 4,
0, 0, 0, 0 },
{ 0, 0, 4, 4, // overlapping corners
2, 2, 4, 4,
2, 2, 2, 2 },
{ 0, 0, 4, 4, // T junction
3, 1, 4, 2,
3, 1, 1, 2 },
{ 3, 0, 2, 2, // gap
0, 0, 2, 2,
0, 0, 0, 0 }
};
} tests[] = {{0, 0, 0, 0, // zeros
0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 4, 4, // equal
0, 0, 4, 4, 0, 0, 4, 4},
{0, 0, 4, 4, // neighboring
4, 4, 4, 4, 0, 0, 0, 0},
{0, 0, 4, 4, // overlapping corners
2, 2, 4, 4, 2, 2, 2, 2},
{0, 0, 4, 4, // T junction
3, 1, 4, 2, 3, 1, 1, 2},
{3, 0, 2, 2, // gap
0, 0, 2, 2, 0, 0, 0, 0}};
for (size_t i = 0; i < base::size(tests); ++i) {
Rect r1(tests[i].x1, tests[i].y1, tests[i].w1, tests[i].h1);
Rect r2(tests[i].x2, tests[i].y2, tests[i].w2, tests[i].h2);
@ -138,29 +128,15 @@ TEST(RectTest, Union) {
int y3;
int w3;
int h3;
} tests[] = {
{ 0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0 },
{ 0, 0, 4, 4,
0, 0, 4, 4,
0, 0, 4, 4 },
{ 0, 0, 4, 4,
4, 4, 4, 4,
0, 0, 8, 8 },
{ 0, 0, 4, 4,
0, 5, 4, 4,
0, 0, 4, 9 },
{ 0, 0, 2, 2,
3, 3, 2, 2,
0, 0, 5, 5 },
{ 3, 3, 2, 2, // reverse r1 and r2 from previous test
0, 0, 2, 2,
0, 0, 5, 5 },
{ 0, 0, 0, 0, // union with empty rect
2, 2, 2, 2,
2, 2, 2, 2 }
};
} tests[] = {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 4, 4, 0, 0, 4, 4, 0, 0, 4, 4},
{0, 0, 4, 4, 4, 4, 4, 4, 0, 0, 8, 8},
{0, 0, 4, 4, 0, 5, 4, 4, 0, 0, 4, 9},
{0, 0, 2, 2, 3, 3, 2, 2, 0, 0, 5, 5},
{3, 3, 2, 2, // reverse r1 and r2 from previous test
0, 0, 2, 2, 0, 0, 5, 5},
{0, 0, 0, 0, // union with empty rect
2, 2, 2, 2, 2, 2, 2, 2}};
for (size_t i = 0; i < base::size(tests); ++i) {
Rect r1(tests[i].x1, tests[i].y1, tests[i].w1, tests[i].h1);
Rect r2(tests[i].x2, tests[i].y2, tests[i].w2, tests[i].h2);
@ -196,23 +172,11 @@ TEST(RectTest, AdjustToFit) {
int y3;
int w3;
int h3;
} tests[] = {
{ 0, 0, 2, 2,
0, 0, 2, 2,
0, 0, 2, 2 },
{ 2, 2, 3, 3,
0, 0, 4, 4,
1, 1, 3, 3 },
{ -1, -1, 5, 5,
0, 0, 4, 4,
0, 0, 4, 4 },
{ 2, 2, 4, 4,
0, 0, 3, 3,
0, 0, 3, 3 },
{ 2, 2, 1, 1,
0, 0, 3, 3,
2, 2, 1, 1 }
};
} tests[] = {{0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2},
{2, 2, 3, 3, 0, 0, 4, 4, 1, 1, 3, 3},
{-1, -1, 5, 5, 0, 0, 4, 4, 0, 0, 4, 4},
{2, 2, 4, 4, 0, 0, 3, 3, 0, 0, 3, 3},
{2, 2, 1, 1, 0, 0, 3, 3, 2, 2, 1, 1}};
for (size_t i = 0; i < base::size(tests); ++i) {
Rect r1(tests[i].x1, tests[i].y1, tests[i].w1, tests[i].h1);
Rect r2(tests[i].x2, tests[i].y2, tests[i].w2, tests[i].h2);
@ -423,7 +387,11 @@ TEST(RectTest, SharesEdgeWith) {
// Similar to EXPECT_FLOAT_EQ, but lets NaN equal NaN
#define EXPECT_FLOAT_AND_NAN_EQ(a, b) \
{ if (a == a || b == b) { EXPECT_FLOAT_EQ(a, b); } }
{ \
if (a == a || b == b) { \
EXPECT_FLOAT_EQ(a, b); \
} \
}
TEST(RectTest, ScaleRect) {
static const struct Test {
@ -437,25 +405,16 @@ TEST(RectTest, ScaleRect) {
float w2;
float h2;
} tests[] = {
{ 3, 3, 3, 3,
1.5f,
4.5f, 4.5f, 4.5f, 4.5f },
{ 3, 3, 3, 3,
0.0f,
0.0f, 0.0f, 0.0f, 0.0f },
{ 3, 3, 3, 3,
std::numeric_limits<float>::quiet_NaN(),
std::numeric_limits<float>::quiet_NaN(),
std::numeric_limits<float>::quiet_NaN(),
std::numeric_limits<float>::quiet_NaN(),
std::numeric_limits<float>::quiet_NaN() },
{ 3, 3, 3, 3,
std::numeric_limits<float>::max(),
std::numeric_limits<float>::max(),
std::numeric_limits<float>::max(),
std::numeric_limits<float>::max(),
std::numeric_limits<float>::max() }
};
{3, 3, 3, 3, 1.5f, 4.5f, 4.5f, 4.5f, 4.5f},
{3, 3, 3, 3, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f},
{3, 3, 3, 3, std::numeric_limits<float>::quiet_NaN(),
std::numeric_limits<float>::quiet_NaN(),
std::numeric_limits<float>::quiet_NaN(),
std::numeric_limits<float>::quiet_NaN(),
std::numeric_limits<float>::quiet_NaN()},
{3, 3, 3, 3, std::numeric_limits<float>::max(),
std::numeric_limits<float>::max(), std::numeric_limits<float>::max(),
std::numeric_limits<float>::max(), std::numeric_limits<float>::max()}};
for (size_t i = 0; i < base::size(tests); ++i) {
RectF r1(tests[i].x1, tests[i].y1, tests[i].w1, tests[i].h1);
@ -651,23 +610,19 @@ TEST(RectTest, ToNearestRect) {
TEST(RectTest, ToFlooredRect) {
static const struct Test {
float x1; // source
float x1; // source
float y1;
float w1;
float h1;
int x2; // target
int x2; // target
int y2;
int w2;
int h2;
} tests [] = {
{ 0.0f, 0.0f, 0.0f, 0.0f,
0, 0, 0, 0 },
{ -1.5f, -1.5f, 3.0f, 3.0f,
-2, -2, 3, 3 },
{ -1.5f, -1.5f, 3.5f, 3.5f,
-2, -2, 3, 3 },
{ 20000.5f, 20000.5f, 0.5f, 0.5f,
20000, 20000, 0, 0 },
} tests[] = {
{0.0f, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0},
{-1.5f, -1.5f, 3.0f, 3.0f, -2, -2, 3, 3},
{-1.5f, -1.5f, 3.5f, 3.5f, -2, -2, 3, 3},
{20000.5f, 20000.5f, 0.5f, 0.5f, 20000, 20000, 0, 0},
};
for (size_t i = 0; i < base::size(tests); ++i) {
@ -687,41 +642,45 @@ TEST(RectTest, ScaleToEnclosedRect) {
Rect input_rect;
float input_scale;
Rect expected_rect;
} tests[] = {
{
Rect(),
5.f,
Rect(),
}, {
Rect(1, 1, 1, 1),
5.f,
Rect(5, 5, 5, 5),
}, {
Rect(-1, -1, 0, 0),
5.f,
Rect(-5, -5, 0, 0),
}, {
Rect(1, -1, 0, 1),
5.f,
Rect(5, -5, 0, 5),
}, {
Rect(-1, 1, 1, 0),
5.f,
Rect(-5, 5, 5, 0),
}, {
Rect(1, 2, 3, 4),
1.5f,
Rect(2, 3, 4, 6),
}, {
Rect(-1, -2, 0, 0),
1.5f,
Rect(-1, -3, 0, 0),
}
};
} tests[] = {{
Rect(),
5.f,
Rect(),
},
{
Rect(1, 1, 1, 1),
5.f,
Rect(5, 5, 5, 5),
},
{
Rect(-1, -1, 0, 0),
5.f,
Rect(-5, -5, 0, 0),
},
{
Rect(1, -1, 0, 1),
5.f,
Rect(5, -5, 0, 5),
},
{
Rect(-1, 1, 1, 0),
5.f,
Rect(-5, 5, 5, 0),
},
{
Rect(1, 2, 3, 4),
1.5f,
Rect(2, 3, 4, 6),
},
{
Rect(-1, -2, 0, 0),
1.5f,
Rect(-1, -3, 0, 0),
}};
for (size_t i = 0; i < base::size(tests); ++i) {
Rect result = ScaleToEnclosedRect(tests[i].input_rect,
tests[i].input_scale);
Rect result =
ScaleToEnclosedRect(tests[i].input_rect, tests[i].input_scale);
EXPECT_EQ(tests[i].expected_rect, result);
}
}
@ -731,37 +690,41 @@ TEST(RectTest, ScaleToEnclosingRect) {
Rect input_rect;
float input_scale;
Rect expected_rect;
} tests[] = {
{
Rect(),
5.f,
Rect(),
}, {
Rect(1, 1, 1, 1),
5.f,
Rect(5, 5, 5, 5),
}, {
Rect(-1, -1, 0, 0),
5.f,
Rect(-5, -5, 0, 0),
}, {
Rect(1, -1, 0, 1),
5.f,
Rect(5, -5, 0, 5),
}, {
Rect(-1, 1, 1, 0),
5.f,
Rect(-5, 5, 5, 0),
}, {
Rect(1, 2, 3, 4),
1.5f,
Rect(1, 3, 5, 6),
}, {
Rect(-1, -2, 0, 0),
1.5f,
Rect(-2, -3, 0, 0),
}
};
} tests[] = {{
Rect(),
5.f,
Rect(),
},
{
Rect(1, 1, 1, 1),
5.f,
Rect(5, 5, 5, 5),
},
{
Rect(-1, -1, 0, 0),
5.f,
Rect(-5, -5, 0, 0),
},
{
Rect(1, -1, 0, 1),
5.f,
Rect(5, -5, 0, 5),
},
{
Rect(-1, 1, 1, 0),
5.f,
Rect(-5, 5, 5, 0),
},
{
Rect(1, 2, 3, 4),
1.5f,
Rect(1, 3, 5, 6),
},
{
Rect(-1, -2, 0, 0),
1.5f,
Rect(-2, -3, 0, 0),
}};
for (size_t i = 0; i < base::size(tests); ++i) {
Rect result =
@ -775,8 +738,8 @@ TEST(RectTest, ScaleToEnclosingRect) {
#if defined(OS_WIN)
TEST(RectTest, ConstructAndAssign) {
const RECT rect_1 = { 0, 0, 10, 10 };
const RECT rect_2 = { 0, 0, -10, -10 };
const RECT rect_1 = {0, 0, 10, 10};
const RECT rect_2 = {0, 0, -10, -10};
Rect test1(rect_1);
Rect test2(rect_2);
}
@ -797,20 +760,21 @@ TEST(RectTest, BoundingRect) {
Point b;
Rect expected;
} int_tests[] = {
// If point B dominates A, then A should be the origin.
{ Point(4, 6), Point(4, 6), Rect(4, 6, 0, 0) },
{ Point(4, 6), Point(8, 6), Rect(4, 6, 4, 0) },
{ Point(4, 6), Point(4, 9), Rect(4, 6, 0, 3) },
{ Point(4, 6), Point(8, 9), Rect(4, 6, 4, 3) },
// If point A dominates B, then B should be the origin.
{ Point(4, 6), Point(4, 6), Rect(4, 6, 0, 0) },
{ Point(8, 6), Point(4, 6), Rect(4, 6, 4, 0) },
{ Point(4, 9), Point(4, 6), Rect(4, 6, 0, 3) },
{ Point(8, 9), Point(4, 6), Rect(4, 6, 4, 3) },
// If neither point dominates, then the origin is a combination of the two.
{ Point(4, 6), Point(6, 4), Rect(4, 4, 2, 2) },
{ Point(-4, -6), Point(-6, -4), Rect(-6, -6, 2, 2) },
{ Point(-4, 6), Point(6, -4), Rect(-4, -4, 10, 10) },
// If point B dominates A, then A should be the origin.
{Point(4, 6), Point(4, 6), Rect(4, 6, 0, 0)},
{Point(4, 6), Point(8, 6), Rect(4, 6, 4, 0)},
{Point(4, 6), Point(4, 9), Rect(4, 6, 0, 3)},
{Point(4, 6), Point(8, 9), Rect(4, 6, 4, 3)},
// If point A dominates B, then B should be the origin.
{Point(4, 6), Point(4, 6), Rect(4, 6, 0, 0)},
{Point(8, 6), Point(4, 6), Rect(4, 6, 4, 0)},
{Point(4, 9), Point(4, 6), Rect(4, 6, 0, 3)},
{Point(8, 9), Point(4, 6), Rect(4, 6, 4, 3)},
// If neither point dominates, then the origin is a combination of the
// two.
{Point(4, 6), Point(6, 4), Rect(4, 4, 2, 2)},
{Point(-4, -6), Point(-6, -4), Rect(-6, -6, 2, 2)},
{Point(-4, 6), Point(6, -4), Rect(-4, -4, 10, 10)},
};
for (size_t i = 0; i < base::size(int_tests); ++i) {
@ -823,32 +787,23 @@ TEST(RectTest, BoundingRect) {
PointF b;
RectF expected;
} float_tests[] = {
// If point B dominates A, then A should be the origin.
{ PointF(4.2f, 6.8f), PointF(4.2f, 6.8f),
RectF(4.2f, 6.8f, 0, 0) },
{ PointF(4.2f, 6.8f), PointF(8.5f, 6.8f),
RectF(4.2f, 6.8f, 4.3f, 0) },
{ PointF(4.2f, 6.8f), PointF(4.2f, 9.3f),
RectF(4.2f, 6.8f, 0, 2.5f) },
{ PointF(4.2f, 6.8f), PointF(8.5f, 9.3f),
RectF(4.2f, 6.8f, 4.3f, 2.5f) },
// If point A dominates B, then B should be the origin.
{ PointF(4.2f, 6.8f), PointF(4.2f, 6.8f),
RectF(4.2f, 6.8f, 0, 0) },
{ PointF(8.5f, 6.8f), PointF(4.2f, 6.8f),
RectF(4.2f, 6.8f, 4.3f, 0) },
{ PointF(4.2f, 9.3f), PointF(4.2f, 6.8f),
RectF(4.2f, 6.8f, 0, 2.5f) },
{ PointF(8.5f, 9.3f), PointF(4.2f, 6.8f),
RectF(4.2f, 6.8f, 4.3f, 2.5f) },
// If neither point dominates, then the origin is a combination of the two.
{ PointF(4.2f, 6.8f), PointF(6.8f, 4.2f),
RectF(4.2f, 4.2f, 2.6f, 2.6f) },
{ PointF(-4.2f, -6.8f), PointF(-6.8f, -4.2f),
RectF(-6.8f, -6.8f, 2.6f, 2.6f) },
{ PointF(-4.2f, 6.8f), PointF(6.8f, -4.2f),
RectF(-4.2f, -4.2f, 11.0f, 11.0f) }
};
// If point B dominates A, then A should be the origin.
{PointF(4.2f, 6.8f), PointF(4.2f, 6.8f), RectF(4.2f, 6.8f, 0, 0)},
{PointF(4.2f, 6.8f), PointF(8.5f, 6.8f), RectF(4.2f, 6.8f, 4.3f, 0)},
{PointF(4.2f, 6.8f), PointF(4.2f, 9.3f), RectF(4.2f, 6.8f, 0, 2.5f)},
{PointF(4.2f, 6.8f), PointF(8.5f, 9.3f), RectF(4.2f, 6.8f, 4.3f, 2.5f)},
// If point A dominates B, then B should be the origin.
{PointF(4.2f, 6.8f), PointF(4.2f, 6.8f), RectF(4.2f, 6.8f, 0, 0)},
{PointF(8.5f, 6.8f), PointF(4.2f, 6.8f), RectF(4.2f, 6.8f, 4.3f, 0)},
{PointF(4.2f, 9.3f), PointF(4.2f, 6.8f), RectF(4.2f, 6.8f, 0, 2.5f)},
{PointF(8.5f, 9.3f), PointF(4.2f, 6.8f), RectF(4.2f, 6.8f, 4.3f, 2.5f)},
// If neither point dominates, then the origin is a combination of the
// two.
{PointF(4.2f, 6.8f), PointF(6.8f, 4.2f), RectF(4.2f, 4.2f, 2.6f, 2.6f)},
{PointF(-4.2f, -6.8f), PointF(-6.8f, -4.2f),
RectF(-6.8f, -6.8f, 2.6f, 2.6f)},
{PointF(-4.2f, 6.8f), PointF(6.8f, -4.2f),
RectF(-4.2f, -4.2f, 11.0f, 11.0f)}};
for (size_t i = 0; i < base::size(float_tests); ++i) {
RectF actual = BoundingRect(float_tests[i].a, float_tests[i].b);
@ -863,16 +818,16 @@ TEST(RectTest, IsExpressibleAsRect) {
float max = std::numeric_limits<int>::max();
float infinity = std::numeric_limits<float>::infinity();
EXPECT_TRUE(RectF(
min + 200, min + 200, max - 200, max - 200).IsExpressibleAsRect());
EXPECT_FALSE(RectF(
min - 200, min + 200, max + 200, max + 200).IsExpressibleAsRect());
EXPECT_FALSE(RectF(
min + 200 , min - 200, max + 200, max + 200).IsExpressibleAsRect());
EXPECT_FALSE(RectF(
min + 200, min + 200, max + 200, max - 200).IsExpressibleAsRect());
EXPECT_FALSE(RectF(
min + 200, min + 200, max - 200, max + 200).IsExpressibleAsRect());
EXPECT_TRUE(
RectF(min + 200, min + 200, max - 200, max - 200).IsExpressibleAsRect());
EXPECT_FALSE(
RectF(min - 200, min + 200, max + 200, max + 200).IsExpressibleAsRect());
EXPECT_FALSE(
RectF(min + 200, min - 200, max + 200, max + 200).IsExpressibleAsRect());
EXPECT_FALSE(
RectF(min + 200, min + 200, max + 200, max - 200).IsExpressibleAsRect());
EXPECT_FALSE(
RectF(min + 200, min + 200, max - 200, max + 200).IsExpressibleAsRect());
EXPECT_TRUE(RectF(0, 0, max - 200, max - 200).IsExpressibleAsRect());
EXPECT_FALSE(RectF(200, 0, max + 200, max - 200).IsExpressibleAsRect());
@ -989,15 +944,12 @@ TEST(RectTest, ManhattanInternalDistance) {
EXPECT_FLOAT_EQ(
0.0f, f.ManhattanInternalDistance(gfx::RectF(-1.0f, 0.0f, 2.0f, 1.0f)));
EXPECT_FLOAT_EQ(
kEpsilon,
f.ManhattanInternalDistance(gfx::RectF(400.0f, 0.0f, 1.0f, 400.0f)));
EXPECT_FLOAT_EQ(2.0f * kEpsilon,
f.ManhattanInternalDistance(
gfx::RectF(-100.0f, -100.0f, 100.0f, 100.0f)));
EXPECT_FLOAT_EQ(
1.0f + kEpsilon,
f.ManhattanInternalDistance(gfx::RectF(-101.0f, 100.0f, 100.0f, 100.0f)));
EXPECT_FLOAT_EQ(kEpsilon, f.ManhattanInternalDistance(
gfx::RectF(400.0f, 0.0f, 1.0f, 400.0f)));
EXPECT_FLOAT_EQ(2.0f * kEpsilon, f.ManhattanInternalDistance(gfx::RectF(
-100.0f, -100.0f, 100.0f, 100.0f)));
EXPECT_FLOAT_EQ(1.0f + kEpsilon, f.ManhattanInternalDistance(gfx::RectF(
-101.0f, 100.0f, 100.0f, 100.0f)));
EXPECT_FLOAT_EQ(2.0f + 2.0f * kEpsilon,
f.ManhattanInternalDistance(
gfx::RectF(-101.0f, -101.0f, 100.0f, 100.0f)));
@ -1007,12 +959,10 @@ TEST(RectTest, ManhattanInternalDistance) {
EXPECT_FLOAT_EQ(
0.0f, f.ManhattanInternalDistance(gfx::RectF(-1.0f, 0.0f, 1.1f, 1.0f)));
EXPECT_FLOAT_EQ(
0.1f + kEpsilon,
f.ManhattanInternalDistance(gfx::RectF(-1.5f, 0.0f, 1.4f, 1.0f)));
EXPECT_FLOAT_EQ(
kEpsilon,
f.ManhattanInternalDistance(gfx::RectF(-1.5f, 0.0f, 1.5f, 1.0f)));
EXPECT_FLOAT_EQ(0.1f + kEpsilon, f.ManhattanInternalDistance(
gfx::RectF(-1.5f, 0.0f, 1.4f, 1.0f)));
EXPECT_FLOAT_EQ(kEpsilon, f.ManhattanInternalDistance(
gfx::RectF(-1.5f, 0.0f, 1.5f, 1.0f)));
}
TEST(RectTest, IntegerOverflow) {

View File

@ -22,9 +22,7 @@ namespace gfx {
#if defined(OS_APPLE)
Size::Size(const CGSize& s)
: width_(s.width < 0 ? 0 : s.width),
height_(s.height < 0 ? 0 : s.height) {
}
: width_(s.width < 0 ? 0 : s.width), height_(s.height < 0 ? 0 : s.height) {}
Size& Size::operator=(const CGSize& s) {
set_width(s.width);

View File

@ -100,17 +100,11 @@ inline Size operator-(Size lhs, const Size& rhs) {
void PrintTo(const Size& size, ::std::ostream* os);
// Helper methods to scale a gfx::Size to a new gfx::Size.
GEOMETRY_EXPORT Size ScaleToCeiledSize(const Size& size,
float x_scale,
float y_scale);
GEOMETRY_EXPORT Size ScaleToCeiledSize(const Size& size, float x_scale, float y_scale);
GEOMETRY_EXPORT Size ScaleToCeiledSize(const Size& size, float scale);
GEOMETRY_EXPORT Size ScaleToFlooredSize(const Size& size,
float x_scale,
float y_scale);
GEOMETRY_EXPORT Size ScaleToFlooredSize(const Size& size, float x_scale, float y_scale);
GEOMETRY_EXPORT Size ScaleToFlooredSize(const Size& size, float scale);
GEOMETRY_EXPORT Size ScaleToRoundedSize(const Size& size,
float x_scale,
float y_scale);
GEOMETRY_EXPORT Size ScaleToRoundedSize(const Size& size, float x_scale, float y_scale);
GEOMETRY_EXPORT Size ScaleToRoundedSize(const Size& size, float scale);
} // namespace gfx

View File

@ -21,4 +21,3 @@ Size ToRoundedSize(const SizeF& size) {
}
} // namespace gfx

View File

@ -50,9 +50,7 @@ class GEOMETRY_EXPORT SizeF {
bool IsEmpty() const { return !width() || !height(); }
void Scale(float scale) {
Scale(scale, scale);
}
void Scale(float scale) { Scale(scale, scale); }
void Scale(float x_scale, float y_scale) {
SetSize(width() * x_scale, height() * y_scale);

View File

@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/geometry/size.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/geometry/size_conversions.h"
#include "ui/gfx/geometry/size_f.h"

View File

@ -96,4 +96,4 @@ void PrintTo(const Vector2d& vector, ::std::ostream* os);
} // namespace gfx
#endif // UI_GFX_GEOMETRY_VECTOR2D_H_
#endif // UI_GFX_GEOMETRY_VECTOR2D_H_

View File

@ -23,4 +23,3 @@ Vector2d ToRoundedVector2d(const Vector2dF& vector2d) {
}
} // namespace gfx

View File

@ -43,12 +43,12 @@ void Vector2dF::Scale(float x_scale, float y_scale) {
double CrossProduct(const Vector2dF& lhs, const Vector2dF& rhs) {
return static_cast<double>(lhs.x()) * rhs.y() -
static_cast<double>(lhs.y()) * rhs.x();
static_cast<double>(lhs.y()) * rhs.x();
}
double DotProduct(const Vector2dF& lhs, const Vector2dF& rhs) {
return static_cast<double>(lhs.x()) * rhs.x() +
static_cast<double>(lhs.y()) * rhs.y();
static_cast<double>(lhs.y()) * rhs.y();
}
Vector2dF ScaleVector2d(const Vector2dF& v, float x_scale, float y_scale) {

View File

@ -115,4 +115,4 @@ void PrintTo(const Vector2dF& vector, ::std::ostream* os);
} // namespace gfx
#endif // UI_GFX_GEOMETRY_VECTOR2D_F_H_
#endif // UI_GFX_GEOMETRY_VECTOR2D_F_H_

View File

@ -39,15 +39,12 @@ TEST(Vector2dTest, Add) {
const struct {
Vector2d expected;
Vector2d actual;
} int_tests[] = {
{ Vector2d(3, 5), i1 + Vector2d() },
{ Vector2d(3 + 4, 5 - 1), i1 + i2 },
{ Vector2d(3 - 4, 5 + 1), i1 - i2 }
};
} int_tests[] = {{Vector2d(3, 5), i1 + Vector2d()},
{Vector2d(3 + 4, 5 - 1), i1 + i2},
{Vector2d(3 - 4, 5 + 1), i1 - i2}};
for (size_t i = 0; i < base::size(int_tests); ++i)
EXPECT_EQ(int_tests[i].expected.ToString(),
int_tests[i].actual.ToString());
EXPECT_EQ(int_tests[i].expected.ToString(), int_tests[i].actual.ToString());
Vector2dF f1(3.1f, 5.1f);
Vector2dF f2(4.3f, -1.3f);
@ -55,12 +52,10 @@ TEST(Vector2dTest, Add) {
const struct {
Vector2dF expected;
Vector2dF actual;
} float_tests[] = {
{ Vector2dF(3.1F, 5.1F), f1 + Vector2d() },
{ Vector2dF(3.1F, 5.1F), f1 + Vector2dF() },
{ Vector2dF(3.1f + 4.3f, 5.1f - 1.3f), f1 + f2 },
{ Vector2dF(3.1f - 4.3f, 5.1f + 1.3f), f1 - f2 }
};
} float_tests[] = {{Vector2dF(3.1F, 5.1F), f1 + Vector2d()},
{Vector2dF(3.1F, 5.1F), f1 + Vector2dF()},
{Vector2dF(3.1f + 4.3f, 5.1f - 1.3f), f1 + f2},
{Vector2dF(3.1f - 4.3f, 5.1f + 1.3f), f1 - f2}};
for (size_t i = 0; i < base::size(float_tests); ++i)
EXPECT_EQ(float_tests[i].expected.ToString(),
@ -71,28 +66,23 @@ TEST(Vector2dTest, Negative) {
const struct {
Vector2d expected;
Vector2d actual;
} int_tests[] = {
{ Vector2d(0, 0), -Vector2d(0, 0) },
{ Vector2d(-3, -3), -Vector2d(3, 3) },
{ Vector2d(3, 3), -Vector2d(-3, -3) },
{ Vector2d(-3, 3), -Vector2d(3, -3) },
{ Vector2d(3, -3), -Vector2d(-3, 3) }
};
} int_tests[] = {{Vector2d(0, 0), -Vector2d(0, 0)},
{Vector2d(-3, -3), -Vector2d(3, 3)},
{Vector2d(3, 3), -Vector2d(-3, -3)},
{Vector2d(-3, 3), -Vector2d(3, -3)},
{Vector2d(3, -3), -Vector2d(-3, 3)}};
for (size_t i = 0; i < base::size(int_tests); ++i)
EXPECT_EQ(int_tests[i].expected.ToString(),
int_tests[i].actual.ToString());
EXPECT_EQ(int_tests[i].expected.ToString(), int_tests[i].actual.ToString());
const struct {
Vector2dF expected;
Vector2dF actual;
} float_tests[] = {
{ Vector2dF(0, 0), -Vector2d(0, 0) },
{ Vector2dF(-0.3f, -0.3f), -Vector2dF(0.3f, 0.3f) },
{ Vector2dF(0.3f, 0.3f), -Vector2dF(-0.3f, -0.3f) },
{ Vector2dF(-0.3f, 0.3f), -Vector2dF(0.3f, -0.3f) },
{ Vector2dF(0.3f, -0.3f), -Vector2dF(-0.3f, 0.3f) }
};
} float_tests[] = {{Vector2dF(0, 0), -Vector2d(0, 0)},
{Vector2dF(-0.3f, -0.3f), -Vector2dF(0.3f, 0.3f)},
{Vector2dF(0.3f, 0.3f), -Vector2dF(-0.3f, -0.3f)},
{Vector2dF(-0.3f, 0.3f), -Vector2dF(0.3f, -0.3f)},
{Vector2dF(0.3f, -0.3f), -Vector2dF(-0.3f, 0.3f)}};
for (size_t i = 0; i < base::size(float_tests); ++i)
EXPECT_EQ(float_tests[i].expected.ToString(),
@ -101,16 +91,11 @@ TEST(Vector2dTest, Negative) {
TEST(Vector2dTest, Scale) {
float double_values[][4] = {
{ 4.5f, 1.2f, 3.3f, 5.6f },
{ 4.5f, -1.2f, 3.3f, 5.6f },
{ 4.5f, 1.2f, 3.3f, -5.6f },
{ 4.5f, 1.2f, -3.3f, -5.6f },
{ -4.5f, 1.2f, 3.3f, 5.6f },
{ -4.5f, 1.2f, 0, 5.6f },
{ -4.5f, 1.2f, 3.3f, 0 },
{ 4.5f, 0, 3.3f, 5.6f },
{ 0, 1.2f, 3.3f, 5.6f }
};
{4.5f, 1.2f, 3.3f, 5.6f}, {4.5f, -1.2f, 3.3f, 5.6f},
{4.5f, 1.2f, 3.3f, -5.6f}, {4.5f, 1.2f, -3.3f, -5.6f},
{-4.5f, 1.2f, 3.3f, 5.6f}, {-4.5f, 1.2f, 0, 5.6f},
{-4.5f, 1.2f, 3.3f, 0}, {4.5f, 0, 3.3f, 5.6f},
{0, 1.2f, 3.3f, 5.6f}};
for (size_t i = 0; i < base::size(double_values); ++i) {
Vector2dF v(double_values[i][0], double_values[i][1]);
@ -118,24 +103,17 @@ TEST(Vector2dTest, Scale) {
EXPECT_EQ(v.x(), double_values[i][0] * double_values[i][2]);
EXPECT_EQ(v.y(), double_values[i][1] * double_values[i][3]);
Vector2dF v2 = ScaleVector2d(
gfx::Vector2dF(double_values[i][0], double_values[i][1]),
double_values[i][2], double_values[i][3]);
Vector2dF v2 =
ScaleVector2d(gfx::Vector2dF(double_values[i][0], double_values[i][1]),
double_values[i][2], double_values[i][3]);
EXPECT_EQ(double_values[i][0] * double_values[i][2], v2.x());
EXPECT_EQ(double_values[i][1] * double_values[i][3], v2.y());
}
float single_values[][3] = {
{ 4.5f, 1.2f, 3.3f },
{ 4.5f, -1.2f, 3.3f },
{ 4.5f, 1.2f, 3.3f },
{ 4.5f, 1.2f, -3.3f },
{ -4.5f, 1.2f, 3.3f },
{ -4.5f, 1.2f, 0 },
{ -4.5f, 1.2f, 3.3f },
{ 4.5f, 0, 3.3f },
{ 0, 1.2f, 3.3f }
};
{4.5f, 1.2f, 3.3f}, {4.5f, -1.2f, 3.3f}, {4.5f, 1.2f, 3.3f},
{4.5f, 1.2f, -3.3f}, {-4.5f, 1.2f, 3.3f}, {-4.5f, 1.2f, 0},
{-4.5f, 1.2f, 3.3f}, {4.5f, 0, 3.3f}, {0, 1.2f, 3.3f}};
for (size_t i = 0; i < base::size(single_values); ++i) {
Vector2dF v(single_values[i][0], single_values[i][1]);
@ -143,9 +121,9 @@ TEST(Vector2dTest, Scale) {
EXPECT_EQ(v.x(), single_values[i][0] * single_values[i][2]);
EXPECT_EQ(v.y(), single_values[i][1] * single_values[i][2]);
Vector2dF v2 = ScaleVector2d(
gfx::Vector2dF(double_values[i][0], double_values[i][1]),
double_values[i][2]);
Vector2dF v2 =
ScaleVector2d(gfx::Vector2dF(double_values[i][0], double_values[i][1]),
double_values[i][2]);
EXPECT_EQ(single_values[i][0] * single_values[i][2], v2.x());
EXPECT_EQ(single_values[i][1] * single_values[i][2], v2.y());
}
@ -153,12 +131,7 @@ TEST(Vector2dTest, Scale) {
TEST(Vector2dTest, Length) {
int int_values[][2] = {
{ 0, 0 },
{ 10, 20 },
{ 20, 10 },
{ -10, -20 },
{ -20, 10 },
{ 10, -20 },
{0, 0}, {10, 20}, {20, 10}, {-10, -20}, {-20, 10}, {10, -20},
};
for (size_t i = 0; i < base::size(int_values); ++i) {
@ -173,16 +146,16 @@ TEST(Vector2dTest, Length) {
}
float float_values[][2] = {
{ 0, 0 },
{ 10.5f, 20.5f },
{ 20.5f, 10.5f },
{ -10.5f, -20.5f },
{ -20.5f, 10.5f },
{ 10.5f, -20.5f },
// A large vector that fails if the Length function doesn't use
// double precision internally.
{ 1236278317862780234892374893213178027.12122348904204230f,
335890352589839028212313231225425134332.38123f },
{0, 0},
{10.5f, 20.5f},
{20.5f, 10.5f},
{-10.5f, -20.5f},
{-20.5f, 10.5f},
{10.5f, -20.5f},
// A large vector that fails if the Length function doesn't use
// double precision internally.
{1236278317862780234892374893213178027.12122348904204230f,
335890352589839028212313231225425134332.38123f},
};
for (size_t i = 0; i < base::size(float_values); ++i) {

View File

@ -22,15 +22,12 @@ CGFloat PrimaryDisplayHeight() {
} // namespace
NSRect ScreenRectToNSRect(const Rect& rect) {
return NSMakeRect(rect.x(),
PrimaryDisplayHeight() - rect.y() - rect.height(),
rect.width(),
return NSMakeRect(rect.x(), PrimaryDisplayHeight() - rect.y() - rect.height(), rect.width(),
rect.height());
}
Rect ScreenRectFromNSRect(const NSRect& rect) {
return Rect(rect.origin.x,
PrimaryDisplayHeight() - rect.origin.y - rect.size.height,
return Rect(rect.origin.x, PrimaryDisplayHeight() - rect.origin.y - rect.size.height,
rect.size.width, rect.size.height);
}

View File

@ -98,14 +98,10 @@ void Transform::RotateAboutXAxis(double degrees) {
SkScalar cosTheta = SkDoubleToScalar(std::cos(radians));
SkScalar sinTheta = SkDoubleToScalar(std::sin(radians));
if (matrix_.isIdentity()) {
matrix_.set3x3(1, 0, 0,
0, cosTheta, sinTheta,
0, -sinTheta, cosTheta);
matrix_.set3x3(1, 0, 0, 0, cosTheta, sinTheta, 0, -sinTheta, cosTheta);
} else {
SkMatrix44 rot(SkMatrix44::kUninitialized_Constructor);
rot.set3x3(1, 0, 0,
0, cosTheta, sinTheta,
0, -sinTheta, cosTheta);
rot.set3x3(1, 0, 0, 0, cosTheta, sinTheta, 0, -sinTheta, cosTheta);
matrix_.preConcat(rot);
}
}
@ -115,16 +111,12 @@ void Transform::RotateAboutYAxis(double degrees) {
SkScalar cosTheta = SkDoubleToScalar(std::cos(radians));
SkScalar sinTheta = SkDoubleToScalar(std::sin(radians));
if (matrix_.isIdentity()) {
// Note carefully the placement of the -sinTheta for rotation about
// y-axis is different than rotation about x-axis or z-axis.
matrix_.set3x3(cosTheta, 0, -sinTheta,
0, 1, 0,
sinTheta, 0, cosTheta);
// Note carefully the placement of the -sinTheta for rotation about
// y-axis is different than rotation about x-axis or z-axis.
matrix_.set3x3(cosTheta, 0, -sinTheta, 0, 1, 0, sinTheta, 0, cosTheta);
} else {
SkMatrix44 rot(SkMatrix44::kUninitialized_Constructor);
rot.set3x3(cosTheta, 0, -sinTheta,
0, 1, 0,
sinTheta, 0, cosTheta);
rot.set3x3(cosTheta, 0, -sinTheta, 0, 1, 0, sinTheta, 0, cosTheta);
matrix_.preConcat(rot);
}
}
@ -134,14 +126,10 @@ void Transform::RotateAboutZAxis(double degrees) {
SkScalar cosTheta = SkDoubleToScalar(std::cos(radians));
SkScalar sinTheta = SkDoubleToScalar(std::sin(radians));
if (matrix_.isIdentity()) {
matrix_.set3x3(cosTheta, sinTheta, 0,
-sinTheta, cosTheta, 0,
0, 0, 1);
matrix_.set3x3(cosTheta, sinTheta, 0, -sinTheta, cosTheta, 0, 0, 0, 1);
} else {
SkMatrix44 rot(SkMatrix44::kUninitialized_Constructor);
rot.set3x3(cosTheta, sinTheta, 0,
-sinTheta, cosTheta, 0,
0, 0, 1);
rot.set3x3(cosTheta, sinTheta, 0, -sinTheta, cosTheta, 0, 0, 0, 1);
matrix_.preConcat(rot);
}
}
@ -228,20 +216,18 @@ void Transform::ConcatTransform(const Transform& transform) {
bool Transform::IsApproximatelyIdentityOrTranslation(SkScalar tolerance) const {
DCHECK_GE(tolerance, 0);
return
ApproximatelyOne(matrix_.get(0, 0), tolerance) &&
ApproximatelyZero(matrix_.get(1, 0), tolerance) &&
ApproximatelyZero(matrix_.get(2, 0), tolerance) &&
matrix_.get(3, 0) == 0 &&
ApproximatelyZero(matrix_.get(0, 1), tolerance) &&
ApproximatelyOne(matrix_.get(1, 1), tolerance) &&
ApproximatelyZero(matrix_.get(2, 1), tolerance) &&
matrix_.get(3, 1) == 0 &&
ApproximatelyZero(matrix_.get(0, 2), tolerance) &&
ApproximatelyZero(matrix_.get(1, 2), tolerance) &&
ApproximatelyOne(matrix_.get(2, 2), tolerance) &&
matrix_.get(3, 2) == 0 &&
matrix_.get(3, 3) == 1;
return ApproximatelyOne(matrix_.get(0, 0), tolerance) &&
ApproximatelyZero(matrix_.get(1, 0), tolerance) &&
ApproximatelyZero(matrix_.get(2, 0), tolerance) &&
matrix_.get(3, 0) == 0 &&
ApproximatelyZero(matrix_.get(0, 1), tolerance) &&
ApproximatelyOne(matrix_.get(1, 1), tolerance) &&
ApproximatelyZero(matrix_.get(2, 1), tolerance) &&
matrix_.get(3, 1) == 0 &&
ApproximatelyZero(matrix_.get(0, 2), tolerance) &&
ApproximatelyZero(matrix_.get(1, 2), tolerance) &&
ApproximatelyOne(matrix_.get(2, 2), tolerance) &&
matrix_.get(3, 2) == 0 && matrix_.get(3, 3) == 1;
}
bool Transform::IsApproximatelyIdentityOrIntegerTranslation(
@ -313,13 +299,8 @@ bool Transform::IsBackFaceVisible() const {
double cofactor_part_6 =
matrix_.get(0, 3) * matrix_.get(1, 1) * matrix_.get(3, 0);
double cofactor33 =
cofactor_part_1 +
cofactor_part_2 +
cofactor_part_3 -
cofactor_part_4 -
cofactor_part_5 -
cofactor_part_6;
double cofactor33 = cofactor_part_1 + cofactor_part_2 + cofactor_part_3 -
cofactor_part_4 - cofactor_part_5 - cofactor_part_6;
// Technically the transformed z component is cofactor33 / determinant. But
// we can avoid the costly division because we only care about the resulting
@ -385,12 +366,9 @@ bool Transform::Preserves2dAxisAlignment() const {
num_non_zero_in_col_1++;
}
return
num_non_zero_in_row_0 <= 1 &&
num_non_zero_in_row_1 <= 1 &&
num_non_zero_in_col_0 <= 1 &&
num_non_zero_in_col_1 <= 1 &&
!has_x_or_y_perspective;
return num_non_zero_in_row_0 <= 1 && num_non_zero_in_row_1 <= 1 &&
num_non_zero_in_col_0 <= 1 && num_non_zero_in_col_1 <= 1 &&
!has_x_or_y_perspective;
}
void Transform::Transpose() {
@ -619,21 +597,11 @@ std::string Transform::ToString() const {
" %+0.4f %+0.4f %+0.4f %+0.4f \n"
" %+0.4f %+0.4f %+0.4f %+0.4f \n"
" %+0.4f %+0.4f %+0.4f %+0.4f ]\n",
matrix_.get(0, 0),
matrix_.get(0, 1),
matrix_.get(0, 2),
matrix_.get(0, 3),
matrix_.get(1, 0),
matrix_.get(1, 1),
matrix_.get(1, 2),
matrix_.get(1, 3),
matrix_.get(2, 0),
matrix_.get(2, 1),
matrix_.get(2, 2),
matrix_.get(2, 3),
matrix_.get(3, 0),
matrix_.get(3, 1),
matrix_.get(3, 2),
matrix_.get(0, 0), matrix_.get(0, 1), matrix_.get(0, 2),
matrix_.get(0, 3), matrix_.get(1, 0), matrix_.get(1, 1),
matrix_.get(1, 2), matrix_.get(1, 3), matrix_.get(2, 0),
matrix_.get(2, 1), matrix_.get(2, 2), matrix_.get(2, 3),
matrix_.get(3, 0), matrix_.get(3, 1), matrix_.get(3, 2),
matrix_.get(3, 3));
}

View File

@ -28,10 +28,7 @@ class Vector3dF;
// copy/assign.
class GEOMETRY_SKIA_EXPORT Transform {
public:
enum SkipInitialization {
kSkipInitialization
};
enum SkipInitialization { kSkipInitialization };
constexpr Transform() : matrix_(SkMatrix44::kIdentity_Constructor) {}
@ -291,13 +288,11 @@ class GEOMETRY_SKIA_EXPORT Transform {
std::string ToString() const;
private:
void TransformPointInternal(const SkMatrix44& xform,
Point* point) const;
void TransformPointInternal(const SkMatrix44& xform, Point* point) const;
void TransformPointInternal(const SkMatrix44& xform, PointF* point) const;
void TransformPointInternal(const SkMatrix44& xform,
Point3F* point) const;
void TransformPointInternal(const SkMatrix44& xform, Point3F* point) const;
void TransformVectorInternal(const SkMatrix44& xform,
Vector3dF* vector) const;