42f710f3fa
This is a reland of commit ae5e846047
Original change's description:
> [graphite] Move Graphite into Skia base directories.
>
> Change-Id: Ie0fb74f3766a8b33387c145bd1151344c25808cb
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/528708
> Reviewed-by: Kevin Lubick <kjlubick@google.com>
> Reviewed-by: Greg Daniel <egdaniel@google.com>
> Commit-Queue: Jim Van Verth <jvanverth@google.com>
Change-Id: Ia575fd49206ad0b665a6a9153317e738bb321446
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/529059
Reviewed-by: Kevin Lubick <kjlubick@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
119 lines
4.3 KiB
C++
119 lines
4.3 KiB
C++
/*
|
|
* Copyright 2021 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#include "src/gpu/graphite/geom/Rect.h"
|
|
#include "tests/Test.h"
|
|
|
|
namespace skgpu::graphite {
|
|
|
|
#define CHECK(A) REPORTER_ASSERT(reporter, A)
|
|
|
|
DEF_GRAPHITE_TEST(skgpu_Rect, reporter) {
|
|
const SkRect skRect = SkRect::MakeLTRB(1,-3,4,0);
|
|
const Rect rect = skRect;
|
|
CHECK(rect == rect);
|
|
CHECK(rect == skRect); // promotes 'skRect' to a Rect for ==
|
|
CHECK(rect.asSkRect() == skRect); // converts 'rect' to SkRect for ==
|
|
|
|
for (const float l : {0,1,2}) {
|
|
for (const float t : {-4,-3,-2}) {
|
|
for (const float r : {3,4,5}) {
|
|
for (const float b : {-1,0,1}) {
|
|
const Rect rect2(l,t,r,b);
|
|
const SkRect skRect2{l,t,r,b};
|
|
|
|
CHECK(rect2 == rect2);
|
|
CHECK(rect2 == Rect(float2(l,t), float2(r,b)));
|
|
CHECK(rect2 == Rect(skRect2));
|
|
CHECK(rect2.asSkRect() == skRect2);
|
|
|
|
CHECK((rect2 == rect) == (rect == rect2));
|
|
CHECK((rect2 != rect) == (rect != rect2));
|
|
CHECK((rect != rect2) == !(rect == rect2));
|
|
|
|
CHECK(rect2 == Rect::XYWH(l, t, r - l, b - t));
|
|
CHECK(rect2 == Rect::XYWH(float2(l, t), float2(r - l, b - t)));
|
|
if (l == 0 && t == 0) {
|
|
CHECK(rect2 == Rect::WH(r - l, b - t));
|
|
CHECK(rect2 == Rect::WH(float2(r - l, b - t)));
|
|
}
|
|
CHECK(rect2 == Rect::FromVals(rect2.vals()));
|
|
|
|
CHECK(rect2.x() == l);
|
|
CHECK(rect2.y() == t);
|
|
CHECK(rect2.left() == l);
|
|
CHECK(rect2.top() == t);
|
|
CHECK(rect2.right() == r);
|
|
CHECK(rect2.bot() == b);
|
|
CHECK(all(rect2.topLeft() == float2(l,t)));
|
|
CHECK(all(rect2.botRight() == float2(r,b)));
|
|
CHECK(all(rect2.ltrb() == float4(l,t,r,b)));
|
|
CHECK(all(rect2.vals() == float4(l,t,-r,-b)));
|
|
|
|
Rect setTest(-99,-99,99,99);
|
|
CHECK(setTest != rect2);
|
|
setTest.setLeft(l);
|
|
setTest.setTop(t);
|
|
setTest.setRight(r);
|
|
setTest.setBot(b);
|
|
CHECK(setTest == rect2);
|
|
|
|
setTest = Rect(-99,-99,99,99);
|
|
CHECK(setTest != rect2);
|
|
setTest.setTopLeft({l,t});
|
|
setTest.setBotRight({r,b});
|
|
CHECK(setTest == rect2);
|
|
|
|
for (int i = 0; i < 4; ++i) {
|
|
Rect rnan = rect2;
|
|
CHECK(!rnan.isEmptyNegativeOrNaN());
|
|
rnan.vals()[i] = std::numeric_limits<float>::quiet_NaN();
|
|
CHECK(rnan.isEmptyNegativeOrNaN());
|
|
}
|
|
|
|
CHECK(all(rect2.size() == float2(skRect2.width(), skRect2.height())));
|
|
CHECK(all(rect2.center() == float2(skRect2.centerX(), skRect2.centerY())));
|
|
CHECK(rect2.area() == skRect2.height() * skRect2.width());
|
|
|
|
CHECK(rect.intersects(rect2) == rect2.intersects(rect));
|
|
CHECK(rect.intersects(rect2) == skRect.intersects(skRect2));
|
|
CHECK(rect.contains(rect2) == skRect.contains(skRect2));
|
|
CHECK(rect2.contains(rect) == skRect2.contains(skRect));
|
|
|
|
CHECK(rect2.makeRoundIn() == SkRect::Make(skRect2.roundIn()));
|
|
CHECK(rect2.makeRoundOut() == SkRect::Make(skRect2.roundOut()));
|
|
CHECK(rect2.makeInset(.5f) == skRect2.makeInset(.5f, .5f));
|
|
CHECK(rect2.makeInset({.5f, -.25f}) == skRect2.makeInset(.5f, -.25f));
|
|
CHECK(rect2.makeOutset(.5f) == skRect2.makeOutset(.5f, .5f));
|
|
CHECK(rect2.makeOutset({.5f, -.25f}) == skRect2.makeOutset(.5f, -.25f));
|
|
CHECK(rect2.makeOffset({.5f, -.25f}) == skRect2.makeOffset(.5f, -.25f));
|
|
|
|
SkRect skJoin = skRect;
|
|
skJoin.join(skRect2);
|
|
CHECK(rect.makeJoin(rect2) == skJoin);
|
|
CHECK(rect.makeJoin(rect2) == rect2.makeJoin(rect));
|
|
|
|
CHECK(rect.intersects(rect2) == !rect.makeIntersect(rect2).isEmptyNegativeOrNaN());
|
|
CHECK(rect.makeIntersect(rect2) == rect2.makeIntersect(rect));
|
|
if (rect.intersects(rect2)) {
|
|
CHECK(skRect.intersects(skRect2));
|
|
SkRect skIsect;
|
|
CHECK(skIsect.intersect(skRect, skRect2));
|
|
CHECK(rect.makeIntersect(rect2) == Rect(skIsect));
|
|
}
|
|
|
|
const Rect rect3{r,b,l,t}; // intentionally out of order
|
|
const SkRect skRect3{r,b,l,t};
|
|
CHECK(rect3.isEmptyNegativeOrNaN());
|
|
CHECK(skRect3.isEmpty());
|
|
CHECK(rect3.makeSorted() == skRect3.makeSorted());
|
|
CHECK(rect3.makeSorted() == rect2);
|
|
}}}}
|
|
}
|
|
|
|
} // namespace skgpu
|