1/*
2 * Copyright 2016 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SkSVGPoly_DEFINED
9#define SkSVGPoly_DEFINED
10
11#include "SkPath.h"
12#include "SkSVGShape.h"
13
14// Handles <polygon> and <polyline> elements.
15class SkSVGPoly final : public SkSVGShape {
16public:
17    ~SkSVGPoly() override = default;
18
19    static sk_sp<SkSVGPoly> MakePolygon() {
20        return sk_sp<SkSVGPoly>(new SkSVGPoly(SkSVGTag::kPolygon));
21    }
22
23    static sk_sp<SkSVGPoly> MakePolyline() {
24        return sk_sp<SkSVGPoly>(new SkSVGPoly(SkSVGTag::kPolyline));
25    }
26
27    void setPoints(const SkSVGPointsType&);
28
29protected:
30    void onSetAttribute(SkSVGAttribute, const SkSVGValue&) override;
31
32    void onDraw(SkCanvas*, const SkSVGLengthContext&, const SkPaint&,
33                SkPath::FillType) const override;
34
35    SkPath onAsPath(const SkSVGRenderContext&) const override;
36
37private:
38    SkSVGPoly(SkSVGTag);
39
40    mutable SkPath fPath;  // mutated in onDraw(), to apply inherited fill types.
41
42    typedef SkSVGShape INHERITED;
43};
44
45#endif // SkSVGPoly_DEFINED
46