]> O.S.I.I.S - jp/vkvg.git/commitdiff
save matrix, line join and cap config, not yet applied on stroke
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Wed, 18 Apr 2018 15:19:28 +0000 (17:19 +0200)
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Wed, 18 Apr 2018 15:19:28 +0000 (17:19 +0200)
include/vkvg.h
src/vkvg_context.c
src/vkvg_context_internal.h

index 7781f78c0ec9831744871f201da23d50f0b7722d..449bce8acdb28fa301ac67056cc79960bc694a60 100644 (file)
@@ -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);
 
index 0b9b729a56e3de23d5a9387e33b1e45e1b7c119e..19dcf92b1b042ee5a328fd8a20809cfb22c6b869 100644 (file)
@@ -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);
index d711024f9092a497eceb9cfda95a8bf4e74db378..8a710352f816bc2111b0c865855a9b2b5f01e0fc 100644 (file)
@@ -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;