195 lines
7.0 KiB
C
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
|