mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-13 19:44:28 +00:00
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.
This commit is contained in:
parent
5cad097485
commit
eddd253c55
2 changed files with 6 additions and 79 deletions
|
@ -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
|
||||
|
|
|
@ -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<CompositeMethod>(*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);
|
||||
|
|
Loading…
Add table
Reference in a new issue