1 /*
2 * Copyright 2015 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 GrRectOpFactory_DEFINED
9 #define GrRectOpFactory_DEFINED
10
11 #include "GrAAFillRectOp.h"
12 #include "GrAAStrokeRectOp.h"
13 #include "GrAnalyticRectOp.h"
14 #include "GrColor.h"
15 #include "GrMeshDrawOp.h"
16 #include "GrNonAAFillRectOp.h"
17 #include "GrNonAAStrokeRectOp.h"
18 #include "GrPaint.h"
19 #include "SkMatrix.h"
20 #include "SkRefCnt.h"
21
22 struct SkRect;
23 class SkStrokeRec;
24
25 /**
26 * A factory for returning GrDrawOps which can draw rectangles.
27 */
28 namespace GrRectOpFactory {
29
MakeNonAAFill(GrColor color,const SkMatrix & viewMatrix,const SkRect & rect,const SkRect * localRect,const SkMatrix * localMatrix)30 inline std::unique_ptr<GrMeshDrawOp> MakeNonAAFill(GrColor color,
31 const SkMatrix& viewMatrix,
32 const SkRect& rect,
33 const SkRect* localRect,
34 const SkMatrix* localMatrix) {
35 if (viewMatrix.hasPerspective() || (localMatrix && localMatrix->hasPerspective())) {
36 return GrNonAAFillRectOp::MakeWithPerspective(color, viewMatrix, rect, localRect,
37 localMatrix);
38 } else {
39 return GrNonAAFillRectOp::Make(color, viewMatrix, rect, localRect, localMatrix);
40 }
41 }
42
MakeAAFill(const GrPaint & paint,const SkMatrix & viewMatrix,const SkRect & rect,const SkRect & croppedRect,const SkRect & devRect)43 inline std::unique_ptr<GrMeshDrawOp> MakeAAFill(const GrPaint& paint,
44 const SkMatrix& viewMatrix,
45 const SkRect& rect,
46 const SkRect& croppedRect,
47 const SkRect& devRect) {
48 if (!paint.usesDistanceVectorField()) {
49 return GrAAFillRectOp::Make(paint.getColor(), viewMatrix, croppedRect, devRect);
50 } else {
51 return GrAnalyticRectOp::Make(paint.getColor(), viewMatrix, rect, croppedRect, devRect);
52 }
53 }
54
MakeAAFill(GrColor color,const SkMatrix & viewMatrix,const SkMatrix & localMatrix,const SkRect & rect,const SkRect & devRect)55 inline std::unique_ptr<GrMeshDrawOp> MakeAAFill(GrColor color,
56 const SkMatrix& viewMatrix,
57 const SkMatrix& localMatrix,
58 const SkRect& rect,
59 const SkRect& devRect) {
60 return GrAAFillRectOp::Make(color, viewMatrix, localMatrix, rect, devRect);
61 }
62
MakeNonAAStroke(GrColor color,const SkMatrix & viewMatrix,const SkRect & rect,const SkStrokeRec & strokeRec,bool snapToPixelCenters)63 inline std::unique_ptr<GrMeshDrawOp> MakeNonAAStroke(GrColor color,
64 const SkMatrix& viewMatrix,
65 const SkRect& rect,
66 const SkStrokeRec& strokeRec,
67 bool snapToPixelCenters) {
68 return GrNonAAStrokeRectOp::Make(color, viewMatrix, rect, strokeRec, snapToPixelCenters);
69 }
70
MakeAAStroke(GrColor color,const SkMatrix & viewMatrix,const SkRect & rect,const SkStrokeRec & stroke)71 inline std::unique_ptr<GrMeshDrawOp> MakeAAStroke(GrColor color,
72 const SkMatrix& viewMatrix,
73 const SkRect& rect,
74 const SkStrokeRec& stroke) {
75 return GrAAStrokeRectOp::Make(color, viewMatrix, rect, stroke);
76 }
77
78 // First rect is outer; second rect is inner
79 std::unique_ptr<GrMeshDrawOp> MakeAAFillNestedRects(GrColor, const SkMatrix& viewMatrix,
80 const SkRect rects[2]);
81 };
82
83 #endif
84