Skip to content

Commit e0a2b5a

Browse files
authored
Added SolidColorStroke merge optimization (#458)
1 parent d63112c commit e0a2b5a

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

source/LottieData/Optimization/Experimental/MergeHelper.cs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,50 @@ MergeResult<SolidColorFill> MergeSolidColorFills(SolidColorFill a, TimeRange aRa
455455
return new MergeResult<SolidColorFill>(new SolidColorFill(args, a.FillType, opacity.Value!, color.Value!));
456456
}
457457

458+
MergeResult<SolidColorStroke> MergeSolidColorStrokes(SolidColorStroke a, TimeRange aRange, SolidColorStroke b, TimeRange bRange)
459+
{
460+
if (a.BlendMode != b.BlendMode ||
461+
a.CapType != b.CapType ||
462+
a.JoinType != b.JoinType ||
463+
!a.DashPattern.SequenceEqual(b.DashPattern) ||
464+
a.MiterLimit != b.MiterLimit)
465+
{
466+
return MergeResult<SolidColorStroke>.Failed;
467+
}
468+
469+
var name = $"{a.Name} {b.Name}";
470+
471+
var matchName = $"{a.MatchName} {b.MatchName}";
472+
473+
var args = new ShapeLayerContentArgs
474+
{
475+
Name = name,
476+
MatchName = matchName,
477+
BlendMode = a.BlendMode,
478+
};
479+
480+
var opacity = MergeAnimatable(a.Opacity, aRange, b.Opacity, bRange);
481+
var color = MergeAnimatable(a.Color, aRange, b.Color, bRange);
482+
var strokeWidth = MergeAnimatable(a.StrokeWidth, aRange, b.StrokeWidth, bRange);
483+
var dashOffset = MergeAnimatable(a.DashOffset, aRange, b.DashOffset, bRange);
484+
485+
if (!opacity.Success || !color.Success || !strokeWidth.Success || !dashOffset.Success)
486+
{
487+
return MergeResult<SolidColorStroke>.Failed;
488+
}
489+
490+
return new MergeResult<SolidColorStroke>(new SolidColorStroke(
491+
args,
492+
dashOffset.Value!,
493+
a.DashPattern,
494+
color.Value!,
495+
opacity.Value!,
496+
strokeWidth.Value!,
497+
a.CapType,
498+
a.JoinType,
499+
a.MiterLimit));
500+
}
501+
458502
MergeResult<ShapeLayerContent> MergeShapeLayerContents(ShapeLayerContent a, TimeRange aRange, ShapeLayerContent b, TimeRange bRange)
459503
{
460504
if (a.ContentType != b.ContentType)
@@ -476,6 +520,8 @@ MergeResult<ShapeLayerContent> MergeShapeLayerContents(ShapeLayerContent a, Time
476520
return MergeResult<ShapeLayerContent>.From(MergeTransform((Transform)a, aRange, (Transform)b, bRange));
477521
case ShapeContentType.SolidColorFill:
478522
return MergeResult<ShapeLayerContent>.From(MergeSolidColorFills((SolidColorFill)a, aRange, (SolidColorFill)b, bRange));
523+
case ShapeContentType.SolidColorStroke:
524+
return MergeResult<ShapeLayerContent>.From(MergeSolidColorStrokes((SolidColorStroke)a, aRange, (SolidColorStroke)b, bRange));
479525
}
480526

481527
return MergeResult<ShapeLayerContent>.Failed;

0 commit comments

Comments
 (0)