| Index: cc/paint/paint_flags.h | 
| diff --git a/cc/paint/paint_flags.h b/cc/paint/paint_flags.h | 
| index aa112452121ec037798eeb8e14aef869f41e437b..b7e96c68e2ec48f4a5e9505a7c5ce3e3e1372aee 100644 | 
| --- a/cc/paint/paint_flags.h | 
| +++ b/cc/paint/paint_flags.h | 
| @@ -5,14 +5,212 @@ | 
| #ifndef CC_PAINT_PAINT_FLAGS_H_ | 
| #define CC_PAINT_PAINT_FLAGS_H_ | 
|  | 
| +#include "base/compiler_specific.h" | 
| +#include "cc/paint/paint_export.h" | 
| +#include "cc/paint/paint_shader.h" | 
| +#include "third_party/skia/include/core/SkCanvas.h" | 
| +#include "third_party/skia/include/core/SkColorFilter.h" | 
| +#include "third_party/skia/include/core/SkDrawLooper.h" | 
| +#include "third_party/skia/include/core/SkImageFilter.h" | 
| +#include "third_party/skia/include/core/SkMaskFilter.h" | 
| #include "third_party/skia/include/core/SkPaint.h" | 
| +#include "third_party/skia/include/core/SkPathEffect.h" | 
| +#include "third_party/skia/include/core/SkTypeface.h" | 
|  | 
| namespace cc { | 
|  | 
| -using PaintFlags = SkPaint; | 
| +class CC_PAINT_EXPORT PaintFlags { | 
| + public: | 
| +  enum Style { | 
| +    kFill_Style = SkPaint::kFill_Style, | 
| +    kStroke_Style = SkPaint::kStroke_Style, | 
| +    kStrokeAndFill_Style = SkPaint::kStrokeAndFill_Style, | 
| +  }; | 
| +  ALWAYS_INLINE Style getStyle() const { | 
| +    return static_cast<Style>(paint_.getStyle()); | 
| +  } | 
| +  ALWAYS_INLINE void setStyle(Style style) { | 
| +    paint_.setStyle(static_cast<SkPaint::Style>(style)); | 
| +  } | 
| +  ALWAYS_INLINE SkColor getColor() const { return paint_.getColor(); } | 
| +  ALWAYS_INLINE void setColor(SkColor color) { paint_.setColor(color); } | 
| +  ALWAYS_INLINE void setARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b) { | 
| +    paint_.setARGB(a, r, g, b); | 
| +  } | 
| +  ALWAYS_INLINE uint8_t getAlpha() const { return paint_.getAlpha(); } | 
| +  ALWAYS_INLINE void setAlpha(U8CPU a) { paint_.setAlpha(a); } | 
| +  ALWAYS_INLINE void setBlendMode(SkBlendMode mode) { | 
| +    paint_.setBlendMode(mode); | 
| +  } | 
| +  ALWAYS_INLINE SkBlendMode getBlendMode() const { | 
| +    return paint_.getBlendMode(); | 
| +  } | 
| +  ALWAYS_INLINE bool isSrcOver() const { return paint_.isSrcOver(); } | 
| +  ALWAYS_INLINE bool isAntiAlias() const { return paint_.isAntiAlias(); } | 
| +  ALWAYS_INLINE void setAntiAlias(bool aa) { paint_.setAntiAlias(aa); } | 
| +  ALWAYS_INLINE bool isVerticalText() const { return paint_.isVerticalText(); } | 
| +  ALWAYS_INLINE void setVerticalText(bool vertical) { | 
| +    paint_.setVerticalText(vertical); | 
| +  } | 
| +  ALWAYS_INLINE bool isSubpixelText() const { return paint_.isSubpixelText(); } | 
| +  ALWAYS_INLINE void setSubpixelText(bool subpixel_text) { | 
| +    paint_.setSubpixelText(subpixel_text); | 
| +  } | 
| +  ALWAYS_INLINE bool isLCDRenderText() const { | 
| +    return paint_.isLCDRenderText(); | 
| +  } | 
| +  ALWAYS_INLINE void setLCDRenderText(bool lcd_text) { | 
| +    paint_.setLCDRenderText(lcd_text); | 
| +  } | 
| +  enum Hinting { | 
| +    kNo_Hinting = SkPaint::kNo_Hinting, | 
| +    kSlight_Hinting = SkPaint::kSlight_Hinting, | 
| +    kNormal_Hinting = SkPaint::kNormal_Hinting,  //!< this is the default | 
| +    kFull_Hinting = SkPaint::kFull_Hinting | 
| +  }; | 
| +  ALWAYS_INLINE Hinting getHinting() const { | 
| +    return static_cast<Hinting>(paint_.getHinting()); | 
| +  } | 
| +  ALWAYS_INLINE void setHinting(Hinting hinting_level) { | 
| +    paint_.setHinting(static_cast<SkPaint::Hinting>(hinting_level)); | 
| +  } | 
| +  ALWAYS_INLINE bool isAutohinted() const { return paint_.isAutohinted(); } | 
| +  ALWAYS_INLINE void setAutohinted(bool use_auto_hinter) { | 
| +    paint_.setAutohinted(use_auto_hinter); | 
| +  } | 
| +  ALWAYS_INLINE bool isDither() const { return paint_.isDither(); } | 
| +  ALWAYS_INLINE void setDither(bool dither) { paint_.setDither(dither); } | 
| +  enum TextEncoding { | 
| +    kUTF8_TextEncoding = SkPaint::kUTF8_TextEncoding, | 
| +    kUTF16_TextEncoding = SkPaint::kUTF16_TextEncoding, | 
| +    kUTF32_TextEncoding = SkPaint::kUTF32_TextEncoding, | 
| +    kGlyphID_TextEncoding = SkPaint::kGlyphID_TextEncoding | 
| +  }; | 
| +  ALWAYS_INLINE TextEncoding getTextEncoding() const { | 
| +    return static_cast<TextEncoding>(paint_.getTextEncoding()); | 
| +  } | 
| +  ALWAYS_INLINE void setTextEncoding(TextEncoding encoding) { | 
| +    paint_.setTextEncoding(static_cast<SkPaint::TextEncoding>(encoding)); | 
| +  } | 
| +  ALWAYS_INLINE SkScalar getTextSize() const { return paint_.getTextSize(); } | 
| +  ALWAYS_INLINE void setTextSize(SkScalar textSize) { | 
| +    paint_.setTextSize(textSize); | 
| +  } | 
| +  ALWAYS_INLINE void setFilterQuality(SkFilterQuality quality) { | 
| +    paint_.setFilterQuality(quality); | 
| +  } | 
| +  ALWAYS_INLINE SkFilterQuality getFilterQuality() const { | 
| +    return paint_.getFilterQuality(); | 
| +  } | 
| +  ALWAYS_INLINE SkScalar getStrokeWidth() const { | 
| +    return paint_.getStrokeWidth(); | 
| +  } | 
| +  ALWAYS_INLINE void setStrokeWidth(SkScalar width) { | 
| +    paint_.setStrokeWidth(width); | 
| +  } | 
| +  ALWAYS_INLINE SkScalar getStrokeMiter() const { | 
| +    return paint_.getStrokeMiter(); | 
| +  } | 
| +  ALWAYS_INLINE void setStrokeMiter(SkScalar miter) { | 
| +    paint_.setStrokeMiter(miter); | 
| +  } | 
| +  enum Cap { | 
| +    kButt_Cap = SkPaint::kButt_Cap,    //!< begin/end contours with no extension | 
| +    kRound_Cap = SkPaint::kRound_Cap,  //!< begin/end contours with a | 
| +                                       //! semi-circle extension | 
| +    kSquare_Cap = SkPaint::kSquare_Cap,  //!< begin/end contours with a half | 
| +                                         //! square extension | 
| +    kLast_Cap = kSquare_Cap, | 
| +    kDefault_Cap = kButt_Cap | 
| +  }; | 
| +  ALWAYS_INLINE Cap getStrokeCap() const { | 
| +    return static_cast<Cap>(paint_.getStrokeCap()); | 
| +  } | 
| +  ALWAYS_INLINE void setStrokeCap(Cap cap) { | 
| +    paint_.setStrokeCap(static_cast<SkPaint::Cap>(cap)); | 
| +  } | 
| +  enum Join { | 
| +    kMiter_Join = SkPaint::kMiter_Join, | 
| +    kRound_Join = SkPaint::kRound_Join, | 
| +    kBevel_Join = SkPaint::kBevel_Join, | 
| +    kLast_Join = kBevel_Join, | 
| +    kDefault_Join = kMiter_Join | 
| +  }; | 
| +  ALWAYS_INLINE Join getStrokeJoin() const { | 
| +    return static_cast<Join>(paint_.getStrokeJoin()); | 
| +  } | 
| +  ALWAYS_INLINE void setStrokeJoin(Join join) { | 
| +    paint_.setStrokeJoin(static_cast<SkPaint::Join>(join)); | 
| +  } | 
| +  ALWAYS_INLINE SkTypeface* getTypeface() const { return paint_.getTypeface(); } | 
| +  ALWAYS_INLINE void setTypeface(sk_sp<SkTypeface> typeface) { | 
| +    paint_.setTypeface(std::move(typeface)); | 
| +  } | 
| +  ALWAYS_INLINE SkColorFilter* getColorFilter() const { | 
| +    return paint_.getColorFilter(); | 
| +  } | 
| +  ALWAYS_INLINE void setColorFilter(sk_sp<SkColorFilter> filter) { | 
| +    paint_.setColorFilter(std::move(filter)); | 
| +  } | 
| +  ALWAYS_INLINE SkMaskFilter* getMaskFilter() const { | 
| +    return paint_.getMaskFilter(); | 
| +  } | 
| +  ALWAYS_INLINE void setMaskFilter(sk_sp<SkMaskFilter> mask) { | 
| +    paint_.setMaskFilter(std::move(mask)); | 
| +  } | 
| +  ALWAYS_INLINE PaintShader* getShader() const { return paint_.getShader(); } | 
| +  ALWAYS_INLINE void setShader(sk_sp<PaintShader> shader) { | 
| +    paint_.setShader(std::move(shader)); | 
| +  } | 
| +  ALWAYS_INLINE SkPathEffect* getPathEffect() const { | 
| +    return paint_.getPathEffect(); | 
| +  } | 
| +  ALWAYS_INLINE void setPathEffect(sk_sp<SkPathEffect> effect) { | 
| +    paint_.setPathEffect(std::move(effect)); | 
| +  } | 
| +  ALWAYS_INLINE bool getFillPath(const SkPath& src, | 
| +                                 SkPath* dst, | 
| +                                 const SkRect* cullRect = nullptr, | 
| +                                 SkScalar resScale = 1) const { | 
| +    return paint_.getFillPath(src, dst, cullRect, resScale); | 
| +  } | 
| +  ALWAYS_INLINE sk_sp<SkImageFilter> refImageFilter() const { | 
| +    return paint_.refImageFilter(); | 
| +  } | 
| +  ALWAYS_INLINE SkImageFilter* getImageFilter() const { | 
| +    return paint_.getImageFilter(); | 
| +  } | 
| +  void setImageFilter(sk_sp<SkImageFilter> filter) { | 
| +    paint_.setImageFilter(std::move(filter)); | 
| +  } | 
| +  ALWAYS_INLINE SkDrawLooper* getDrawLooper() const { | 
| +    return paint_.getDrawLooper(); | 
| +  } | 
| +  ALWAYS_INLINE SkDrawLooper* getLooper() const { return paint_.getLooper(); } | 
| +  ALWAYS_INLINE void setLooper(sk_sp<SkDrawLooper> looper) { | 
| +    paint_.setLooper(std::move(looper)); | 
| +  } | 
| +  ALWAYS_INLINE bool canComputeFastBounds() const { | 
| +    return paint_.canComputeFastBounds(); | 
| +  } | 
| +  ALWAYS_INLINE const SkRect& computeFastBounds(const SkRect& orig, | 
| +                                                SkRect* storage) const { | 
| +    return paint_.computeFastBounds(orig, storage); | 
| +  } | 
|  | 
| -inline const SkPaint& ToSkPaint(const PaintFlags& flags) { | 
| -  return flags; | 
| + private: | 
| +  friend const SkPaint& ToSkPaint(const PaintFlags& flags); | 
| +  friend const SkPaint* ToSkPaint(const PaintFlags* flags); | 
| + | 
| +  SkPaint paint_; | 
| +}; | 
| + | 
| +ALWAYS_INLINE const SkPaint& ToSkPaint(const PaintFlags& flags) { | 
| +  return flags.paint_; | 
| +} | 
| + | 
| +ALWAYS_INLINE const SkPaint* ToSkPaint(const PaintFlags* flags) { | 
| +  return &flags->paint_; | 
| } | 
|  | 
| }  // namespace cc | 
|  |