• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2012 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 SkStrokeRec_DEFINED
9 #define SkStrokeRec_DEFINED
10 
11 #include "SkPaint.h"
12 
13 class SkPath;
14 
15 class SkStrokeRec {
16 public:
17     enum InitStyle {
18         kHairline_InitStyle,
19         kFill_InitStyle
20     };
21     SkStrokeRec(InitStyle style);
22 
23     SkStrokeRec(const SkStrokeRec&);
24     explicit SkStrokeRec(const SkPaint&);
25 
26     enum Style {
27         kHairline_Style,
28         kFill_Style,
29         kStroke_Style,
30         kStrokeAndFill_Style
31     };
32 
33     Style getStyle() const;
getWidth()34     SkScalar getWidth() const { return fWidth; }
getMiter()35     SkScalar getMiter() const { return fMiterLimit; }
getCap()36     SkPaint::Cap getCap() const { return fCap; }
getJoin()37     SkPaint::Join getJoin() const { return fJoin; }
38 
isHairlineStyle()39     bool isHairlineStyle() const {
40         return kHairline_Style == this->getStyle();
41     }
42 
isFillStyle()43     bool isFillStyle() const {
44         return kFill_Style == this->getStyle();
45     }
46 
47     void setFillStyle();
48     void setHairlineStyle();
49     /**
50      *  Specify the strokewidth, and optionally if you want stroke + fill.
51      *  Note, if width==0, then this request is taken to mean:
52      *      strokeAndFill==true -> new style will be Fill
53      *      strokeAndFill==false -> new style will be Hairline
54      */
55     void setStrokeStyle(SkScalar width, bool strokeAndFill = false);
56 
setStrokeParams(SkPaint::Cap cap,SkPaint::Join join,SkScalar miterLimit)57     void setStrokeParams(SkPaint::Cap cap, SkPaint::Join join, SkScalar miterLimit) {
58         fCap = cap;
59         fJoin = join;
60         fMiterLimit = miterLimit;
61     }
62 
63     /**
64      *  Returns true if this specifes any thick stroking, i.e. applyToPath()
65      *  will return true.
66      */
needToApply()67     bool needToApply() const {
68         Style style = this->getStyle();
69         return (kStroke_Style == style) || (kStrokeAndFill_Style == style);
70     }
71 
72     /**
73      *  Apply these stroke parameters to the src path, returning the result
74      *  in dst.
75      *
76      *  If there was no change (i.e. style == hairline or fill) this returns
77      *  false and dst is unchanged. Otherwise returns true and the result is
78      *  stored in dst.
79      *
80      *  src and dst may be the same path.
81      */
82     bool applyToPath(SkPath* dst, const SkPath& src) const;
83 
84 private:
85     SkScalar        fWidth;
86     SkScalar        fMiterLimit;
87     SkPaint::Cap    fCap;
88     SkPaint::Join   fJoin;
89     bool            fStrokeAndFill;
90 };
91 
92 #endif
93