summaryrefslogtreecommitdiffstatsci
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cairo-tests/linear-gradient.cpp2
-rw-r--r--src/cairo-tests/radial-gradient.cpp77
-rw-r--r--src/skia-tests/fill.cpp6
-rw-r--r--src/skia-tests/linear-gradient.cpp22
-rw-r--r--src/skia-tests/radial-gradient.cpp99
5 files changed, 204 insertions, 2 deletions
diff --git a/src/cairo-tests/linear-gradient.cpp b/src/cairo-tests/linear-gradient.cpp
index 9852c64..9096cd5 100644
--- a/src/cairo-tests/linear-gradient.cpp
+++ b/src/cairo-tests/linear-gradient.cpp
@@ -33,6 +33,8 @@ ca_test_linear_gradient(caskbench_context_t *ctx)
int w = ctx->canvas_width;
int h = ctx->canvas_height;
+ // TODO: Implement linear gradient
+
shapes_t shape;
shape_copy(&ctx->shape_defaults, &shape);
for (int i=0; i<ctx->size; i++) {
diff --git a/src/cairo-tests/radial-gradient.cpp b/src/cairo-tests/radial-gradient.cpp
new file mode 100644
index 0000000..fbdc4c6
--- /dev/null
+++ b/src/cairo-tests/radial-gradient.cpp
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2014 © Samsung Research America, Silicon Valley
+ *
+ * Use of this source code is governed by the 3-Clause BSD license
+ * specified in the COPYING file included with this source code.
+ */
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <cairo.h>
+
+#include "caskbench.h"
+#include "caskbench_context.h"
+#include "cairo-shapes.h"
+
+int
+ca_setup_radial_gradient(caskbench_context_t *ctx)
+{
+ cairo_set_antialias (ctx->cairo_cr, CAIRO_ANTIALIAS_NONE);
+ cairo_set_line_width (ctx->cairo_cr, 1);
+ return 1;
+}
+
+void
+ca_teardown_radial_gradient(void)
+{
+}
+
+int
+ca_test_radial_gradient(caskbench_context_t *ctx)
+{
+ int w = ctx->canvas_width;
+ int h = ctx->canvas_height;
+
+ // TODO: Implement radial gradient
+
+ shapes_t shape;
+ shape_copy(&ctx->shape_defaults, &shape);
+ for (int i=0; i<ctx->size; i++) {
+ double x1 = (double)rand()/RAND_MAX * w;
+ double x2 = (double)rand()/RAND_MAX * w;
+ double y1 = (double)rand()/RAND_MAX * h;
+ double y2 = (double)rand()/RAND_MAX * h;
+
+ shape.x = MIN(x1, x2);
+ shape.y = MIN(x1, x2);
+ shape.width = abs(x2 - x1);
+ shape.height = abs(y2 - y1);
+
+ cairoRandomizeColor(ctx);
+ cairoDrawRectangle(ctx, &shape);
+ switch (ctx->shape_defaults.fill_type) {
+ case CB_FILL_NONE:
+ cairo_stroke(ctx->cairo_cr);
+ break;
+ case CB_FILL_SOLID:
+ cairo_fill(ctx->cairo_cr);
+ break;
+ default:
+ break;
+ }
+ }
+
+ return 1;
+}
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
diff --git a/src/skia-tests/fill.cpp b/src/skia-tests/fill.cpp
index d3e2482..9828c53 100644
--- a/src/skia-tests/fill.cpp
+++ b/src/skia-tests/fill.cpp
@@ -20,6 +20,12 @@ static int element_spacing;
static int num_x_elements;
static int num_y_elements;
+/* TODO:
+ * - Specify with or without alpha
+ * - With or without antialiasing?
+ * - Stroke width should be via the shape defaults
+ */
+
int
sk_setup_fill(caskbench_context_t *ctx)
{
diff --git a/src/skia-tests/linear-gradient.cpp b/src/skia-tests/linear-gradient.cpp
index 0f06868..6cfa58e 100644
--- a/src/skia-tests/linear-gradient.cpp
+++ b/src/skia-tests/linear-gradient.cpp
@@ -11,6 +11,7 @@
#include <SkCanvas.h>
#include <SkPaint.h>
#include <SkRect.h>
+#include <SkGradientShader.h>
#include "caskbench.h"
#include "caskbench_context.h"
@@ -38,7 +39,20 @@ sk_test_linear_gradient(caskbench_context_t *ctx)
{
int w = ctx->canvas_width;
int h = ctx->canvas_height;
- int stops = 10;
+ SkShader *shader = NULL;
+ SkColor colors[10];
+ SkPoint points[2];
+
+ for (int i=0; i<NUM_ELEM(colors); i++)
+ colors[i] = skiaRandomColor();
+ points[0].fX = SkIntToScalar(0);
+ points[0].fY = SkIntToScalar(0);
+ points[1].fX = SkIntToScalar(100);
+ points[1].fY = SkIntToScalar(100);
+
+ shader = SkGradientShader::CreateLinear(
+ points, colors, NULL, NUM_ELEM(colors),
+ SkShader::kClamp_TileMode);
shapes_t shape;
shape_copy(&ctx->shape_defaults, &shape);
@@ -60,10 +74,14 @@ sk_test_linear_gradient(caskbench_context_t *ctx)
shape.height = 100;
shape.fill_type = CB_FILL_LINEAR_GRADIENT;
- sk_set_fill_style(ctx, &shape);
+ ctx->skia_paint->setStyle(SkPaint::kFill_Style);
+ ctx->skia_paint->setShader(shader);
skiaRandomizePaintColor(ctx);
skiaDrawRectangle(ctx, &shape);
+
+ if (shader)
+ shader->unref();
}
return 1;
diff --git a/src/skia-tests/radial-gradient.cpp b/src/skia-tests/radial-gradient.cpp
new file mode 100644
index 0000000..62d7fe1
--- /dev/null
+++ b/src/skia-tests/radial-gradient.cpp
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2014 © Samsung Research America, Silicon Valley
+ *
+ * Use of this source code is governed by the 3-Clause BSD license
+ * specified in the COPYING file included with this source code.
+ */
+#include <config.h>
+
+#include <math.h>
+
+#include <SkCanvas.h>
+#include <SkPaint.h>
+#include <SkRect.h>
+#include <SkGradientShader.h>
+
+#include "caskbench.h"
+#include "caskbench_context.h"
+#include "skia-shapes.h"
+
+int
+sk_setup_radial_gradient(caskbench_context_t *ctx)
+{
+ return 1;
+}
+
+void
+sk_teardown_radial_gradient(void)
+{
+}
+
+int
+sk_test_radial_gradient(caskbench_context_t *ctx)
+{
+ int w = ctx->canvas_width;
+ int h = ctx->canvas_height;
+ SkColor colors[10];
+ SkPoint center;
+
+ center.fX = SkIntToScalar(20);
+ center.fY = SkIntToScalar(20);
+
+ for (int i=0; i<NUM_ELEM(colors); i++)
+ colors[i] = skiaRandomColor();
+
+ SkShader* shader = NULL;
+ shader = SkGradientShader::CreateRadial(
+ center, 20,
+ colors, NULL, NUM_ELEM(colors),
+ SkShader::kClamp_TileMode);
+
+ // TODO: the HTML5 createRadialGradiet() routine
+ // actually creates a conical gradient: A gradient
+ // is made between two circles C1 and C2.
+ // x0=20, y0=20, r0=20, x1=50, y1=50, r1=70
+
+ shapes_t shape;
+ shape_copy(&ctx->shape_defaults, &shape);
+ for (int i=0; i<ctx->size; i++) {
+ double x1 = (double)rand()/RAND_MAX * w;
+ double x2 = (double)rand()/RAND_MAX * w;
+ double y1 = (double)rand()/RAND_MAX * h;
+ double y2 = (double)rand()/RAND_MAX * h;
+
+ double xx = MIN(x1, x2);
+ double yy = MIN(x1, x2);
+ double ww = abs(x2 - x1);
+ double hh = abs(y2 - y1);
+
+ // transform(shape.width/100, 0, 0, shape.height/100, 0, 0)
+ shape.x = 0;
+ shape.y = 0;
+ shape.width = 100;
+ shape.height = 100;
+ shape.fill_type = CB_FILL_RADIAL_GRADIENT;
+
+ skiaRandomizePaintColor(ctx);
+
+ ctx->skia_paint->setStyle(SkPaint::kFill_Style);
+ ctx->skia_paint->setShader(shader);
+
+ skiaDrawRectangle(ctx, &shape);
+
+ if (shader)
+ shader->unref();
+ }
+
+ return 1;
+}
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :