132001f49Smrg#include "eglcommon.h"
232001f49Smrg
332001f49Smrg#include <VG/openvg.h>
432001f49Smrg#include <X11/keysym.h>
532001f49Smrg#include <stdio.h>
632001f49Smrg
732001f49Smrgconst VGfloat white_color[4] = {1.0, 1.0, 1.0, 1.0};
832001f49Smrgconst VGfloat color[4] = {0.4, 0.1, 1.0, 1.0};
932001f49Smrg
1032001f49SmrgVGPath path;
1132001f49SmrgVGPaint fill;
1232001f49Smrg
1332001f49SmrgVGint cap_style = VG_CAP_BUTT;
1432001f49Smrg
1532001f49Smrgstatic void
1632001f49Smrginit(void)
1732001f49Smrg{
1832001f49Smrg   static const VGubyte cmds[] = {VG_MOVE_TO_ABS,
1932001f49Smrg                                  VG_LINE_TO_ABS,
2032001f49Smrg                                  VG_LINE_TO_ABS
2132001f49Smrg   };
2232001f49Smrg#if 1
2332001f49Smrg   static const VGfloat coords[]   = {100, 100, 150, 100,
2432001f49Smrg                                      150, 200
2532001f49Smrg   };
2632001f49Smrg#else
2732001f49Smrg   static const VGfloat coords[]   = {100, 20, 100, 220,
2832001f49Smrg   };
2932001f49Smrg#endif
3032001f49Smrg   VGfloat dash_pattern[2] = { 20.f, 20.f };
3132001f49Smrg   path = vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, 1, 0, 0, 0,
3232001f49Smrg                       VG_PATH_CAPABILITY_APPEND_TO);
3332001f49Smrg   vgAppendPathData(path, 3, cmds, coords);
3432001f49Smrg
3532001f49Smrg   fill = vgCreatePaint();
3632001f49Smrg   vgSetParameterfv(fill, VG_PAINT_COLOR, 4, color);
3732001f49Smrg   vgSetPaint(fill, VG_FILL_PATH);
3832001f49Smrg
3932001f49Smrg   vgSetfv(VG_CLEAR_COLOR, 4, white_color);
4032001f49Smrg   vgSetf(VG_STROKE_LINE_WIDTH, 20);
4132001f49Smrg   vgSeti(VG_STROKE_CAP_STYLE, cap_style);
4232001f49Smrg   vgSeti(VG_STROKE_JOIN_STYLE, VG_JOIN_ROUND);
4332001f49Smrg   vgSetfv(VG_STROKE_DASH_PATTERN, 2, dash_pattern);
4432001f49Smrg   vgSetf(VG_STROKE_DASH_PHASE, 0.0f);
4532001f49Smrg}
4632001f49Smrg
4732001f49Smrg/* new window size or exposure */
4832001f49Smrgstatic void
4932001f49Smrgreshape(int w, int h)
5032001f49Smrg{
5132001f49Smrg   vgLoadIdentity();
5232001f49Smrg}
5332001f49Smrg
5432001f49Smrgstatic void
5532001f49Smrgdraw(void)
5632001f49Smrg{
5732001f49Smrg   vgClear(0, 0, window_width(), window_height());
5832001f49Smrg   vgDrawPath(path, VG_STROKE_PATH);
5932001f49Smrg
6032001f49Smrg   vgFlush();
6132001f49Smrg}
6232001f49Smrg
6332001f49Smrgstatic int  key_press(unsigned key)
6432001f49Smrg{
6532001f49Smrg    switch(key) {
6632001f49Smrg    case XK_c:
6732001f49Smrg    case XK_C:
6832001f49Smrg        ++cap_style;
6932001f49Smrg        if (cap_style > VG_CAP_SQUARE)
7032001f49Smrg            cap_style = VG_CAP_BUTT;
7132001f49Smrg        switch(cap_style) {
7232001f49Smrg        case VG_CAP_BUTT:
7332001f49Smrg            fprintf(stderr, "Cap style 'butt'\n");
7432001f49Smrg            break;
7532001f49Smrg        case VG_CAP_ROUND:
7632001f49Smrg            fprintf(stderr, "Cap style 'round'\n");
7732001f49Smrg            break;
7832001f49Smrg        case VG_CAP_SQUARE:
7932001f49Smrg            fprintf(stderr, "Cap style 'square'\n");
8032001f49Smrg            break;
8132001f49Smrg        }
8232001f49Smrg        vgSeti(VG_STROKE_CAP_STYLE, cap_style);
8332001f49Smrg        break;
8432001f49Smrg    default:
8532001f49Smrg        break;
8632001f49Smrg    }
8732001f49Smrg
8832001f49Smrg    return VG_TRUE;
8932001f49Smrg}
9032001f49Smrg
9132001f49Smrgint main(int argc, char **argv)
9232001f49Smrg{
9332001f49Smrg   return run(argc, argv, init, reshape,
9432001f49Smrg              draw, key_press);
9532001f49Smrg}
96