add centerX() and centerY() to SkIRect (because they made me)
Review URL: https://codereview.appspot.com/6826078 git-svn-id: http://skia.googlecode.com/svn/trunk@6360 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
parent
fc5100af55
commit
6898d52c37
@ -71,6 +71,24 @@ struct SK_API SkIRect {
|
|||||||
*/
|
*/
|
||||||
int height() const { return fBottom - fTop; }
|
int height() const { return fBottom - fTop; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Since the center of an integer rect may fall on a factional value, this
|
||||||
|
* method is defined to return (right + left) >> 1.
|
||||||
|
*
|
||||||
|
* This is a specific "truncation" of the average, which is different than
|
||||||
|
* (right + left) / 2 when the sum is negative.
|
||||||
|
*/
|
||||||
|
int centerX() const { return (fRight + fLeft) >> 1; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Since the center of an integer rect may fall on a factional value, this
|
||||||
|
* method is defined to return (bottom + top) >> 1
|
||||||
|
*
|
||||||
|
* This is a specific "truncation" of the average, which is different than
|
||||||
|
* (bottom + top) / 2 when the sum is negative.
|
||||||
|
*/
|
||||||
|
int centerY() const { return (fBottom + fTop) >> 1; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return true if the rectangle's width or height are <= 0
|
* Return true if the rectangle's width or height are <= 0
|
||||||
*/
|
*/
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
* found in the LICENSE file.
|
* found in the LICENSE file.
|
||||||
*/
|
*/
|
||||||
#include "Test.h"
|
#include "Test.h"
|
||||||
|
#include "SkRandom.h"
|
||||||
#include "SkRect.h"
|
#include "SkRect.h"
|
||||||
|
|
||||||
#ifdef SK_SCALAR_IS_FLOAT
|
#ifdef SK_SCALAR_IS_FLOAT
|
||||||
@ -14,6 +15,37 @@ static float make_zero() {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void test_center(skiatest::Reporter* reporter) {
|
||||||
|
static const struct {
|
||||||
|
SkIRect fRect;
|
||||||
|
SkIPoint fCenter;
|
||||||
|
} data[] = {
|
||||||
|
{ { 0, 0, 0, 0 }, { 0, 0 } },
|
||||||
|
{ { 0, 0, 1, 1 }, { 0, 0 } },
|
||||||
|
{ { -1, -1, 0, 0 }, { -1, -1 } },
|
||||||
|
{ { 0, 0, 10, 7 }, { 5, 3 } },
|
||||||
|
{ { 0, 0, 11, 6 }, { 5, 3 } },
|
||||||
|
};
|
||||||
|
for (size_t index = 0; index < SK_ARRAY_COUNT(data); ++index) {
|
||||||
|
REPORTER_ASSERT(reporter,
|
||||||
|
data[index].fRect.centerX() == data[index].fCenter.x());
|
||||||
|
REPORTER_ASSERT(reporter,
|
||||||
|
data[index].fRect.centerY() == data[index].fCenter.y());
|
||||||
|
}
|
||||||
|
|
||||||
|
SkRandom rand;
|
||||||
|
for (int i = 0; i < 10000; ++i) {
|
||||||
|
SkIRect r;
|
||||||
|
|
||||||
|
r.set(rand.nextS() >> 2, rand.nextS() >> 2,
|
||||||
|
rand.nextS() >> 2, rand.nextS() >> 2);
|
||||||
|
int cx = r.centerX();
|
||||||
|
int cy = r.centerY();
|
||||||
|
REPORTER_ASSERT(reporter, (r.left() + r.right() >> 1) == cx);
|
||||||
|
REPORTER_ASSERT(reporter, (r.top() + r.bottom() >> 1) == cy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void check_invalid(skiatest::Reporter* reporter,
|
static void check_invalid(skiatest::Reporter* reporter,
|
||||||
SkScalar l, SkScalar t, SkScalar r, SkScalar b) {
|
SkScalar l, SkScalar t, SkScalar r, SkScalar b) {
|
||||||
SkRect rect;
|
SkRect rect;
|
||||||
@ -47,6 +79,8 @@ static void TestInfRect(skiatest::Reporter* reporter) {
|
|||||||
check_invalid(reporter, small, invalid[i], big, big);
|
check_invalid(reporter, small, invalid[i], big, big);
|
||||||
check_invalid(reporter, invalid[i], small, big, big);
|
check_invalid(reporter, invalid[i], small, big, big);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test_center(reporter);
|
||||||
}
|
}
|
||||||
|
|
||||||
// need tests for SkStrSearch
|
// need tests for SkStrSearch
|
||||||
|
Loading…
Reference in New Issue
Block a user