|  | /* | 
|  | * Copyright 2013 Google Inc. | 
|  | * | 
|  | * Use of this source code is governed by a BSD-style license that can be | 
|  | * found in the LICENSE file. | 
|  | */ | 
|  |  | 
|  |  | 
|  | #ifndef SkBorder_DEFINED | 
|  | #define SkBorder_DEFINED | 
|  |  | 
|  | #include "SkColor.h" | 
|  | #include "SkPaint.h" | 
|  | #include "SkScalar.h" | 
|  | #include "SkTArray.h" | 
|  |  | 
|  | // This class provides a concise means of specifying all the geometry/shading | 
|  | // associated with a CSS-style box/round-rect. | 
|  | class SkBorder { | 
|  | public: | 
|  | enum BorderStyle { | 
|  | /** | 
|  | */ | 
|  | kNone_BorderStyle, | 
|  | /** | 
|  | */ | 
|  | kHidden_BorderStyle, | 
|  | /** | 
|  | */ | 
|  | kDotted_BorderStyle, | 
|  | /** | 
|  | */ | 
|  | kDashed_BorderStyle, | 
|  | /** | 
|  | */ | 
|  | kSolid_BorderStyle, | 
|  | /** | 
|  | */ | 
|  | kDouble_BorderStyle, | 
|  | /** | 
|  | */ | 
|  | kGroove_BorderStyle, | 
|  | /** | 
|  | */ | 
|  | kRidge_BorderStyle, | 
|  | /** | 
|  | */ | 
|  | kInset_BorderStyle, | 
|  | /** | 
|  | */ | 
|  | kOutset_BorderStyle, | 
|  | }; | 
|  |  | 
|  | enum BlurStyle { | 
|  | kNormal_BlurStyle,  //!< fuzzy inside and outside | 
|  | kInner_BlurStyle,   //!< fuzzy inside, nothing outside | 
|  | }; | 
|  |  | 
|  | struct ShadowInfo { | 
|  | SkScalar  fXOffset; | 
|  | SkScalar  fYOffset; | 
|  | SkScalar  fBlurSigma; | 
|  | SkColor   fColor; | 
|  | BlurStyle fStyle; | 
|  | }; | 
|  |  | 
|  | SkBorder(SkPaint& p, SkScalar width, BorderStyle style); | 
|  |  | 
|  | SkBorder(const SkPaint paints[4], const SkScalar widths[4], const BorderStyle styles[4]); | 
|  |  | 
|  | void setBackground(SkPaint* p) { | 
|  | if (NULL == p) { | 
|  | fBackground.reset(); | 
|  | fFlags &= ~kDrawBackground_Flag; | 
|  | } else { | 
|  | fBackground = *p; | 
|  | fFlags |= kDrawBackground_Flag; | 
|  | } | 
|  | } | 
|  |  | 
|  | void addShadow(ShadowInfo& info) { | 
|  | fShadows.push_back(info); | 
|  | } | 
|  |  | 
|  | private: | 
|  | enum Flags { | 
|  | // One paint "fPaints[0]" is applied to all the borders | 
|  | kOnePaint_Flag = 0x01, | 
|  | // Use 'fBackground' to draw the background | 
|  | kDrawBackground_Flag = 0x02, | 
|  | }; | 
|  |  | 
|  | // If kOnePaint_Flag is specified then fBorder[0] is applied to all sides. | 
|  | // Otherwise the order is: left, top, right, bottom | 
|  | SkPaint              fPaints[4]; | 
|  | // Only valid if kDrawBackground_Flag is set. | 
|  | SkPaint              fBackground; | 
|  | SkScalar             fWidths[4]; | 
|  | BorderStyle          fStyles[4]; | 
|  | SkTArray<ShadowInfo> fShadows; | 
|  | uint32_t             fFlags; | 
|  | }; | 
|  |  | 
|  | #endif |