Chromium Code Reviews| Index: src/core/SkPaint.cpp |
| diff --git a/src/core/SkPaint.cpp b/src/core/SkPaint.cpp |
| index f3bf01bfafc5ca30e0507190a8ffee37f8a5efaa..c77ab8a876ca15a610306528cf9691d139e61102 100644 |
| --- a/src/core/SkPaint.cpp |
| +++ b/src/core/SkPaint.cpp |
| @@ -1773,7 +1773,7 @@ static const SkMaskGamma& cachedMaskGamma(SkScalar contrast, SkScalar paintGamma |
| /** |
| * We ensure that the rec is self-consistent and efficient (where possible) |
| */ |
| -void SkScalerContext::PostMakeRec(const SkPaint&, SkScalerContext::Rec* rec) { |
| +void SkScalerContext::PostMakeRec(const SkPaint& paint, SkScalerContext::Rec* rec) { |
| /** |
| * If we're asking for A8, we force the colorlum to be gray, since that |
| * limits the number of unique entries, and the scaler will only look at |
| @@ -1809,6 +1809,23 @@ void SkScalerContext::PostMakeRec(const SkPaint&, SkScalerContext::Rec* rec) { |
| rec->ignorePreBlend(); |
| break; |
| } |
| + |
| + /** |
| + * If we're using distance fields we need to reset the rec to default values |
| + */ |
| + if (paint.isDistanceFieldTextTEMP()) { |
|
reed1
2014/06/03 19:46:44
What is the expected lifespan of this TEMP flag?
jvanverth1
2014/06/05 18:18:23
I don't know. Though I just realized a problem wit
jvanverth1
2014/06/06 15:34:44
Done. I was not able to use the DeviceProperties b
|
| + rec->ignorePreBlend(); |
| + |
| + rec->fFlags |= SkScalerContext::kSubpixelPositioning_Flag; |
| + rec->fFlags &= ~SkScalerContext::kForceAutohinting_Flag; |
| + |
| + if (SkMask::kLCD16_Format == rec->fMaskFormat || |
| + SkMask::kLCD32_Format == rec->fMaskFormat) { |
| + rec->fMaskFormat = SkMask::kA8_Format; |
| + } |
| + rec->setHinting(SkPaint::kNo_Hinting); |
| + } |
| + |
| } |
| #define MIN_SIZE_FOR_EFFECT_BUFFER 1024 |
| @@ -1974,6 +1991,33 @@ SkMaskGamma::PreBlend SkScalerContext::GetMaskPreBlend(const SkScalerContext::Re |
| return maskGamma.preBlend(rec.getLuminanceColor()); |
| } |
| +size_t SkScalerContext::getGammaLUTSize(SkScalar contrast, SkScalar paintGamma, |
| + SkScalar deviceGamma, int* width, int* height) { |
| + SkAutoMutexAcquire ama(gMaskGammaCacheMutex); |
| + const SkMaskGamma& maskGamma = cachedMaskGamma(contrast, |
| + paintGamma, |
| + deviceGamma); |
| + |
| + maskGamma.getGammaTableDimensions(width, height); |
| + size_t size = (*width)*(*height)*sizeof(uint8_t); |
| + |
| + return size; |
| +} |
| + |
| +void SkScalerContext::getGammaLUTData(SkScalar contrast, SkScalar paintGamma, SkScalar deviceGamma, |
| + void* data) { |
| + SkAutoMutexAcquire ama(gMaskGammaCacheMutex); |
| + const SkMaskGamma& maskGamma = cachedMaskGamma(contrast, |
| + paintGamma, |
| + deviceGamma); |
| + int width, height; |
| + maskGamma.getGammaTableDimensions(&width, &height); |
| + size_t size = width*height*sizeof(uint8_t); |
| + const uint8_t* gammaTables = maskGamma.getGammaTables(); |
| + memcpy(data, gammaTables, size); |
| +} |
| + |
| + |
| /////////////////////////////////////////////////////////////////////////////// |
| #include "SkStream.h" |