14aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita/*
24aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita * Copyright 2017 Google Inc.
34aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita *
44aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita * Use of this source code is governed by a BSD-style license that can be
54aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita * found in the LICENSE file.
64aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita */
74aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita
84aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita#ifndef SkSGRect_DEFINED
94aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita#define SkSGRect_DEFINED
104aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita
114aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita#include "SkSGGeometryNode.h"
124aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita
134aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita#include "SkRect.h"
142e1d7e234241328154a93b6ddb19f573abc29c15Florin Malita#include "SkRRect.h"
154aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita
164aa4441186b06565a597ec4a9baac5a972fddb51Florin Malitaclass SkCanvas;
174aa4441186b06565a597ec4a9baac5a972fddb51Florin Malitaclass SkPaint;
184aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita
194aa4441186b06565a597ec4a9baac5a972fddb51Florin Malitanamespace sksg {
204aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita
214aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita/**
224aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita * Concrete Geometry node, wrapping an SkRect.
234aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita */
242e1d7e234241328154a93b6ddb19f573abc29c15Florin Malitaclass Rect final : public GeometryNode {
254aa4441186b06565a597ec4a9baac5a972fddb51Florin Malitapublic:
264aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita    static sk_sp<Rect> Make()                { return sk_sp<Rect>(new Rect(SkRect::MakeEmpty())); }
274aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita    static sk_sp<Rect> Make(const SkRect& r) { return sk_sp<Rect>(new Rect(r)); }
284aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita
294aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita    SG_ATTRIBUTE(L, SkScalar, fRect.fLeft  )
304aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita    SG_ATTRIBUTE(T, SkScalar, fRect.fTop   )
314aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita    SG_ATTRIBUTE(R, SkScalar, fRect.fRight )
324aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita    SG_ATTRIBUTE(B, SkScalar, fRect.fBottom)
334aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita
344aa4441186b06565a597ec4a9baac5a972fddb51Florin Malitaprotected:
3538ea40eb750596c75b8ffb5c8f94bcb84b94a7c3Florin Malita    void onClip(SkCanvas*, bool antiAlias) const override;
364aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita    void onDraw(SkCanvas*, const SkPaint&) const override;
374aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita
38c14f144484eff57f6861766510876d83b9046fa6Florin Malita    SkRect onRevalidate(InvalidationController*, const SkMatrix&) override;
39e6345d90f8f9d975128de9890d26b1af1fedc524Florin Malita    SkPath onAsPath() const override;
404aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita
414aa4441186b06565a597ec4a9baac5a972fddb51Florin Malitaprivate:
424aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita    explicit Rect(const SkRect&);
434aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita
444aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita    SkRect fRect;
4551012ce332016cca5160b5a63b91a04b6cb56899Florin Malita
4651012ce332016cca5160b5a63b91a04b6cb56899Florin Malita    using INHERITED = GeometryNode;
474aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita};
484aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita
492e1d7e234241328154a93b6ddb19f573abc29c15Florin Malita/**
502e1d7e234241328154a93b6ddb19f573abc29c15Florin Malita * Concrete Geometry node, wrapping an SkRRect.
512e1d7e234241328154a93b6ddb19f573abc29c15Florin Malita */
522e1d7e234241328154a93b6ddb19f573abc29c15Florin Malitaclass RRect final : public GeometryNode {
532e1d7e234241328154a93b6ddb19f573abc29c15Florin Malitapublic:
542e1d7e234241328154a93b6ddb19f573abc29c15Florin Malita    static sk_sp<RRect> Make()                  { return sk_sp<RRect>(new RRect(SkRRect())); }
552e1d7e234241328154a93b6ddb19f573abc29c15Florin Malita    static sk_sp<RRect> Make(const SkRRect& rr) { return sk_sp<RRect>(new RRect(rr)); }
562e1d7e234241328154a93b6ddb19f573abc29c15Florin Malita
572e1d7e234241328154a93b6ddb19f573abc29c15Florin Malita    SG_ATTRIBUTE(RRect, SkRRect, fRRect)
582e1d7e234241328154a93b6ddb19f573abc29c15Florin Malita
592e1d7e234241328154a93b6ddb19f573abc29c15Florin Malitaprotected:
6038ea40eb750596c75b8ffb5c8f94bcb84b94a7c3Florin Malita    void onClip(SkCanvas*, bool antiAlias) const override;
612e1d7e234241328154a93b6ddb19f573abc29c15Florin Malita    void onDraw(SkCanvas*, const SkPaint&) const override;
622e1d7e234241328154a93b6ddb19f573abc29c15Florin Malita
63c14f144484eff57f6861766510876d83b9046fa6Florin Malita    SkRect onRevalidate(InvalidationController*, const SkMatrix&) override;
64e6345d90f8f9d975128de9890d26b1af1fedc524Florin Malita    SkPath onAsPath() const override;
652e1d7e234241328154a93b6ddb19f573abc29c15Florin Malita
662e1d7e234241328154a93b6ddb19f573abc29c15Florin Malitaprivate:
672e1d7e234241328154a93b6ddb19f573abc29c15Florin Malita    explicit RRect(const SkRRect&);
682e1d7e234241328154a93b6ddb19f573abc29c15Florin Malita
692e1d7e234241328154a93b6ddb19f573abc29c15Florin Malita    SkRRect fRRect;
7051012ce332016cca5160b5a63b91a04b6cb56899Florin Malita
7151012ce332016cca5160b5a63b91a04b6cb56899Florin Malita    using INHERITED = GeometryNode;
722e1d7e234241328154a93b6ddb19f573abc29c15Florin Malita};
732e1d7e234241328154a93b6ddb19f573abc29c15Florin Malita
744aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita} // namespace sksg
754aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita
764aa4441186b06565a597ec4a9baac5a972fddb51Florin Malita#endif // SkSGRect_DEFINED
77