#include "microgl.h"
#include <new>
path_t* path_new() { return new path_t(); } void path_del(path_t *path) { delete path; }
void path_close(path_t *path) { path->closePath(); }
void path_clear(path_t *path) { path->clear(); }
void path_moveto (path_t *path, const vertex *end) { path->moveTo(*end); }
void path_lineto (path_t *path, const vertex *end) { path->lineTo(*end); }
void path_quadto (path_t *path, const vertex *cp0, const vertex *end) {
path->quadraticCurveTo(*cp0, *end);
}
void path_cubicto(path_t *path, const vertex *cp1, const vertex *cp2, const vertex *end) {
path->cubicBezierCurveTo(*cp1, *cp2, *end);
}
void path_ellipse(path_t *path, const vertex *center, const vertex *radius,
const number rotation, const vertex* angle, bool acw) {
path->ellipse(*center, radius->x, radius->y, rotation, angle->x, angle->y, acw);
}
void canvas_del(canvas_t *cvs) { delete cvs; }
canvas_t* canvas_new(unsigned width, unsigned height) { return new canvas_t(width, height); }
void canvas_clear(canvas_t *cvs, const color_t *color) { cvs->clear(*color); }
using namespace sampling;
#include <initializer_list>
void canvas_fill(canvas_t *cvs, path_t *path, const stencil *sten) {
cvs->drawPathFill <stencil::BlendMode, stencil::PorterDuff, stencil::antialias>(
flat_color<> {{255,0,255,255}}, sten->transform, *path, sten->rule, sten->quality, sten->opacity);
}
void canvas_stroke(canvas_t *cvs, path_t *path, const stencil *sten, const stroker *pen) {
cvs->drawPathStroke<stencil::BlendMode, stencil::PorterDuff, stencil::antialias>(
flat_color<> {{255,0,255,255}},
sten->transform, *path, pen->width, pen->cap, pen->join, pen->miter_limit,
std::initializer_list<int>{ 50, 50 },
pen->dash_offset, sten->opacity);
}