1 /* 2 * Copyright 2013 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 9 #ifndef SkBorder_DEFINED 10 #define SkBorder_DEFINED 11 12 #include "SkColor.h" 13 #include "SkPaint.h" 14 #include "SkScalar.h" 15 #include "SkTArray.h" 16 17 // This class provides a concise means of specifying all the geometry/shading 18 // associated with a CSS-style box/round-rect. 19 class SkBorder { 20 public: 21 enum BorderStyle { 22 /** 23 */ 24 kNone_BorderStyle, 25 /** 26 */ 27 kHidden_BorderStyle, 28 /** 29 */ 30 kDotted_BorderStyle, 31 /** 32 */ 33 kDashed_BorderStyle, 34 /** 35 */ 36 kSolid_BorderStyle, 37 /** 38 */ 39 kDouble_BorderStyle, 40 /** 41 */ 42 kGroove_BorderStyle, 43 /** 44 */ 45 kRidge_BorderStyle, 46 /** 47 */ 48 kInset_BorderStyle, 49 /** 50 */ 51 kOutset_BorderStyle, 52 }; 53 54 enum BlurStyle { 55 kNormal_BlurStyle, //!< fuzzy inside and outside 56 kInner_BlurStyle, //!< fuzzy inside, nothing outside 57 }; 58 59 struct ShadowInfo { 60 SkScalar fXOffset; 61 SkScalar fYOffset; 62 SkScalar fBlurSigma; 63 SkColor fColor; 64 BlurStyle fStyle; 65 }; 66 67 SkBorder(SkPaint& p, SkScalar width, BorderStyle style); 68 69 SkBorder(const SkPaint paints[4], const SkScalar widths[4], const BorderStyle styles[4]); 70 setBackground(SkPaint * p)71 void setBackground(SkPaint* p) { 72 if (NULL == p) { 73 fBackground.reset(); 74 fFlags &= ~kDrawBackground_Flag; 75 } else { 76 fBackground = *p; 77 fFlags |= kDrawBackground_Flag; 78 } 79 } 80 addShadow(ShadowInfo & info)81 void addShadow(ShadowInfo& info) { 82 fShadows.push_back(info); 83 } 84 85 private: 86 enum Flags { 87 // One paint "fPaints[0]" is applied to all the borders 88 kOnePaint_Flag = 0x01, 89 // Use 'fBackground' to draw the background 90 kDrawBackground_Flag = 0x02, 91 }; 92 93 // If kOnePaint_Flag is specified then fBorder[0] is applied to all sides. 94 // Otherwise the order is: left, top, right, bottom 95 SkPaint fPaints[4]; 96 // Only valid if kDrawBackground_Flag is set. 97 SkPaint fBackground; 98 SkScalar fWidths[4]; 99 BorderStyle fStyles[4]; 100 SkTArray<ShadowInfo> fShadows; 101 uint32_t fFlags; 102 }; 103 104 #endif 105