diff --git a/src/loaders/tvg/tvgTvgBinInterpreter.cpp b/src/loaders/tvg/tvgTvgBinInterpreter.cpp index e246af60..eb3f0136 100644 --- a/src/loaders/tvg/tvgTvgBinInterpreter.cpp +++ b/src/loaders/tvg/tvgTvgBinInterpreter.cpp @@ -322,6 +322,13 @@ static bool _parseShapeStroke(const char *ptr, const char *end, Shape *shape) shape->strokeMiterlimit(miterlimit); break; } + case TVG_TAG_SHAPE_STROKE_DASH_OFFSET: { + if (block.length != SIZE(float)) return false; + float offset; + READ_FLOAT(&offset, block.data); + P(shape)->rs.stroke->dashOffset = offset; + break; + } default: { TVGLOG("TVG", "Unsupported tag %d (0x%x) used as one of stroke properties, %d bytes skipped", block.type, block.type, block.length); break; diff --git a/src/renderer/tvgBinaryDesc.h b/src/renderer/tvgBinaryDesc.h index 3b9dbe89..42969cbc 100644 --- a/src/renderer/tvgBinaryDesc.h +++ b/src/renderer/tvgBinaryDesc.h @@ -82,6 +82,7 @@ using TvgBinFlag = TvgBinByte; #define TVG_TAG_SHAPE_STROKE_DASHPTRN (TvgBinTag)0x55 #define TVG_TAG_SHAPE_STROKE_MITERLIMIT (TvgBinTag)0x56 #define TVG_TAG_SHAPE_STROKE_ORDER (TvgBinTag)0x57 +#define TVG_TAG_SHAPE_STROKE_DASH_OFFSET (TvgBinTag)0x58 //Fill diff --git a/src/savers/tvg/tvgTvgSaver.cpp b/src/savers/tvg/tvgTvgSaver.cpp index fa80f611..da1dc4ad 100644 --- a/src/savers/tvg/tvgTvgSaver.cpp +++ b/src/savers/tvg/tvgTvgSaver.cpp @@ -469,7 +469,8 @@ TvgBinCounter TvgSaver::serializeStroke(const Shape* shape, const Matrix* pTrans //dash const float* dashPattern = nullptr; - auto dashCnt = shape->strokeDash(&dashPattern); + float offset = 0.0f; + auto dashCnt = P(shape)->rs.strokeDash(&dashPattern, &offset); if (dashPattern && dashCnt > 0) { TvgBinCounter dashCntSize = SIZE(dashCnt); TvgBinCounter dashPtrnSize = dashCnt * SIZE(dashPattern[0]); @@ -487,6 +488,11 @@ TvgBinCounter TvgSaver::serializeStroke(const Shape* shape, const Matrix* pTrans cnt += writeTagProperty(TVG_TAG_SHAPE_STROKE_MITERLIMIT, SIZE(miterlimit), &miterlimit); } + //dash offset + if (!mathZero(offset)) { + cnt += writeTagProperty(TVG_TAG_SHAPE_STROKE_DASH_OFFSET, SIZE(offset), &offset); + } + writeReservedCount(cnt); return SERIAL_DONE(cnt);