blob: 8df805706c5248996aee24f29f5ae309651a99c6 [file] [log] [blame]
package android.uirendering.cts.testclasses;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Point;
import android.graphics.Typeface;
import android.test.suitebuilder.annotation.SmallTest;
import android.uirendering.cts.bitmapcomparers.MSSIMComparer;
import android.uirendering.cts.bitmapverifiers.SamplePointVerifier;
import android.uirendering.cts.testinfrastructure.ActivityTestBase;
import android.uirendering.cts.testinfrastructure.CanvasClient;
import android.uirendering.cts.testinfrastructure.ViewInitializer;
import android.view.View;
import android.view.ViewGroup;
import com.android.cts.uirendering.R;
public class PathClippingTests extends ActivityTestBase {
// draw circle with whole in it, with stroked circle
static final CanvasClient sCircleDrawCanvasClient = new CanvasClient() {
@Override
public String getDebugString() {
return "StrokedCircleDraw";
}
@Override
public void draw(Canvas canvas, int width, int height) {
Paint paint = new Paint();
paint.setAntiAlias(false);
paint.setColor(Color.BLUE);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(20);
canvas.drawCircle(50, 50, 40, paint);
}
};
// draw circle with whole in it, by path operations + path clipping
static final CanvasClient sCircleClipCanvasClient = new CanvasClient() {
@Override
public String getDebugString() {
return "CircleClipDraw";
}
@Override
public void draw(Canvas canvas, int width, int height) {
canvas.save();
Path path = new Path();
path.addCircle(50, 50, 50, Path.Direction.CW);
path.addCircle(50, 50, 30, Path.Direction.CCW);
canvas.clipPath(path);
canvas.drawColor(Color.BLUE);
canvas.restore();
}
};
@SmallTest
public void testCircleWithCircle() {
createTest()
.addCanvasClient(sCircleDrawCanvasClient, false)
.addCanvasClient(sCircleClipCanvasClient)
.runWithComparer(new MSSIMComparer(0.90));
}
@SmallTest
public void testCircleWithPoints() {
createTest()
.addCanvasClient(sCircleClipCanvasClient)
.runWithVerifier(new SamplePointVerifier(
new Point[] {
// inside of circle
new Point(50, 50),
// on circle
new Point(50 + 32, 50 + 32),
// outside of circle
new Point(50 + 38, 50 + 38),
new Point(100, 100)
},
new int[] {
Color.WHITE,
Color.BLUE,
Color.WHITE,
Color.WHITE,
}));
}
@SmallTest
public void testViewRotate() {
createTest()
.addLayout(R.layout.blue_padded_layout, new ViewInitializer() {
@Override
public void intializeView(View view) {
ViewGroup rootView = (ViewGroup) view;
rootView.setClipChildren(true);
View childView = rootView.getChildAt(0);
childView.setPivotX(50);
childView.setPivotY(50);
childView.setRotation(45f);
}
})
.runWithVerifier(new SamplePointVerifier(
new Point[] {
// inside of rotated rect
new Point(50, 50),
new Point(50 + 32, 50 + 32),
// outside of rotated rect
new Point(50 + 38, 50 + 38),
new Point(100, 100)
},
new int[] {
Color.BLUE,
Color.BLUE,
Color.WHITE,
Color.WHITE,
}));
}
@SmallTest
public void testTextClip() {
createTest()
.addCanvasClient(new CanvasClient() {
@Override
public void draw(Canvas canvas, int width, int height) {
canvas.save();
Path path = new Path();
path.addCircle(0, 50, 50, Path.Direction.CW);
path.addCircle(100, 50, 50, Path.Direction.CW);
canvas.clipPath(path);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setTextSize(100);
paint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
canvas.drawText("STRING", 0, 100, paint);
canvas.restore();
}
})
.runWithComparer(new MSSIMComparer(0.90));
}
}