b5bc454870
Change-Id: I57ab30b6d56370dade6987f442136ea5e5546c9b
117 lines
3.0 KiB
C++
117 lines
3.0 KiB
C++
/*
|
|
* Copyright (C) 2015 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#include <gtest/gtest.h>
|
|
#include <SkPath.h>
|
|
#include <SkRegion.h>
|
|
|
|
#include "ClipArea.h"
|
|
|
|
#include "Matrix.h"
|
|
#include "Rect.h"
|
|
#include "utils/LinearAllocator.h"
|
|
|
|
namespace android {
|
|
namespace uirenderer {
|
|
|
|
static Rect kViewportBounds(0, 0, 2048, 2048);
|
|
|
|
static ClipArea createClipArea() {
|
|
ClipArea area;
|
|
area.setViewportDimensions(kViewportBounds.getWidth(), kViewportBounds.getHeight());
|
|
return area;
|
|
}
|
|
|
|
TEST(TransformedRectangle, basics) {
|
|
Rect r(0, 0, 100, 100);
|
|
Matrix4 minus90;
|
|
minus90.loadRotate(-90);
|
|
minus90.mapRect(r);
|
|
Rect r2(20, 40, 120, 60);
|
|
|
|
Matrix4 m90;
|
|
m90.loadRotate(90);
|
|
TransformedRectangle tr(r, m90);
|
|
EXPECT_TRUE(tr.canSimplyIntersectWith(tr));
|
|
|
|
Matrix4 m0;
|
|
TransformedRectangle tr0(r2, m0);
|
|
EXPECT_FALSE(tr.canSimplyIntersectWith(tr0));
|
|
|
|
Matrix4 m45;
|
|
m45.loadRotate(45);
|
|
TransformedRectangle tr2(r, m45);
|
|
EXPECT_FALSE(tr2.canSimplyIntersectWith(tr));
|
|
}
|
|
|
|
TEST(RectangleList, basics) {
|
|
RectangleList list;
|
|
EXPECT_TRUE(list.isEmpty());
|
|
|
|
Rect r(0, 0, 100, 100);
|
|
Matrix4 m45;
|
|
m45.loadRotate(45);
|
|
list.set(r, m45);
|
|
EXPECT_FALSE(list.isEmpty());
|
|
|
|
Rect r2(20, 20, 200, 200);
|
|
list.intersectWith(r2, m45);
|
|
EXPECT_FALSE(list.isEmpty());
|
|
EXPECT_EQ(1, list.getTransformedRectanglesCount());
|
|
|
|
Rect r3(20, 20, 200, 200);
|
|
Matrix4 m30;
|
|
m30.loadRotate(30);
|
|
list.intersectWith(r2, m30);
|
|
EXPECT_FALSE(list.isEmpty());
|
|
EXPECT_EQ(2, list.getTransformedRectanglesCount());
|
|
|
|
SkRegion clip;
|
|
clip.setRect(0, 0, 2000, 2000);
|
|
SkRegion rgn(list.convertToRegion(clip));
|
|
EXPECT_FALSE(rgn.isEmpty());
|
|
}
|
|
|
|
TEST(ClipArea, basics) {
|
|
ClipArea area(createClipArea());
|
|
EXPECT_FALSE(area.isEmpty());
|
|
}
|
|
|
|
TEST(ClipArea, paths) {
|
|
ClipArea area(createClipArea());
|
|
Matrix4 transform;
|
|
transform.loadIdentity();
|
|
SkPath path;
|
|
SkScalar r = 100;
|
|
path.addCircle(r, r, r);
|
|
area.clipPathWithTransform(path, &transform, SkRegion::kIntersect_Op);
|
|
EXPECT_FALSE(area.isEmpty());
|
|
EXPECT_FALSE(area.isSimple());
|
|
EXPECT_FALSE(area.isRectangleList());
|
|
Rect clipRect(area.getClipRect());
|
|
clipRect.dump("clipRect");
|
|
Rect expected(0, 0, r * 2, r * 2);
|
|
expected.dump("expected");
|
|
EXPECT_EQ(expected, clipRect);
|
|
SkRegion clipRegion(area.getClipRegion());
|
|
auto skRect(clipRegion.getBounds());
|
|
Rect regionBounds;
|
|
regionBounds.set(skRect);
|
|
EXPECT_EQ(expected, regionBounds);
|
|
}
|
|
}
|
|
}
|