From: Jean-Philippe Bruyère Date: Wed, 18 Apr 2018 15:19:28 +0000 (+0200) Subject: save matrix, line join and cap config, not yet applied on stroke X-Git-Tag: v0.1-alpha~146 X-Git-Url: https://git.osiis.dedyn.io/?a=commitdiff_plain;h=cf6fca9a4404475ced59e5c3c6f13b578dd868b9;p=jp%2Fvkvg.git save matrix, line join and cap config, not yet applied on stroke --- diff --git a/include/vkvg.h b/include/vkvg.h index 7781f78..449bce8 100644 --- a/include/vkvg.h +++ b/include/vkvg.h @@ -38,6 +38,18 @@ typedef enum _vkvg_pattern_type { VKVG_PATTERN_TYPE_RASTER_SOURCE, } vkvg_pattern_type_t; +typedef enum _vkvg_line_cap { + VKVG_LINE_CAP_BUTT, + VKVG_LINE_CAP_ROUND, + VKVG_LINE_CAP_SQUARE +} vkvg_line_cap_t; + +typedef enum _vkvg_line_join { + VKVG_LINE_JOIN_MITER, + VKVG_LINE_JOIN_ROUND, + VKVG_LINE_JOIN_BEVEL +} vkvg_line_join_t; + typedef struct _vkvg_color_t{ float r; float g; @@ -127,6 +139,8 @@ void vkvg_clip (VkvgContext ctx); void vkvg_clip_preserve (VkvgContext ctx); void vkvg_set_rgba (VkvgContext ctx, float r, float g, float b, float a); void vkvg_set_linewidth (VkvgContext ctx, float width); +void vkvg_set_line_cap (VkvgContext ctx, vkvg_line_cap_t cap); +void vkvg_set_line_join (VkvgContext ctx, vkvg_line_join_t join); void vkvg_set_source_surface(VkvgContext ctx, VkvgSurface surf, float x, float y); void vkvg_set_source (VkvgContext ctx, VkvgPattern pat); diff --git a/src/vkvg_context.c b/src/vkvg_context.c index 0b9b729..19dcf92 100644 --- a/src/vkvg_context.c +++ b/src/vkvg_context.c @@ -531,6 +531,13 @@ void vkvg_set_source (VkvgContext ctx, VkvgPattern pat){ void vkvg_set_linewidth (VkvgContext ctx, float width){ ctx->lineWidth = width; } +void vkvg_set_line_cap (VkvgContext ctx, vkvg_line_cap_t cap){ + ctx->lineCap = cap; +} +void vkvg_set_line_join (VkvgContext ctx, vkvg_line_join_t join){ + ctx->lineJoint = join; +} + void vkvg_select_font_face (VkvgContext ctx, const char* name){ @@ -597,6 +604,10 @@ void vkvg_save (VkvgContext ctx){ sav->curPos = ctx->curPos; sav->curRGBA = ctx->curRGBA; sav->lineWidth = ctx->lineWidth; + sav->lineCap = ctx->lineCap; + sav->lineWidth = ctx->lineWidth; + sav->mat = ctx->pushConsts.mat; + sav->matInv = ctx->pushConsts.matInv; sav->selectedFont = ctx->selectedFont; sav->selectedFont.fontFile = (char*)calloc(FONT_FILE_NAME_MAX_SIZE,sizeof(char)); @@ -659,6 +670,10 @@ void vkvg_restore (VkvgContext ctx){ ctx->curPos = sav->curPos; ctx->curRGBA = sav->curRGBA; ctx->lineWidth = sav->lineWidth; + ctx->lineCap = sav->lineCap; + ctx->lineJoint = sav->lineJoint; + ctx->pushConsts.mat = sav->mat; + ctx->pushConsts.matInv = sav->matInv; ctx->selectedFont.charSize = sav->selectedFont.charSize; strcpy (ctx->selectedFont.fontFile, sav->selectedFont.fontFile); diff --git a/src/vkvg_context_internal.h b/src/vkvg_context_internal.h index d711024..8a71035 100644 --- a/src/vkvg_context_internal.h +++ b/src/vkvg_context_internal.h @@ -55,6 +55,11 @@ typedef struct _vkvg_context_save_t{ vec4 curRGBA; float lineWidth; + vkvg_line_cap_t lineCap; + vkvg_line_join_t lineJoint; + vkvg_matrix_t mat; + vkvg_matrix_t matInv; + _vkvg_font_t selectedFont; //hold current face and size before cache addition _vkvg_font_t* currentFont; //font ready for lookup vkvg_direction_t textDirection; @@ -104,6 +109,9 @@ typedef struct _vkvg_context_t { vec4 curRGBA; float lineWidth; + vkvg_line_cap_t lineCap; + vkvg_line_join_t lineJoint; + _vkvg_font_t selectedFont; //hold current face and size before cache addition _vkvg_font_t* currentFont; //font ready for lookup vkvg_direction_t textDirection;