1 /*
2  * Copyright 2018 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 GrStrokeRectOp_DEFINED
9 #define GrStrokeRectOp_DEFINED
10 
11 #include "GrTypesPriv.h"
12 
13 class GrDrawOp;
14 class GrPaint;
15 class SkMatrix;
16 struct SkRect;
17 class SkStrokeRec;
18 
19 /**
20  * A set of factory functions for drawing stroked rectangles either coverage-antialiased, or
21  * non-antialiased. The non-antialiased ops can be used with MSAA. As with other GrDrawOp factories,
22  * the GrPaint is only consumed by these methods if a valid op is returned. If null is returned then
23  * the paint is unmodified and may still be used.
24  */
25 namespace GrStrokeRectOp {
26 
27 std::unique_ptr<GrDrawOp> Make(GrContext* context,
28                                GrPaint&& paint,
29                                GrAAType aaType,
30                                const SkMatrix& viewMatrix,
31                                const SkRect& rect,
32                                const SkStrokeRec& stroke);
33 
34 // rects[0] == outer rectangle, rects[1] == inner rectangle. Null return means there is nothing to
35 // draw rather than failure. The area between the rectangles will be filled by the paint, and it
36 // will be anti-aliased with coverage AA. viewMatrix.rectStaysRect() must be true.
37 std::unique_ptr<GrDrawOp> MakeNested(GrContext* context,
38                                      GrPaint&& paint,
39                                      const SkMatrix& viewMatrix,
40                                      const SkRect rects[2]);
41 
42 }  // namespace GrStrokeRectOp
43 
44 #endif // GrStrokeRectOp_DEFINED
45