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:
Hermet Park 2021-09-06 15:35:11 +09:00 committed by GitHub
parent 5cad097485
commit eddd253c55
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 79 deletions

View file

@ -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

View file

@ -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);