Example #1
0
static inline void assert_color(skiatest::Reporter* reporter, SkColor expected, SkColor actual) {
    const int TOLERANCE = 1;
    assert_color(reporter, expected, actual, TOLERANCE);
}
Example #2
0
/**
 * This test case is a mirror of the Android CTS tests for MatrixColorFilter
 * found in the android.graphics.ColorMatrixColorFilterTest class.
 */
static inline void test_colorMatrixCTS(skiatest::Reporter* reporter) {

    SkBitmap bitmap;
    bitmap.allocN32Pixels(1,1);

    SkCanvas canvas(bitmap);
    SkPaint paint;

    float blueToCyan[20] = {
            1.0f, 0.0f, 0.0f, 0.0f, 0.0f,
            0.0f, 1.0f, 1.0f, 0.0f, 0.0f,
            0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
            0.0f, 0.0f, 0.0f, 1.0f, 0.0f };
    paint.setColorFilter(SkColorFilters::Matrix(blueToCyan));

    paint.setColor(SK_ColorBLUE);
    canvas.drawPoint(0, 0, paint);
    assert_color(reporter, SK_ColorCYAN, bitmap.getColor(0, 0));

    paint.setColor(SK_ColorGREEN);
    canvas.drawPoint(0, 0, paint);
    assert_color(reporter, SK_ColorGREEN, bitmap.getColor(0, 0));

    paint.setColor(SK_ColorRED);
    canvas.drawPoint(0, 0, paint);
    assert_color(reporter, SK_ColorRED, bitmap.getColor(0, 0));

    // color components are clipped, not scaled
    paint.setColor(SK_ColorMAGENTA);
    canvas.drawPoint(0, 0, paint);
    assert_color(reporter, SK_ColorWHITE, bitmap.getColor(0, 0));

    float transparentRedAddBlue[20] = {
            1.0f, 0.0f, 0.0f, 0.0f, 0.0f,
            0.0f, 1.0f, 0.0f, 0.0f, 0.0f,
            0.0f, 0.0f, 1.0f, 0.0f, 64.0f/255,
           -0.5f, 0.0f, 0.0f, 1.0f, 0.0f
    };
    paint.setColorFilter(SkColorFilters::Matrix(transparentRedAddBlue));
    bitmap.eraseColor(SK_ColorTRANSPARENT);

    paint.setColor(SK_ColorRED);
    canvas.drawPoint(0, 0, paint);
    assert_color(reporter, SkColorSetARGB(128, 255, 0, 64), bitmap.getColor(0, 0), 2);

    paint.setColor(SK_ColorCYAN);
    canvas.drawPoint(0, 0, paint);
    // blue gets clipped
    assert_color(reporter, SK_ColorCYAN, bitmap.getColor(0, 0));

    // change array to filter out green
    REPORTER_ASSERT(reporter, 1.0f == transparentRedAddBlue[6]);
    transparentRedAddBlue[6] = 0.0f;

    // check that changing the array has no effect
    canvas.drawPoint(0, 0, paint);
    assert_color(reporter, SK_ColorCYAN, bitmap.getColor(0, 0));

    // create a new filter with the changed matrix
    paint.setColorFilter(SkColorFilters::Matrix(transparentRedAddBlue));
    canvas.drawPoint(0, 0, paint);
    assert_color(reporter, SK_ColorBLUE, bitmap.getColor(0, 0));
}
Example #3
0
int main(void)
{
	xorn_revision_t rev0, rev1, rev2, rev3;
	xorn_object_t ob0, ob1a, ob1b;

	xorn_selection_t sel0, sel1, sel2, sel3;
	xorn_revision_t rev4;
	struct xorn_double2d pos;

	struct xornsch_text text_data;
	xorn_object_t text_ob;
	xorn_selection_t text_sel;

	xorn_revision_t rev5;
	struct xornsch_line_attr line;
	struct xornsch_fill_attr fill;

	setup(&rev0, &rev1, &rev2, &rev3, &ob0, &ob1a, &ob1b);

	sel0 = xorn_select_all(rev0); assert(sel0 != NULL);
	sel1 = xorn_select_all(rev1); assert(sel1 != NULL);
	sel2 = xorn_select_all(rev2); assert(sel2 != NULL);
	sel3 = xorn_select_all(rev3); assert(sel3 != NULL);

	rev4 = xorn_new_revision(rev3);
	assert(rev4 != NULL);

	assert(xornsch_set_color(rev4, sel0, 70) == 0);
	assert_color(rev4, ob0, true, 4);
	assert_color(rev4, ob1a, false, 0);
	assert_color(rev4, ob1b, true, 3);

	assert(xornsch_set_color(rev4, sel1, 71) == 0);
	assert_color(rev4, ob0, true, 71);
	assert_color(rev4, ob1a, false, 0);
	assert_color(rev4, ob1b, true, 3);

	assert(xornsch_set_color(rev4, sel2, 72) == 0);
	assert_color(rev4, ob0, true, 72);
	assert_color(rev4, ob1a, false, 0);
	assert_color(rev4, ob1b, true, 72);

	assert(xornsch_set_color(rev4, sel3, 73) == 0);
	assert_color(rev4, ob0, true, 73);
	assert_color(rev4, ob1a, false, 0);
	assert_color(rev4, ob1b, true, 73);

	assert(xornsch_set_line_width(rev4, sel0, 8.0) == 0);
	assert_line_width(rev4, ob0, false, 0.);
	assert_line_width(rev4, ob1a, false, 0.);
	assert_line_width(rev4, ob1b, true, 1.);

	assert(xornsch_set_line_width(rev4, sel1, 8.1) == 0);
	assert_line_width(rev4, ob0, false, 0.);
	assert_line_width(rev4, ob1a, false, 0.);
	assert_line_width(rev4, ob1b, true, 1.);

	assert(xornsch_set_line_width(rev4, sel2, 8.2) == 0);
	assert_line_width(rev4, ob0, false, 0.);
	assert_line_width(rev4, ob1a, false, 0.);
	assert_line_width(rev4, ob1b, true, 8.2);

	assert(xornsch_set_line_width(rev4, sel3, 8.3) == 0);
	assert_line_width(rev4, ob0, false, 0.);
	assert_line_width(rev4, ob1a, false, 0.);
	assert_line_width(rev4, ob1b, true, 8.3);

	pos.x = 9.00; pos.y = 9.05;
	assert(xornsch_set_pos(rev4, sel0, &pos) == 0);
	assert_position(rev4, ob0, true, 0., 1.);
	assert_position(rev4, ob1a, false, 0., 0.);
	assert_position(rev4, ob1b, true, -1., -1.);

	pos.x = 9.10; pos.y = 9.15;
	assert(xornsch_set_pos(rev4, sel1, &pos) == 0);
	assert_position(rev4, ob0, true, 9.10, 9.15);
	assert_position(rev4, ob1a, false, 0., 0.);
	assert_position(rev4, ob1b, true, -1., -1.);

	pos.x = 9.20; pos.y = 9.25;
	assert(xornsch_set_pos(rev4, sel2, &pos) == 0);
	assert_position(rev4, ob0, true, 9.20, 9.25);
	assert_position(rev4, ob1a, false, 0., 0.);
	assert_position(rev4, ob1b, true, 9.20, 9.25);

	pos.x = 9.30; pos.y = 9.35;
	assert(xornsch_set_pos(rev4, sel3, &pos) == 0);
	assert_position(rev4, ob0, true, 9.30, 9.35);
	assert_position(rev4, ob1a, false, 0., 0.);
	assert_position(rev4, ob1b, true, 9.30, 9.35);

	assert(xornsch_set_pos_x(rev4, sel3, 9.40) == 0);
	assert_position(rev4, ob0, true, 9.40, 9.35);
	assert_position(rev4, ob1a, false, 0., 0.);
	assert_position(rev4, ob1b, true, 9.40, 9.35);

	assert(xornsch_set_pos_y(rev4, sel3, 9.45) == 0);
	assert_position(rev4, ob0, true, 9.40, 9.45);
	assert_position(rev4, ob1a, false, 0., 0.);
	assert_position(rev4, ob1b, true, 9.40, 9.45);

	memset(&text_data, 0, sizeof text_data);
	text_data.text.s = "Hello world";
	text_data.text.len = 11;
	text_ob = xornsch_add_text(rev4, &text_data);
	assert(text_ob != NULL);
	text_sel = xorn_select_object(text_ob);
	assert(text_sel != NULL);

	assert_text(rev4, ob0, false, "");
	assert_text(rev4, ob1a, false, "");
	assert_text(rev4, ob1b, false, "");
	assert_text(rev4, text_ob, true, "Hello world");

	text_data.text.s = "dlrow olleH";
	assert(xornsch_set_text(rev4, text_sel, &text_data.text) == 0);

	assert_text(rev4, ob0, false, "");
	assert_text(rev4, ob1a, false, "");
	assert_text(rev4, ob1b, false, "");
	assert_text(rev4, text_ob, true, "dlrow olleH");

	xorn_finalize_revision(rev4);

	rev5 = xorn_new_revision(rev2);
	assert(rev5 != NULL);

	memset(&line, 0, sizeof line);
	line.width = 10.;
	line.cap_style = 11;
	line.dash_style = 12;
	line.dash_length = 13.;
	line.dash_space = 14.;

	assert(xornsch_set_line(rev5, sel0, &line) == 0);
	assert_line(rev5, ob0, true, 1., 0, 0, 0., 0.);
	assert_line(rev5, ob1a, true, 1., 0, 0, 0., 0.);
	assert_line(rev5, ob1b, true, 1., 0, 0, 0., 0.);

	assert(xornsch_set_line(rev5, sel1, &line) == 0);
	assert_line(rev5, ob0, true, 10., 11, 12, 13., 14.);
	assert_line(rev5, ob1a, true, 1., 0, 0, 0., 0.);
	assert_line(rev5, ob1b, true, 1., 0, 0, 0., 0.);

	assert(xornsch_set_line(rev5, sel2, &line) == 0);
	assert_line(rev5, ob0, true, 10., 11, 12, 13., 14.);
	assert_line(rev5, ob1a, true, 10., 11, 12, 13., 14.);
	assert_line(rev5, ob1b, true, 10., 11, 12, 13., 14.);

	line.dash_space = 14.1;

	assert(xornsch_set_line(rev5, sel3, &line) == 0);
	assert_line(rev5, ob0, true, 10., 11, 12, 13., 14.1);
	assert_line(rev5, ob1a, true, 10., 11, 12, 13., 14.);
	assert_line(rev5, ob1b, true, 10., 11, 12, 13., 14.1);

	memset(&fill, 0, sizeof fill);
	fill.type = 20;
	fill.width = 21.;
	fill.angle0 = 22;
	fill.pitch0 = 23.;
	fill.angle1 = 24;
	fill.pitch1 = 25.;

	assert(xornsch_set_fill(rev5, sel0, &fill) == 0);
	assert_fill(rev5, ob0, false, 0, 0., 0, 0., 0, 0.);
	assert_fill(rev5, ob1a, true, 0, 0., 0, 0., 0, 0.);
	assert_fill(rev5, ob1b, true, 1, 0., 0, 0., 0, 0.);

	assert(xornsch_set_fill(rev5, sel1, &fill) == 0);
	assert_fill(rev5, ob0, false, 0, 0., 0, 0., 0, 0.);
	assert_fill(rev5, ob1a, true, 0, 0., 0, 0., 0, 0.);
	assert_fill(rev5, ob1b, true, 1, 0., 0, 0., 0, 0.);

	assert(xornsch_set_fill(rev5, sel2, &fill) == 0);
	assert_fill(rev5, ob0, false, 0, 0., 0, 0., 0, 0.);
	assert_fill(rev5, ob1a, true, 20, 21., 22, 23., 24, 25.);
	assert_fill(rev5, ob1b, true, 20, 21., 22, 23., 24, 25.);

	fill.pitch1 = 25.1;

	assert(xornsch_set_fill(rev5, sel3, &fill) == 0);
	assert_fill(rev5, ob0, false, 0, 0., 0, 0., 0, 0.);
	assert_fill(rev5, ob1a, true, 20, 21., 22, 23., 24, 25.);
	assert_fill(rev5, ob1b, true, 20, 21., 22, 23., 24, 25.1);

	xorn_finalize_revision(rev5);

	xorn_free_selection(text_sel);
	xorn_free_selection(sel3);
	xorn_free_selection(sel2);
	xorn_free_selection(sel1);
	xorn_free_selection(sel0);

	xorn_free_revision(rev5);
	xorn_free_revision(rev4);
	xorn_free_revision(rev3);
	xorn_free_revision(rev2);
	xorn_free_revision(rev1);
	xorn_free_revision(rev0);
	return 0;
}