summaryrefslogtreecommitdiffstats
path: root/progs/egl/openvg/trivial/stroke2.c
diff options
context:
space:
mode:
Diffstat (limited to 'progs/egl/openvg/trivial/stroke2.c')
-rw-r--r--progs/egl/openvg/trivial/stroke2.c207
1 files changed, 207 insertions, 0 deletions
diff --git a/progs/egl/openvg/trivial/stroke2.c b/progs/egl/openvg/trivial/stroke2.c
new file mode 100644
index 0000000..ce950c1
--- /dev/null
+++ b/progs/egl/openvg/trivial/stroke2.c
@@ -0,0 +1,207 @@
+#include "eglcommon.h"
+
+#include <VG/openvg.h>
+#include <X11/keysym.h>
+#include <stdio.h>
+
+VGPaint stroke;
+VGPath target;
+VGPath lines;
+
+VGfloat xform[9];
+VGfloat color1[4];
+VGfloat color2[4];
+VGfloat bgCol[4];
+
+static void
+init(void)
+{
+ VGubyte lineCmds[6];
+ VGfloat lineCoords[8];
+ VGfloat arcCoords[5];
+ VGubyte sccCmd[1];
+ VGubyte scCmd[1];
+ VGubyte lccCmd[1];
+ VGubyte lcCmd[1];
+ VGubyte moveCmd[1];
+ VGfloat moveCoords[2];
+ VGint i;
+
+ bgCol[0] = 1.0f;
+ bgCol[1] = 1.0f;
+ bgCol[2] = 1.0f;
+ bgCol[3] = 1.0f;
+
+ vgSetfv(VG_CLEAR_COLOR, 4, bgCol);
+ vgSeti(VG_RENDERING_QUALITY, VG_RENDERING_QUALITY_NONANTIALIASED);
+
+ stroke = vgCreatePaint();
+ /* Red */
+ color1[0] = 1.0f;
+ color1[1] = 0.0f;
+ color1[2] = 0.0f;
+ color1[3] = 1.0f;
+
+ /* Orange */
+ color2[0] = 1.0000f;
+ color2[1] = 1.0f;
+ color2[2] = 0.0f;
+ color2[3] = 1.0f;
+ vgSetPaint(stroke, VG_STROKE_PATH);
+
+ vgSeti(VG_STROKE_CAP_STYLE, VG_CAP_SQUARE);
+
+ {
+ VGfloat temp[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
+ for (i = 0; i < 9; i++)
+ {
+ xform[i] = temp[i];
+ }
+ }
+ vgGetMatrix(xform);
+
+ target = vgCreatePath(VG_PATH_FORMAT_STANDARD,
+ VG_PATH_DATATYPE_F, 1, 0, 0, 0, VG_PATH_CAPABILITY_TRANSFORM_TO);
+
+#if 0
+ /* Line path */
+ {
+ VGubyte temp[6] = {VG_MOVE_TO_ABS, VG_VLINE_TO_REL,
+ VG_MOVE_TO_ABS, VG_VLINE_TO_REL,
+ VG_HLINE_TO_REL, VG_VLINE_TO_REL};
+ for (i = 0; i < 6; i++)
+ {
+ lineCmds[i] = temp[i];
+ }
+ }
+ {
+ VGfloat temp[8] = {0.5f, 0.8f, -0.6f, 0.28f, 0.6f, -0.4f, 0.44f, 0.4f};
+ for (i = 0; i < 8; i++)
+ {
+ lineCoords[i] = temp[i] * window_width();
+ }
+ }
+#else
+ {
+ VGfloat temp[5] = {0.35f, 0.15f, 29, 0.3f, 0.4f};
+ for (i = 0; i < 5; i++)
+ {
+ arcCoords[i] = temp[i] * window_width();
+ }
+ arcCoords[2] = 29;
+ }
+
+ {
+ VGubyte temp[1] = {VG_SCCWARC_TO_ABS};
+ for (i = 0; i < 1; i++)
+ {
+ sccCmd[i] = temp[i];
+ }
+ }
+ {
+ VGubyte temp[1] = {VG_SCWARC_TO_ABS};
+ for (i = 0; i < 1; i++)
+ {
+ scCmd[i] = temp[i];
+ }
+ }
+ {
+ VGubyte temp[1] = {VG_LCCWARC_TO_ABS};
+ for (i = 0; i < 1; i++)
+ {
+ lccCmd[i] = temp[i];
+ }
+ }
+ {
+ VGubyte temp[1] = {VG_LCWARC_TO_ABS};
+ for (i = 0; i < 1; i++)
+ {
+ lcCmd[i] = temp[i];
+ }
+ }
+
+ {
+ VGubyte temp[1] = {VG_MOVE_TO_ABS};
+ for (i = 0; i < 1; i++)
+ {
+ moveCmd[i] = temp[i];
+ }
+ }
+ {
+ VGfloat temp[2] = {0.7f, 0.6f};
+ for (i = 0; i < 2; i++)
+ {
+ moveCoords[i] = temp[i] * window_width();
+ }
+ }
+#endif
+
+ lines = vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, 1,
+ 0, 0, 0,
+ VG_PATH_CAPABILITY_APPEND_TO|
+ VG_PATH_CAPABILITY_TRANSFORM_FROM);
+#if 0
+ vgAppendPathData(lines, 6, lineCmds, lineCoords);
+#else
+ vgAppendPathData(lines, 1, moveCmd, moveCoords);
+ vgAppendPathData(lines, 1, sccCmd, arcCoords);
+ vgAppendPathData(lines, 1, moveCmd, moveCoords);
+ vgAppendPathData(lines, 1, scCmd, arcCoords);
+ vgAppendPathData(lines, 1, moveCmd, moveCoords);
+ vgAppendPathData(lines, 1, lccCmd, arcCoords);
+ vgAppendPathData(lines, 1, moveCmd, moveCoords);
+ vgAppendPathData(lines, 1, lcCmd, arcCoords);
+#endif
+
+ vgLoadIdentity();
+ vgTranslate(0.25f * window_width(), 0.25f * window_height());
+ vgRotate(30);
+ vgTranslate(-0.25f * window_width(), -0.25f * window_height());
+ vgTransformPath(target, lines);}
+
+/* new window size or exposure */
+static void
+reshape(int w, int h)
+{
+}
+
+static void
+draw(void)
+{
+ vgClear(0, 0, window_width(), window_height());
+ vgLoadMatrix(xform);
+ vgLoadIdentity();
+ vgTranslate(0.25f * window_width(), 0.25f * window_height());
+ vgRotate(30);
+ vgTranslate(-0.25f * window_width(), -0.25f * window_height());
+ vgSetf(VG_STROKE_LINE_WIDTH, 7);
+ vgSetParameterfv(stroke, VG_PAINT_COLOR, 4, color1);
+ vgDrawPath(lines, VG_STROKE_PATH);
+
+ vgLoadMatrix(xform);
+ vgSetParameterfv(stroke, VG_PAINT_COLOR, 4, color2);
+ vgSetf(VG_STROKE_LINE_WIDTH, 3);
+ vgDrawPath(target, VG_STROKE_PATH);
+}
+
+static int key_press(unsigned key)
+{
+ switch(key) {
+ case XK_c:
+ case XK_C:
+ break;
+ case XK_j:
+ case XK_J:
+ break;
+ default:
+ break;
+ }
+
+ return VG_TRUE;
+}
+
+int main(int argc, char **argv)
+{
+ return run(argc, argv, init, reshape,
+ draw, key_press);
+}