OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2006 The Android Open Source Project | 2 * Copyright 2006 The Android Open Source Project |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #ifndef SkPaint_DEFINED | 8 #ifndef SkPaint_DEFINED |
9 #define SkPaint_DEFINED | 9 #define SkPaint_DEFINED |
10 | 10 |
| 11 #include "SkBlendMode.h" |
11 #include "SkColor.h" | 12 #include "SkColor.h" |
12 #include "SkFilterQuality.h" | 13 #include "SkFilterQuality.h" |
13 #include "SkMatrix.h" | 14 #include "SkMatrix.h" |
14 #include "SkXfermode.h" | 15 #include "SkXfermode.h" |
15 | 16 |
| 17 //#define SK_SUPPORT_LEGACY_XFERMODE_OBJECT |
| 18 |
16 class SkAutoDescriptor; | 19 class SkAutoDescriptor; |
17 class SkAutoGlyphCache; | 20 class SkAutoGlyphCache; |
18 class SkColorFilter; | 21 class SkColorFilter; |
19 class SkData; | 22 class SkData; |
20 class SkDescriptor; | 23 class SkDescriptor; |
21 class SkDrawLooper; | 24 class SkDrawLooper; |
22 class SkReadBuffer; | 25 class SkReadBuffer; |
23 class SkWriteBuffer; | 26 class SkWriteBuffer; |
24 class SkGlyph; | 27 class SkGlyph; |
25 struct SkRect; | 28 struct SkRect; |
(...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
518 If the paint already has a filter, its reference count is decremented. | 521 If the paint already has a filter, its reference count is decremented. |
519 If filter is not NULL, its reference count is incremented. | 522 If filter is not NULL, its reference count is incremented. |
520 @param filter May be NULL. The filter to be installed in the paint | 523 @param filter May be NULL. The filter to be installed in the paint |
521 @return filter | 524 @return filter |
522 */ | 525 */ |
523 #ifdef SK_SUPPORT_LEGACY_COLORFILTER_PTR | 526 #ifdef SK_SUPPORT_LEGACY_COLORFILTER_PTR |
524 SkColorFilter* setColorFilter(SkColorFilter* filter); | 527 SkColorFilter* setColorFilter(SkColorFilter* filter); |
525 #endif | 528 #endif |
526 void setColorFilter(sk_sp<SkColorFilter>); | 529 void setColorFilter(sk_sp<SkColorFilter>); |
527 | 530 |
| 531 #ifdef SK_SUPPORT_LEGACY_XFERMODE_OBJECT |
528 /** Get the paint's xfermode object. | 532 /** Get the paint's xfermode object. |
529 <p /> | 533 <p /> |
530 The xfermode's reference count is not affected. | 534 The xfermode's reference count is not affected. |
531 @return the paint's xfermode (or NULL) | 535 @return the paint's xfermode (or NULL) |
532 */ | 536 */ |
533 SkXfermode* getXfermode() const { return fXfermode.get(); } | 537 SkXfermode* getXfermode() const; |
534 | 538 |
535 /** Set or clear the xfermode object. | 539 /** Set or clear the xfermode object. |
536 <p /> | 540 <p /> |
537 Pass NULL to clear any previous xfermode. | 541 Pass NULL to clear any previous xfermode. |
538 As a convenience, the parameter passed is also returned. | 542 As a convenience, the parameter passed is also returned. |
539 If a previous xfermode exists, its reference count is decremented. | 543 If a previous xfermode exists, its reference count is decremented. |
540 If xfermode is not NULL, its reference count is incremented. | 544 If xfermode is not NULL, its reference count is incremented. |
541 @param xfermode May be NULL. The new xfermode to be installed in the | 545 @param xfermode May be NULL. The new xfermode to be installed in the |
542 paint | 546 paint |
543 @return xfermode | 547 @return xfermode |
544 */ | 548 */ |
545 void setXfermode(sk_sp<SkXfermode>); | 549 void setXfermode(sk_sp<SkXfermode>); |
546 #ifdef SK_SUPPORT_LEGACY_XFERMODE_PTR | 550 #ifdef SK_SUPPORT_LEGACY_XFERMODE_PTR |
547 SkXfermode* setXfermode(SkXfermode* xfermode); | 551 SkXfermode* setXfermode(SkXfermode* xfermode); |
548 #endif | 552 #endif |
549 | 553 |
550 /** Create an xfermode based on the specified Mode, and assign it into the | 554 /** Create an xfermode based on the specified Mode, and assign it into the |
551 paint, returning the mode that was set. If the Mode is SrcOver, then | 555 paint, returning the mode that was set. If the Mode is SrcOver, then |
552 the paint's xfermode is set to null. | 556 the paint's xfermode is set to null. |
553 */ | 557 */ |
554 SkXfermode* setXfermodeMode(SkXfermode::Mode); | 558 SkXfermode* setXfermodeMode(SkXfermode::Mode); |
| 559 #endif |
| 560 |
| 561 SkBlendMode getBlendMode() const { return (SkBlendMode)fBlendMode; } |
| 562 bool isSrcOver() const { return (SkBlendMode)fBlendMode == SkBlendMode::kSrc
Over; } |
| 563 void setBlendMode(SkBlendMode mode) { fBlendMode = (unsigned)mode; } |
555 | 564 |
556 /** Get the paint's patheffect object. | 565 /** Get the paint's patheffect object. |
557 <p /> | 566 <p /> |
558 The patheffect reference count is not affected. | 567 The patheffect reference count is not affected. |
559 @return the paint's patheffect (or NULL) | 568 @return the paint's patheffect (or NULL) |
560 */ | 569 */ |
561 SkPathEffect* getPathEffect() const { return fPathEffect.get(); } | 570 SkPathEffect* getPathEffect() const { return fPathEffect.get(); } |
562 | 571 |
563 /** Set or clear the patheffect object. | 572 /** Set or clear the patheffect object. |
564 <p /> | 573 <p /> |
(...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1083 } | 1092 } |
1084 | 1093 |
1085 typedef const SkGlyph& (*GlyphCacheProc)(SkGlyphCache*, const char**); | 1094 typedef const SkGlyph& (*GlyphCacheProc)(SkGlyphCache*, const char**); |
1086 | 1095 |
1087 SK_TO_STRING_NONVIRT() | 1096 SK_TO_STRING_NONVIRT() |
1088 | 1097 |
1089 private: | 1098 private: |
1090 sk_sp<SkTypeface> fTypeface; | 1099 sk_sp<SkTypeface> fTypeface; |
1091 sk_sp<SkPathEffect> fPathEffect; | 1100 sk_sp<SkPathEffect> fPathEffect; |
1092 sk_sp<SkShader> fShader; | 1101 sk_sp<SkShader> fShader; |
1093 sk_sp<SkXfermode> fXfermode; | |
1094 sk_sp<SkMaskFilter> fMaskFilter; | 1102 sk_sp<SkMaskFilter> fMaskFilter; |
1095 sk_sp<SkColorFilter> fColorFilter; | 1103 sk_sp<SkColorFilter> fColorFilter; |
1096 sk_sp<SkRasterizer> fRasterizer; | 1104 sk_sp<SkRasterizer> fRasterizer; |
1097 sk_sp<SkDrawLooper> fDrawLooper; | 1105 sk_sp<SkDrawLooper> fDrawLooper; |
1098 sk_sp<SkImageFilter> fImageFilter; | 1106 sk_sp<SkImageFilter> fImageFilter; |
1099 | 1107 |
1100 SkScalar fTextSize; | 1108 SkScalar fTextSize; |
1101 SkScalar fTextScaleX; | 1109 SkScalar fTextScaleX; |
1102 SkScalar fTextSkewX; | 1110 SkScalar fTextSkewX; |
1103 SkColor fColor; | 1111 SkColor fColor; |
1104 SkScalar fWidth; | 1112 SkScalar fWidth; |
1105 SkScalar fMiterLimit; | 1113 SkScalar fMiterLimit; |
| 1114 uint32_t fBlendMode; // just need 5-6 bits for SkXfermode::Mode |
1106 union { | 1115 union { |
1107 struct { | 1116 struct { |
1108 // all of these bitfields should add up to 32 | 1117 // all of these bitfields should add up to 32 |
1109 unsigned fFlags : 16; | 1118 unsigned fFlags : 16; |
1110 unsigned fTextAlign : 2; | 1119 unsigned fTextAlign : 2; |
1111 unsigned fCapType : 2; | 1120 unsigned fCapType : 2; |
1112 unsigned fJoinType : 2; | 1121 unsigned fJoinType : 2; |
1113 unsigned fStyle : 2; | 1122 unsigned fStyle : 2; |
1114 unsigned fTextEncoding : 2; // 3 values | 1123 unsigned fTextEncoding : 2; // 3 values |
1115 unsigned fHinting : 2; | 1124 unsigned fHinting : 2; |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1208 friend class GrStencilAndCoverTextContext; | 1217 friend class GrStencilAndCoverTextContext; |
1209 friend class GrPathRendering; | 1218 friend class GrPathRendering; |
1210 friend class GrTextUtils; | 1219 friend class GrTextUtils; |
1211 friend class GrGLPathRendering; | 1220 friend class GrGLPathRendering; |
1212 friend class SkScalerContext; | 1221 friend class SkScalerContext; |
1213 friend class SkTextBaseIter; | 1222 friend class SkTextBaseIter; |
1214 friend class SkCanonicalizePaint; | 1223 friend class SkCanonicalizePaint; |
1215 }; | 1224 }; |
1216 | 1225 |
1217 #endif | 1226 #endif |
OLD | NEW |