1#include "eglcommon.h"
2
3#include <VG/openvg.h>
4#include <X11/keysym.h>
5#include <stdio.h>
6
7const VGfloat white_color[4] = {1.0, 1.0, 1.0, 1.0};
8const VGfloat color[4] = {0.4, 0.1, 1.0, 1.0};
9
10VGPath path;
11VGPaint fill;
12
13VGint cap_style = VG_CAP_BUTT;
14VGint join_style = VG_JOIN_MITER;
15
16static void
17init(void)
18{
19#if 0
20   static const VGubyte cmds[] = {VG_MOVE_TO_ABS,
21                                  VG_CUBIC_TO_ABS,
22   };
23   static const VGfloat coords[]   = {30, 30, 264, 0, 0, 264, 234, 234
24   };
25#else
26   static const VGubyte cmds[] = {VG_MOVE_TO_ABS,
27                                  VG_LINE_TO_ABS,
28                                  VG_LINE_TO_ABS
29   };
30   static const VGfloat coords[]   = {30, 30, 202, 30, 150, 224
31   };
32#endif
33   VGfloat dash_pattern[2] = { 20.f, 20.f };
34   path = vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, 1, 0, 0, 0,
35                       VG_PATH_CAPABILITY_APPEND_TO);
36   vgAppendPathData(path, 3, cmds, coords);
37
38   fill = vgCreatePaint();
39   vgSetParameterfv(fill, VG_PAINT_COLOR, 4, color);
40   vgSetPaint(fill, VG_FILL_PATH);
41
42   vgSetfv(VG_CLEAR_COLOR, 4, white_color);
43   vgSetf(VG_STROKE_LINE_WIDTH, 20);
44   vgSeti(VG_STROKE_CAP_STYLE, cap_style);
45   vgSeti(VG_STROKE_JOIN_STYLE, join_style);
46   vgSetfv(VG_STROKE_DASH_PATTERN, 2, dash_pattern);
47   vgSetf(VG_STROKE_DASH_PHASE, 0.0f);
48}
49
50/* new window size or exposure */
51static void
52reshape(int w, int h)
53{
54   vgLoadIdentity();
55}
56
57static void
58draw(void)
59{
60   vgClear(0, 0, window_width(), window_height());
61   vgDrawPath(path, VG_STROKE_PATH);
62
63   vgFlush();
64}
65
66static int  key_press(unsigned key)
67{
68    switch(key) {
69    case XK_c:
70    case XK_C:
71        ++cap_style;
72        if (cap_style > VG_CAP_SQUARE)
73            cap_style = VG_CAP_BUTT;
74        switch(cap_style) {
75        case VG_CAP_BUTT:
76            fprintf(stderr, "Cap style 'butt'\n");
77            break;
78        case VG_CAP_ROUND:
79            fprintf(stderr, "Cap style 'round'\n");
80            break;
81        case VG_CAP_SQUARE:
82            fprintf(stderr, "Cap style 'square'\n");
83            break;
84        }
85        vgSeti(VG_STROKE_CAP_STYLE, cap_style);
86        break;
87    case XK_j:
88    case XK_J:
89        ++join_style;
90        if (join_style > VG_JOIN_BEVEL)
91            join_style = VG_JOIN_MITER;
92        switch(join_style) {
93        case VG_JOIN_MITER:
94            fprintf(stderr, "Join style 'miter'\n");
95            break;
96        case VG_JOIN_ROUND:
97            fprintf(stderr, "Join style 'round'\n");
98            break;
99        case VG_JOIN_BEVEL:
100            fprintf(stderr, "Join style 'bevel'\n");
101            break;
102        }
103        vgSeti(VG_STROKE_JOIN_STYLE, join_style);
104        break;
105    default:
106        break;
107    }
108
109    return VG_TRUE;
110}
111
112int main(int argc, char **argv)
113{
114   return run(argc, argv, init, reshape,
115              draw, key_press);
116}
117