[skotty] Add ellipse support
TBR= Change-Id: I48bbc6aabaab1c3ab5cc9fb19c87ad1f5606eb54 Reviewed-on: https://skia-review.googlesource.com/90900 Reviewed-by: Florin Malita <fmalita@chromium.org> Commit-Queue: Florin Malita <fmalita@chromium.org>
This commit is contained in:
parent
1445da6c03
commit
fbc13f1434
@ -158,12 +158,39 @@ sk_sp<sksg::GeometryNode> AttachRRectGeometry(const Json::Value& jrect, AttachCo
|
|||||||
auto s_attached = AttachProperty<VectorValue, SkSize>(jrect["s"], ctx, composite,
|
auto s_attached = AttachProperty<VectorValue, SkSize>(jrect["s"], ctx, composite,
|
||||||
[](const sk_sp<CompositeRRect>& node, const SkSize& sz) { node->setSize(sz); });
|
[](const sk_sp<CompositeRRect>& node, const SkSize& sz) { node->setSize(sz); });
|
||||||
auto r_attached = AttachProperty<ScalarValue, SkScalar>(jrect["r"], ctx, composite,
|
auto r_attached = AttachProperty<ScalarValue, SkScalar>(jrect["r"], ctx, composite,
|
||||||
[](const sk_sp<CompositeRRect>& node, SkScalar radius) { node->setRadius(radius); });
|
[](const sk_sp<CompositeRRect>& node, SkScalar radius) {
|
||||||
|
node->setRadius(SkSize::Make(radius, radius));
|
||||||
|
});
|
||||||
|
|
||||||
if (!p_attached && !s_attached && !r_attached) {
|
if (!p_attached && !s_attached && !r_attached) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOG("** Attached (r)rect geometry\n");
|
||||||
|
|
||||||
|
return rect_node;
|
||||||
|
}
|
||||||
|
|
||||||
|
sk_sp<sksg::GeometryNode> AttachEllipseGeometry(const Json::Value& jellipse, AttachContext* ctx) {
|
||||||
|
SkASSERT(jellipse.isObject());
|
||||||
|
|
||||||
|
auto rect_node = sksg::RRect::Make();
|
||||||
|
auto composite = sk_make_sp<CompositeRRect>(rect_node);
|
||||||
|
|
||||||
|
auto p_attached = AttachProperty<VectorValue, SkPoint>(jellipse["p"], ctx, composite,
|
||||||
|
[](const sk_sp<CompositeRRect>& node, const SkPoint& pos) { node->setPosition(pos); });
|
||||||
|
auto s_attached = AttachProperty<VectorValue, SkSize>(jellipse["s"], ctx, composite,
|
||||||
|
[](const sk_sp<CompositeRRect>& node, const SkSize& sz) {
|
||||||
|
node->setSize(sz);
|
||||||
|
node->setRadius(SkSize::Make(sz.width() / 2, sz.height() / 2));
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!p_attached && !s_attached) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG("** Attached ellipse geometry\n");
|
||||||
|
|
||||||
return rect_node;
|
return rect_node;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -250,6 +277,7 @@ using GeometryAttacherT = sk_sp<sksg::GeometryNode> (*)(const Json::Value&, Atta
|
|||||||
static constexpr GeometryAttacherT gGeometryAttachers[] = {
|
static constexpr GeometryAttacherT gGeometryAttachers[] = {
|
||||||
AttachPathGeometry,
|
AttachPathGeometry,
|
||||||
AttachRRectGeometry,
|
AttachRRectGeometry,
|
||||||
|
AttachEllipseGeometry,
|
||||||
};
|
};
|
||||||
|
|
||||||
using PaintAttacherT = sk_sp<sksg::PaintNode> (*)(const Json::Value&, AttachContext*);
|
using PaintAttacherT = sk_sp<sksg::PaintNode> (*)(const Json::Value&, AttachContext*);
|
||||||
@ -293,6 +321,7 @@ struct ShapeInfo {
|
|||||||
|
|
||||||
const ShapeInfo* FindShapeInfo(const Json::Value& shape) {
|
const ShapeInfo* FindShapeInfo(const Json::Value& shape) {
|
||||||
static constexpr ShapeInfo gShapeInfo[] = {
|
static constexpr ShapeInfo gShapeInfo[] = {
|
||||||
|
{ "el", ShapeType::kGeometry , 2 }, // ellipse -> AttachEllipseGeometry
|
||||||
{ "fl", ShapeType::kPaint , 0 }, // fill -> AttachFillPaint
|
{ "fl", ShapeType::kPaint , 0 }, // fill -> AttachFillPaint
|
||||||
{ "gr", ShapeType::kGroup , 0 }, // group -> AttachShapeGroup
|
{ "gr", ShapeType::kGroup , 0 }, // group -> AttachShapeGroup
|
||||||
{ "mm", ShapeType::kGeometryEffect, 0 }, // merge -> AttachMergeGeometryEffect
|
{ "mm", ShapeType::kGeometryEffect, 0 }, // merge -> AttachMergeGeometryEffect
|
||||||
|
@ -166,8 +166,8 @@ void CompositeRRect::apply() {
|
|||||||
auto rr = SkRRect::MakeRectXY(SkRect::MakeXYWH(fPosition.x() - fSize.width() / 2,
|
auto rr = SkRRect::MakeRectXY(SkRect::MakeXYWH(fPosition.x() - fSize.width() / 2,
|
||||||
fPosition.y() - fSize.height() / 2,
|
fPosition.y() - fSize.height() / 2,
|
||||||
fSize.width(), fSize.height()),
|
fSize.width(), fSize.height()),
|
||||||
fRadius,
|
fRadius.width(),
|
||||||
fRadius);
|
fRadius.height());
|
||||||
fRRectNode->setRRect(rr);
|
fRRectNode->setRRect(rr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,7 +101,7 @@ public:
|
|||||||
|
|
||||||
COMPOSITE_PROPERTY(Position, SkPoint , SkPoint::Make(0, 0))
|
COMPOSITE_PROPERTY(Position, SkPoint , SkPoint::Make(0, 0))
|
||||||
COMPOSITE_PROPERTY(Size , SkSize , SkSize::Make(0, 0))
|
COMPOSITE_PROPERTY(Size , SkSize , SkSize::Make(0, 0))
|
||||||
COMPOSITE_PROPERTY(Radius , SkScalar, 0)
|
COMPOSITE_PROPERTY(Radius , SkSize , SkSize::Make(0, 0))
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void apply();
|
void apply();
|
||||||
|
Loading…
Reference in New Issue
Block a user