| /* |
| * 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 |