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 SkSVGRect_DEFINED
9#define SkSVGRect_DEFINED
10
11#include "SkSVGShape.h"
12#include "SkSVGTypes.h"
13
14class SkRRect;
15
16class SkSVGRect final : public SkSVGShape {
17public:
18    ~SkSVGRect() override = default;
19    static sk_sp<SkSVGRect> Make() { return sk_sp<SkSVGRect>(new SkSVGRect()); }
20
21    void setX(const SkSVGLength&);
22    void setY(const SkSVGLength&);
23    void setWidth(const SkSVGLength&);
24    void setHeight(const SkSVGLength&);
25    void setRx(const SkSVGLength&);
26    void setRy(const SkSVGLength&);
27
28protected:
29    void onSetAttribute(SkSVGAttribute, const SkSVGValue&) override;
30
31    void onDraw(SkCanvas*, const SkSVGLengthContext&, const SkPaint&,
32                SkPath::FillType) const override;
33
34    SkPath onAsPath(const SkSVGRenderContext&) const override;
35
36private:
37    SkSVGRect();
38
39    SkRRect resolve(const SkSVGLengthContext&) const;
40
41    SkSVGLength fX      = SkSVGLength(0);
42    SkSVGLength fY      = SkSVGLength(0);
43    SkSVGLength fWidth  = SkSVGLength(0);
44    SkSVGLength fHeight = SkSVGLength(0);
45
46    // The x radius for rounded rects.
47    SkSVGLength fRx     = SkSVGLength(0);
48    // The y radius for rounded rects.
49    SkSVGLength fRy     = SkSVGLength(0);
50
51    typedef SkSVGShape INHERITED;
52};
53
54#endif // SkSVGRect_DEFINED
55