Chromium Code Reviews| Index: include/core/SkPaintParts.h |
| diff --git a/include/core/SkPaintParts.h b/include/core/SkPaintParts.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..1f06ad48fb250e6c628771d90e38fd7ab5ff5ef8 |
| --- /dev/null |
| +++ b/include/core/SkPaintParts.h |
| @@ -0,0 +1,201 @@ |
| +/* |
| + * Copyright 2010 Google Inc. |
| + * |
| + * Use of this source code is governed by a BSD-style license that can be |
| + * found in the LICENSE file. |
| + */ |
| + |
| +#ifndef SkPaintParts_DEFINED |
| +#define SkPaintParts_DEFINED |
| + |
| +#include "SkColor.h" |
| + |
| +#ifdef SK_BUILD_FOR_ANDROID |
| +#include "SkPaintOptionsAndroid.h" |
| +#endif |
| + |
| +class SkAnnotation; |
| +class SkAutoGlyphCache; |
| +class SkColorFilter; |
| +class SkDescriptor; |
| +struct SkDeviceProperties; |
| +class SkDrawLooper; |
| +class SkReadBuffer; |
| +class SkWriteBuffer; |
| +struct SkGlyph; |
| +struct SkRect; |
| +class SkGlyphCache; |
| +class SkImageFilter; |
| +class SkMaskFilter; |
| +class SkPath; |
| +class SkPathEffect; |
| +struct SkPoint; |
| +class SkRasterizer; |
| +class SkShader; |
| +class SkTypeface; |
| +class SkXfermode; |
| + |
| +class SkPaintParts { |
|
scroggo
2014/04/15 17:21:07
Comments would be nice. If I understand correctly,
tomhudson
2014/04/16 11:41:31
...and if this is somehow avoiding touching the re
reed1
2014/04/18 14:04:31
Absolutely this will need to be documented. (but m
|
| +public: |
| + SkPaintParts() { |
| + sk_bzero(this, sizeof(*this)); |
|
mtklein
2014/04/15 14:32:44
Tsk tsk. We know this bzero/memcpy stuff is bad n
reed1
2014/04/18 14:04:31
Tsk tsk... premature optimization until the fields
|
| + } |
| + |
| + SkPaintParts(const SkPaintParts& other) { |
|
mtklein
2014/04/15 14:32:44
Maybe we should just write these two as
// Inten
reed1
2014/04/18 14:04:31
Agreed, will remove these.
|
| + memcpy(this, &other, sizeof(other)); |
| + } |
| + |
| + SkPaintParts& operator=(const SkPaintParts& other) { |
| + memcpy(this, &other, sizeof(other)); |
| + return *this; |
| + } |
| + |
| + bool operator==(const SkPaintParts& other) const; |
| + bool operator!=(const SkPaintParts& other) const { |
| + return !(*this == other); |
| + } |
| + |
| + /** Specifies the bit values that are stored in the paint's flags. |
| + */ |
| + enum Flags { |
|
scroggo
2014/04/15 17:21:07
I'm pretty opposed to having all these enums dupli
|
| + kAntiAlias_Flag = 0x01, //!< mask to enable antialiasing |
|
mtklein
2014/04/15 14:32:44
Can you note if 0x02 available for future use or s
scroggo
2014/04/17 15:27:54
0x02 used to be kFilterBitmap_Flag, and Android tr
reed1
2014/04/18 14:04:31
Will do that also in a diff CL for the current SkP
|
| + kDither_Flag = 0x04, //!< mask to enable dithering |
| + kUnderlineText_Flag = 0x08, //!< mask to enable underline text |
| + kStrikeThruText_Flag = 0x10, //!< mask to enable strike-thru text |
| + kFakeBoldText_Flag = 0x20, //!< mask to enable fake-bold text |
| + kLinearText_Flag = 0x40, //!< mask to enable linear-text |
| + kSubpixelText_Flag = 0x80, //!< mask to enable subpixel text positioning |
| + kDevKernText_Flag = 0x100, //!< mask to enable device kerning text |
| + kLCDRenderText_Flag = 0x200, //!< mask to enable subpixel glyph renderering |
| + kEmbeddedBitmapText_Flag = 0x400, //!< mask to enable embedded bitmap strikes |
| + kAutoHinting_Flag = 0x800, //!< mask to force Freetype's autohinter |
| + kVerticalText_Flag = 0x1000, |
| + kGenA8FromLCD_Flag = 0x2000, // hack for GDI -- do not use if you can help it |
| + kDistanceFieldTextTEMP_Flag = 0x4000, //!< TEMPORARY mask to enable distance fields |
|
mtklein
2014/04/15 14:32:44
Can't hurt to align everyone to the widest =?
|
| + // currently overrides LCD and subpixel rendering |
| + // when adding extra flags, note that the fFlags member is specified |
| + // with a bit-width and you'll have to expand it. |
| + |
| + kAllFlags = 0xFFFF |
| + }; |
| + |
| + uint32_t getFlags() const { return fFlags; } |
| + void setFlags(uint32_t flags); |
| + |
| + enum Hinting { |
| + kNo_Hinting = 0, |
| + kSlight_Hinting = 1, |
| + kNormal_Hinting = 2, //!< this is the default |
|
mtklein
2014/04/15 14:32:44
Doesn't bzero make this comment wrong?
If the ide
|
| + kFull_Hinting = 3 |
| + }; |
| + |
| + Hinting getHinting() const { |
| + return static_cast<Hinting>(fHinting); |
|
mtklein
2014/04/15 14:32:44
Might take the opportunity to make some things con
scroggo
2014/04/15 17:21:07
I vote for C++ style casts.
reed1
2014/04/18 14:04:31
Will do (before committing)
|
| + } |
| + void setHinting(Hinting hinting) { fHinting = hinting; } |
| + |
| + enum Style { |
| + kFill_Style, //!< fill the geometry |
| + kStroke_Style, //!< stroke the geometry |
| + kStrokeAndFill_Style, //!< fill and stroke the geometry |
| + }; |
| + |
| + Style getStyle() const { return (Style)fStyle; } |
| + void setStyle(Style style) { fStyle = style; } |
| + |
| + SkColor getColor() const { return fColor; } |
| + void setColor(SkColor color) { fColor = color; } |
| + |
| + enum TextEncoding { |
| + kUTF8_TextEncoding, //!< the text parameters are UTF8 |
| + kUTF16_TextEncoding, //!< the text parameters are UTF16 |
| + kUTF32_TextEncoding, //!< the text parameters are UTF32 |
| + kGlyphID_TextEncoding //!< the text parameters are glyph indices |
| + }; |
| + |
| + TextEncoding getTextEncoding() const { return (TextEncoding)fTextEncoding; } |
| + void setTextEncoding(TextEncoding encoding); |
| + |
| + enum Align { |
| + kLeft_Align, |
| + kCenter_Align, |
| + kRight_Align, |
| + }; |
| + |
| + Align getTextAlign() const { return (Align)fTextAlign; } |
| + void setTextAlign(Align align) { fTextAlign = align; } |
| + |
| + SkScalar getTextSize() const { return fTextSize; } |
| + void setTextSize(SkScalar size) { fTextSize = size; } |
| + |
| + SkScalar getTextScaleX() const { return fTextScaleX; } |
| + void setTextScaleX(SkScalar scale) { fTextScaleX = scale; } |
| + |
| + SkScalar getTextSkewX() const { return fTextSkewX; } |
| + void setTextSkewX(SkScalar skew) { fTextSkewX = skew; } |
| + |
| + SkScalar getStrokeWidth() const { return fWidth; } |
| + void setStrokeWidth(SkScalar width) { fWidth = width; } |
| + |
| + SkScalar getStrokeMiter() const { return fMiterLimit; } |
| + void setStrokeMiter(SkScalar miter) { fMiterLimit = miter; } |
| + |
| + enum Cap { |
| + kButt_Cap, //!< begin/end contours with no extension |
| + kRound_Cap, //!< begin/end contours with a semi-circle extension |
| + kSquare_Cap, //!< begin/end contours with a half square extension |
| + |
| + kDefault_Cap = kButt_Cap |
| + }; |
| + |
| + Cap getStrokeCap() const { return (Cap)fCapType; } |
| + void setStrokeCap(Cap cap) { fCapType = cap; } |
| + |
| + enum Join { |
| + kMiter_Join, //!< connect path segments with a sharp join |
| + kRound_Join, //!< connect path segments with a round join |
| + kBevel_Join, //!< connect path segments with a flat bevel join |
| + |
| + kDefault_Join = kMiter_Join |
| + }; |
| + |
| + Join getStrokeJoin() const { return (Join)fJoinType; } |
| + void setStrokeJoin(Join join) { fJoinType = join; } |
| + |
| + SkTypeface* fTypeface; |
|
mtklein
2014/04/15 14:32:44
Shall we go whole-hog here and make everything jus
reed1
2014/04/18 14:04:31
This is meant to be our new PUBLIC api. History ha
|
| + SkPathEffect* fPathEffect; |
| + SkShader* fShader; |
| + SkXfermode* fXfermode; |
| + SkMaskFilter* fMaskFilter; |
| + SkColorFilter* fColorFilter; |
| + SkRasterizer* fRasterizer; |
| + SkDrawLooper* fLooper; |
| + SkImageFilter* fImageFilter; |
| + SkAnnotation* fAnnotation; |
| + |
| +private: |
| + friend class SkPaint; |
| + |
| + SkScalar fTextSize; |
| + SkScalar fTextScaleX; |
| + SkScalar fTextSkewX; |
| + SkColor fColor; |
| + SkScalar fWidth; |
| + SkScalar fMiterLimit; |
| + union { |
| + struct { |
| + // all of these bitfields should add up to 32 |
| + unsigned fFlags : 16; |
| + unsigned fTextAlign : 2; |
| + unsigned fCapType : 2; |
| + unsigned fJoinType : 2; |
| + unsigned fStyle : 2; |
| + unsigned fTextEncoding : 2; // 3 values |
| + unsigned fHinting : 2; |
| + //unsigned fFreeBits : 4; |
| + }; |
| + uint32_t fBitfields; |
| + }; |
| +}; |
| + |
| +#endif |