diff options
author | Florin Malita <fmalita@chromium.org> | 2017-12-31 09:12:31 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-12-31 14:33:09 +0000 |
commit | dacc02b8dd36d545d95261670ace194150ab52ee (patch) | |
tree | 18623715ea1c70fb7bf343b6826b61a6a513f63c /experimental | |
parent | dbcdbc40d49d7af22a0292b497b4d22a687ce1dd (diff) |
[skotty] Initial shape transform support
TBR=
Change-Id: I29ce2e6a29492fb0ec51f28f095392594ea6781c
Reviewed-on: https://skia-review.googlesource.com/90024
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
Diffstat (limited to 'experimental')
-rw-r--r-- | experimental/skotty/Skotty.cpp | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/experimental/skotty/Skotty.cpp b/experimental/skotty/Skotty.cpp index f9f574172f..7a8e9e35c4 100644 --- a/experimental/skotty/Skotty.cpp +++ b/experimental/skotty/Skotty.cpp @@ -218,10 +218,17 @@ static constexpr GroupAttacherT gGroupAttachers[] = { AttachShapeGroup, }; +using TransformAttacherT = sk_sp<sksg::RenderNode> (*)(const Json::Value&, AttachContext*, + sk_sp<sksg::RenderNode>); +static constexpr TransformAttacherT gTransformAttachers[] = { + AttachTransform, +}; + enum class ShapeType { kGeometry, kPaint, kGroup, + kTransform, }; struct ShapeInfo { @@ -232,10 +239,11 @@ struct ShapeInfo { const ShapeInfo* FindShapeInfo(const Json::Value& shape) { static constexpr ShapeInfo gShapeInfo[] = { - { "fl", ShapeType::kPaint , 0 }, // fill -> AttachFillPaint - { "gr", ShapeType::kGroup , 0 }, // group -> AttachShapeGroup - { "sh", ShapeType::kGeometry, 0 }, // shape -> AttachPathGeometry - { "st", ShapeType::kPaint , 1 }, // stroke -> AttachStrokePaint + { "fl", ShapeType::kPaint , 0 }, // fill -> AttachFillPaint + { "gr", ShapeType::kGroup , 0 }, // group -> AttachShapeGroup + { "sh", ShapeType::kGeometry , 0 }, // shape -> AttachPathGeometry + { "st", ShapeType::kPaint , 1 }, // stroke -> AttachStrokePaint + { "tr", ShapeType::kTransform, 0 }, // transform -> AttachTransform }; if (!shape.isObject()) @@ -261,7 +269,8 @@ sk_sp<sksg::RenderNode> AttachShape(const Json::Value& shapeArray, AttachContext if (!shapeArray.isArray()) return nullptr; - sk_sp<sksg::Group> shape_group = sksg::Group::Make(); + sk_sp<sksg::Group> shape_group = sksg::Group::Make(); + sk_sp<sksg::RenderNode> xformed_group = shape_group; SkSTArray<16, sk_sp<sksg::GeometryNode>, true> geos; SkSTArray<16, sk_sp<sksg::PaintNode> , true> paints; @@ -292,6 +301,11 @@ sk_sp<sksg::RenderNode> AttachShape(const Json::Value& shapeArray, AttachContext shape_group->addChild(std::move(group)); } } break; + case ShapeType::kTransform: { + // TODO: BM appears to transform the grometry, not the draw op itself. + SkASSERT(info->fAttacherIndex < SK_ARRAY_COUNT(gTransformAttachers)); + xformed_group = gTransformAttachers[info->fAttacherIndex](s, ctx, xformed_group); + } break; } } @@ -302,7 +316,7 @@ sk_sp<sksg::RenderNode> AttachShape(const Json::Value& shapeArray, AttachContext } LOG("** Attached shape - geometries: %d, paints: %d\n", geos.count(), paints.count()); - return shape_group; + return xformed_group; } sk_sp<sksg::RenderNode> AttachCompLayer(const Json::Value& layer, AttachContext* ctx) { |