From eddd253c55b728651e0ac2eac6b17494f037b494 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Mon, 6 Sep 2021 15:35:11 +0900 Subject: [PATCH] tvg_loader: code refactoring & optimization loading. (#772) Skip the reassigning values by the flags, We assume those property values are reserved, leave to apis that handle the invalids if the exceptions. --- src/lib/tvgBinaryDesc.h | 19 +------ src/loaders/tvg/tvgTvgBinInterpreter.cpp | 66 ++---------------------- 2 files changed, 6 insertions(+), 79 deletions(-) diff --git a/src/lib/tvgBinaryDesc.h b/src/lib/tvgBinaryDesc.h index a06727d2..8760ffc6 100644 --- a/src/lib/tvgBinaryDesc.h +++ b/src/lib/tvgBinaryDesc.h @@ -59,11 +59,7 @@ using TvgBinFlag = TvgBinByte; #define TVG_TAG_PAINT_OPACITY (TvgBinTag)0x10 #define TVG_TAG_PAINT_TRANSFORM (TvgBinTag)0x11 #define TVG_TAG_PAINT_CMP_TARGET (TvgBinTag)0x01 -//Composition #define TVG_TAG_PAINT_CMP_METHOD (TvgBinTag)0x20 -#define TVG_FLAG_PAINT_CMP_METHOD_CLIPPATH (TvgBinFlag)0x01 -#define TVG_FLAG_PAINT_CMP_METHOD_ALPHAMASK (TvgBinFlag)0x02 -#define TVG_FLAG_PAINT_CMP_METHOD_IALPHAMASK (TvgBinFlag)0x03 //Scene @@ -75,20 +71,10 @@ using TvgBinFlag = TvgBinByte; #define TVG_TAG_SHAPE_STROKE (TvgBinTag)0x41 #define TVG_TAG_SHAPE_FILL (TvgBinTag)0x42 #define TVG_TAG_SHAPE_COLOR (TvgBinTag)0x43 -//Fill Rule #define TVG_TAG_SHAPE_FILLRULE (TvgBinTag)0x44 -#define TVG_FLAG_SHAPE_FILLRULE_WINDING (TvgBinFlag)0x00 -#define TVG_FLAG_SHAPE_FILLRULE_EVENODD (TvgBinFlag)0x01 -//Stroke Cap #define TVG_TAG_SHAPE_STROKE_CAP (TvgBinTag)0x50 -#define TVG_FLAG_SHAPE_STROKE_CAP_SQUARE (TvgBinFlag)0x00 -#define TVG_FLAG_SHAPE_STROKE_CAP_ROUND (TvgBinFlag)0x01 -#define TVG_FLAG_SHAPE_STROKE_CAP_BUTT (TvgBinFlag)0x02 -//Stroke Join #define TVG_TAG_SHAPE_STROKE_JOIN (TvgBinTag)0x51 -#define TVG_FLAG_SHAPE_STROKE_JOIN_BEVEL (TvgBinFlag)0x00 -#define TVG_FLAG_SHAPE_STROKE_JOIN_ROUND (TvgBinFlag)0x01 -#define TVG_FLAG_SHAPE_STROKE_JOIN_MITER (TvgBinFlag)0x02 + //Stroke #define TVG_TAG_SHAPE_STROKE_WIDTH (TvgBinTag)0x52 #define TVG_TAG_SHAPE_STROKE_COLOR (TvgBinTag)0x53 @@ -101,9 +87,6 @@ using TvgBinFlag = TvgBinByte; #define TVG_TAG_FILL_RADIAL_GRADIENT (TvgBinTag)0x61 #define TVG_TAG_FILL_COLORSTOPS (TvgBinTag)0x62 #define TVG_TAG_FILL_FILLSPREAD (TvgBinTag)0x63 -#define TVG_FLAG_FILL_FILLSPREAD_PAD (TvgBinFlag)0x00 -#define TVG_FLAG_FILL_FILLSPREAD_REFLECT (TvgBinFlag)0x01 -#define TVG_FLAG_FILL_FILLSPREAD_REPEAT (TvgBinFlag)0x02 //Picture diff --git a/src/loaders/tvg/tvgTvgBinInterpreter.cpp b/src/loaders/tvg/tvgTvgBinInterpreter.cpp index b6180c95..1950eb2d 100644 --- a/src/loaders/tvg/tvgTvgBinInterpreter.cpp +++ b/src/loaders/tvg/tvgTvgBinInterpreter.cpp @@ -68,23 +68,7 @@ static bool _parseCmpTarget(const char *ptr, const char *end, Paint *paint) if (block.type != TVG_TAG_PAINT_CMP_METHOD) return false; if (block.length != SIZE(TvgBinFlag)) return false; - CompositeMethod cmpMethod; - - switch (*block.data) { - case TVG_FLAG_PAINT_CMP_METHOD_CLIPPATH: { - cmpMethod = CompositeMethod::ClipPath; - break; - } - case TVG_FLAG_PAINT_CMP_METHOD_ALPHAMASK: { - cmpMethod = CompositeMethod::AlphaMask; - break; - } - case TVG_FLAG_PAINT_CMP_METHOD_IALPHAMASK: { - cmpMethod = CompositeMethod::InvAlphaMask; - break; - } - default: return false; - } + auto cmpMethod = static_cast(*block.data); ptr = block.end; @@ -224,20 +208,7 @@ static bool _parseShapeFill(const char *ptr, const char *end, Fill **fillOutside case TVG_TAG_FILL_FILLSPREAD: { if (!fillGrad) return false; if (block.length != SIZE(TvgBinFlag)) return false; - switch (*block.data) { - case TVG_FLAG_FILL_FILLSPREAD_PAD: { - fillGrad->spread(FillSpread::Pad); - break; - } - case TVG_FLAG_FILL_FILLSPREAD_REFLECT: { - fillGrad->spread(FillSpread::Reflect); - break; - } - case TVG_FLAG_FILL_FILLSPREAD_REPEAT: { - fillGrad->spread(FillSpread::Repeat); - break; - } - } + fillGrad->spread((FillSpread) *block.data); break; } case TVG_TAG_FILL_COLORSTOPS: { @@ -289,32 +260,12 @@ static bool _parseShapeStroke(const char *ptr, const char *end, Shape *shape) switch (block.type) { case TVG_TAG_SHAPE_STROKE_CAP: { if (block.length != SIZE(TvgBinFlag)) return false; - switch (*block.data) { - case TVG_FLAG_SHAPE_STROKE_CAP_SQUARE: - shape->stroke(StrokeCap::Square); - break; - case TVG_FLAG_SHAPE_STROKE_CAP_ROUND: - shape->stroke(StrokeCap::Round); - break; - case TVG_FLAG_SHAPE_STROKE_CAP_BUTT: - shape->stroke(StrokeCap::Butt); - break; - } + shape->stroke((StrokeCap) *block.data); break; } case TVG_TAG_SHAPE_STROKE_JOIN: { if (block.length != SIZE(TvgBinFlag)) return false; - switch (*block.data) { - case TVG_FLAG_SHAPE_STROKE_JOIN_BEVEL: - shape->stroke(StrokeJoin::Bevel); - break; - case TVG_FLAG_SHAPE_STROKE_JOIN_ROUND: - shape->stroke(StrokeJoin::Round); - break; - case TVG_FLAG_SHAPE_STROKE_JOIN_MITER: - shape->stroke(StrokeJoin::Miter); - break; - } + shape->stroke((StrokeJoin) *block.data); break; } case TVG_TAG_SHAPE_STROKE_WIDTH: { @@ -372,14 +323,7 @@ static bool _parseShape(TvgBinBlock block, Paint* paint) } case TVG_TAG_SHAPE_FILLRULE: { if (block.length != SIZE(TvgBinFlag)) return false; - switch (*block.data) { - case TVG_FLAG_SHAPE_FILLRULE_WINDING: - shape->fill(FillRule::Winding); - break; - case TVG_FLAG_SHAPE_FILLRULE_EVENODD: - shape->fill(FillRule::EvenOdd); - break; - } + shape->fill((FillRule)*block.data); break; } default: return _parsePaintProperty(block, shape);