nanovg/src/nanovg.h

195 lines
7.0 KiB
C

//
// Copyright (c) 2013 Mikko Mononen memon@inside.org
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
// 1. The origin of this software must not be misrepresented; you must not
// claim that you wrote the original software. If you use this software
// in a product, an acknowledgment in the product documentation would be
// appreciated but is not required.
// 2. Altered source versions must be plainly marked as such, and must not be
// misrepresented as being the original software.
// 3. This notice may not be removed or altered from any source distribution.
//
#ifndef NANOVG_H
#define NANOVG_H
#define NVG_PI 3.14159265358979323846264338327f
enum NVGdir {
NVG_CCW = 1,
NVG_CW = 2,
};
enum NVGdir2 {
NVG_SOLID = 1, // ccw
NVG_HOLE = 2, // cw
};
enum NVGpatternRepeat {
NVG_REPEATX = 0x01,
NVG_REPEATY = 0x02,
};
enum NVGaling {
// Horizontal align
NVG_ALIGN_LEFT = 1<<0, // Default
NVG_ALIGN_CENTER = 1<<1,
NVG_ALIGN_RIGHT = 1<<2,
// Vertical align
NVG_ALIGN_TOP = 1<<3,
NVG_ALIGN_MIDDLE = 1<<4,
NVG_ALIGN_BOTTOM = 1<<5,
NVG_ALIGN_BASELINE = 1<<6, // Default
};
// Used by the rendering API
enum NVGtexture {
NVG_TEXTURE_ALPHA = 0x01,
NVG_TEXTURE_RGBA = 0x02,
};
struct NVGpaint
{
float xform[6];
float extent[2];
float radius;
float feather;
unsigned int innerColor;
unsigned int outerColor;
int image;
int repeat;
};
struct NVGscissor
{
float xform[6];
float extent[2];
};
struct NVGvertex {
float x,y,u,v;
};
struct NVGpath {
int first;
int count;
unsigned char closed;
int nbevel;
struct NVGvertex* fill;
int nfill;
struct NVGvertex* stroke;
int nstroke;
int winding;
};
struct NVGparams {
void* userPtr;
int (*renderCreate)(void* uptr);
int (*renderCreateTexture)(void* uptr, int type, int w, int h, const unsigned char* data);
int (*renderDeleteTexture)(void* uptr, int image);
int (*renderUpdateTexture)(void* uptr, int image, int x, int y, int w, int h, const unsigned char* data);
int (*renderGetTextureSize)(void* uptr, int image, int* w, int* h);
void (*renderFill)(void* uptr, struct NVGpaint* paint, struct NVGscissor* scissor, float aasize, const float* bounds, const struct NVGpath* paths, int npaths);
void (*renderStroke)(void* uptr, struct NVGpaint* paint, struct NVGscissor* scissor, float aasize, float strokeWidth, const struct NVGpath* paths, int npaths);
void (*renderTriangles)(void* uptr, struct NVGpaint* paint, struct NVGscissor* scissor, int image, const struct NVGvertex* verts, int nverts);
void (*renderDelete)(void* uptr);
};
// Contructor and destructor.
struct NVGcontext* nvgCreateInternal(struct NVGparams* params);
void nvgDeleteInternal(struct NVGcontext* ctx);
// Color utils
unsigned int nvgRGB(unsigned char r, unsigned char g, unsigned char b);
unsigned int nvgRGBA(unsigned char r, unsigned char g, unsigned char b, unsigned char a);
unsigned int nvgLerpRGBA(unsigned int c0, unsigned int c1, float u);
// State handling
void nvgSave(struct NVGcontext* ctx);
void nvgRestore(struct NVGcontext* ctx);
void nvgReset(struct NVGcontext* ctx);
// State setting
void nvgStrokeColor(struct NVGcontext* ctx, unsigned int color);
void nvgStrokePaint(struct NVGcontext* ctx, struct NVGpaint paint);
void nvgFillColor(struct NVGcontext* ctx, unsigned int color);
void nvgFillPaint(struct NVGcontext* ctx, struct NVGpaint paint);
void nvgMiterLimit(struct NVGcontext* ctx, float limit);
void nvgStrokeWidth(struct NVGcontext* ctx, float size);
void nvgResetTransform(struct NVGcontext* ctx);
void nvgTransform(struct NVGcontext* ctx, float a, float b, float c, float d, float e, float f);
void nvgTranslate(struct NVGcontext* ctx, float x, float y);
void nvgRotate(struct NVGcontext* ctx, float angle);
void nvgScale(struct NVGcontext* ctx, float x, float y);
// Images
int nvgCreateImage(struct NVGcontext* ctx, const char* filename);
int nvgCreateImageMem(struct NVGcontext* ctx, unsigned char* data, int ndata, int freeData);
int nvgCreateImageRGBA(struct NVGcontext* ctx, int w, int h, const unsigned char* data);
void nvgUpdateImage(struct NVGcontext* ctx, int image, const unsigned char* data);
void nvgImageSize(struct NVGcontext* ctx, int image, int* w, int* h);
void nvgDeleteImage(struct NVGcontext* ctx, int image);
// Paints
struct NVGpaint nvgLinearGradient(struct NVGcontext* ctx, float sx, float sy, float ex, float ey, unsigned int icol, unsigned int ocol);
struct NVGpaint nvgBoxGradient(struct NVGcontext* ctx, float x, float y, float w, float h, float r, float f, unsigned int icol, unsigned int ocol);
struct NVGpaint nvgRadialGradient(struct NVGcontext* ctx, float cx, float cy, float inr, float outr, unsigned int icol, unsigned int ocol);
struct NVGpaint nvgImagePattern(struct NVGcontext* ctx, float ox, float oy, float ex, float ey, float angle, int image, int repeat);
// Scissoring
void nvgScissor(struct NVGcontext* ctx, float x, float y, float w, float h);
void nvgResetScissor(struct NVGcontext* ctx);
// Draw
void nvgBeginFrame(struct NVGcontext* ctx);
void nvgBeginPath(struct NVGcontext* ctx);
void nvgMoveTo(struct NVGcontext* ctx, float x, float y);
void nvgLineTo(struct NVGcontext* ctx, float x, float y);
void nvgBezierTo(struct NVGcontext* ctx, float c1x, float c1y, float c2x, float c2y, float x, float y);
void nvgArcTo(struct NVGcontext* ctx, float x1, float y1, float x2, float y2, float radius);
void nvgClosePath(struct NVGcontext* ctx);
void nvgPathWinding(struct NVGcontext* ctx, int dir);
void nvgArc(struct NVGcontext* ctx, float cx, float cy, float r, float a0, float a1, int dir);
void nvgRect(struct NVGcontext* ctx, float x, float y, float w, float h);
void nvgRoundedRect(struct NVGcontext* ctx, float x, float y, float w, float h, float r);
void nvgEllipse(struct NVGcontext* ctx, float cx, float cy, float rx, float ry);
void nvgCircle(struct NVGcontext* ctx, float cx, float cy, float r);
void nvgFill(struct NVGcontext* ctx);
void nvgStroke(struct NVGcontext* ctx);
// Text
// Add fonts
int nvgCreateFont(struct NVGcontext* ctx, const char* name, const char* path);
int nvgCreateFontMem(struct NVGcontext* ctx, const char* name, unsigned char* data, int ndata, int freeData);
// State setting
void nvgFontSize(struct NVGcontext* ctx, float size);
void nvgLetterSpacing(struct NVGcontext* ctx, float spacing);
void nvgFontBlur(struct NVGcontext* ctx, float blur);
void nvgTextAlign(struct NVGcontext* ctx, int align);
void nvgFontFaceId(struct NVGcontext* ctx, int font);
void nvgFontFace(struct NVGcontext* ctx, const char* font);
// Draw text
void nvgText(struct NVGcontext* ctx, float x, float y, const char* string);
// Measure text
void nvgTextBounds(struct NVGcontext* ctx, const char* string, float* width, float* bounds);
void nvgVertMetrics(struct NVGcontext* ctx, float* ascender, float* descender, float* lineh);
#endif // NANOVG_H