#include "microgl/canvas.h"
#include "microgl/bitmaps/bitmap.h"
#include "microgl/pixel_coders/RGB565_PACKED_16.h"
#include "microgl/pixel_coders/RGB888_PACKED_32.h"
#include "microgl/pixel_coders/RGBA8888_PACKED_32.h"
#include "microgl/samplers/flat_color.h"
#include "microgl/samplers/fast_radial_gradient.h"
#include "microgl/samplers/angular_linear_gradient.h"
using namespace microtess;
using number = float;
using path_t = path<number>;
using canvas_t = canvas<bitmap<RGBA8888_PACKED_32>>;
using vertex = vec2<number>;
struct stencil {
static const bool antialias = true;
using BlendMode = blendmode::Normal;
using PorterDuff = porterduff::FastSourceOverOnOpaque;
matrix_3x3<number> transform;
tess_quality quality; fill_rule rule; unsigned char opacity;
};
struct stroker {
number width;
stroke_cap cap; stroke_line_join join; unsigned miter_limit; int dash_offset; };
extern "C" {
path_t* path_new();
void path_del(path_t* path);
void path_close(path_t* path);
void path_clear(path_t* path);
void path_moveto (path_t* path, const vertex* end);
void path_lineto (path_t* path, const vertex* end);
void path_quadto (path_t* path, const vertex* cp0, const vertex* end);
void path_cubicto(path_t* path, const vertex* cp1, const vertex* cp2, const vertex* end);
void path_ellipse(path_t* path, const vertex* center, const vertex* radius,
const number rotation, const vertex* angle, bool acw);
canvas_t* canvas_new(unsigned width, unsigned height);
void canvas_clear(canvas_t* cvs, const color_t* color);
void canvas_fill (canvas_t* cvs, path_t* path, const stencil* sten);
void canvas_stroke(canvas_t* cvs, path_t* path, const stencil* sten, const stroker* pen);
void canvas_del(canvas_t* cvs);
}