Chromium Code Reviews| 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 #include "SkPaint.h" | 8 #include "SkPaint.h" |
| 9 #include "SkAnnotation.h" | 9 #include "SkAnnotation.h" |
| 10 #include "SkAutoKern.h" | 10 #include "SkAutoKern.h" |
| (...skipping 1755 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1766 SkSafeUnref(gMaskGamma); | 1766 SkSafeUnref(gMaskGamma); |
| 1767 gMaskGamma = NULL; | 1767 gMaskGamma = NULL; |
| 1768 SkDEBUGCODE(gContrast = SK_ScalarMin;) | 1768 SkDEBUGCODE(gContrast = SK_ScalarMin;) |
| 1769 SkDEBUGCODE(gPaintGamma = SK_ScalarMin;) | 1769 SkDEBUGCODE(gPaintGamma = SK_ScalarMin;) |
| 1770 SkDEBUGCODE(gDeviceGamma = SK_ScalarMin;) | 1770 SkDEBUGCODE(gDeviceGamma = SK_ScalarMin;) |
| 1771 } | 1771 } |
| 1772 | 1772 |
| 1773 /** | 1773 /** |
| 1774 * We ensure that the rec is self-consistent and efficient (where possible) | 1774 * We ensure that the rec is self-consistent and efficient (where possible) |
| 1775 */ | 1775 */ |
| 1776 void SkScalerContext::PostMakeRec(const SkPaint&, SkScalerContext::Rec* rec) { | 1776 void SkScalerContext::PostMakeRec(const SkPaint& paint, SkScalerContext::Rec* re c) { |
| 1777 /** | 1777 /** |
| 1778 * If we're asking for A8, we force the colorlum to be gray, since that | 1778 * If we're asking for A8, we force the colorlum to be gray, since that |
| 1779 * limits the number of unique entries, and the scaler will only look at | 1779 * limits the number of unique entries, and the scaler will only look at |
| 1780 * the lum of one of them. | 1780 * the lum of one of them. |
| 1781 */ | 1781 */ |
| 1782 switch (rec->fMaskFormat) { | 1782 switch (rec->fMaskFormat) { |
| 1783 case SkMask::kLCD16_Format: | 1783 case SkMask::kLCD16_Format: |
| 1784 case SkMask::kLCD32_Format: { | 1784 case SkMask::kLCD32_Format: { |
| 1785 // filter down the luminance color to a finite number of bits | 1785 // filter down the luminance color to a finite number of bits |
| 1786 SkColor color = rec->getLuminanceColor(); | 1786 SkColor color = rec->getLuminanceColor(); |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 1802 // reduce to our finite number of bits | 1802 // reduce to our finite number of bits |
| 1803 color = SkColorSetRGB(lum, lum, lum); | 1803 color = SkColorSetRGB(lum, lum, lum); |
| 1804 rec->setLuminanceColor(SkMaskGamma::CanonicalColor(color)); | 1804 rec->setLuminanceColor(SkMaskGamma::CanonicalColor(color)); |
| 1805 break; | 1805 break; |
| 1806 } | 1806 } |
| 1807 case SkMask::kBW_Format: | 1807 case SkMask::kBW_Format: |
| 1808 // No need to differentiate gamma if we're BW | 1808 // No need to differentiate gamma if we're BW |
| 1809 rec->ignorePreBlend(); | 1809 rec->ignorePreBlend(); |
| 1810 break; | 1810 break; |
| 1811 } | 1811 } |
| 1812 | |
| 1813 /** | |
| 1814 * If we're using distance fields we need to reset the rec to default value s | |
| 1815 */ | |
| 1816 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
| |
| 1817 rec->ignorePreBlend(); | |
| 1818 | |
| 1819 rec->fFlags |= SkScalerContext::kSubpixelPositioning_Flag; | |
| 1820 rec->fFlags &= ~SkScalerContext::kForceAutohinting_Flag; | |
| 1821 | |
| 1822 if (SkMask::kLCD16_Format == rec->fMaskFormat || | |
| 1823 SkMask::kLCD32_Format == rec->fMaskFormat) { | |
| 1824 rec->fMaskFormat = SkMask::kA8_Format; | |
| 1825 } | |
| 1826 rec->setHinting(SkPaint::kNo_Hinting); | |
| 1827 } | |
| 1828 | |
| 1812 } | 1829 } |
| 1813 | 1830 |
| 1814 #define MIN_SIZE_FOR_EFFECT_BUFFER 1024 | 1831 #define MIN_SIZE_FOR_EFFECT_BUFFER 1024 |
| 1815 | 1832 |
| 1816 #ifdef SK_DEBUG | 1833 #ifdef SK_DEBUG |
| 1817 #define TEST_DESC | 1834 #define TEST_DESC |
| 1818 #endif | 1835 #endif |
| 1819 | 1836 |
| 1820 /* | 1837 /* |
| 1821 * ignoreGamma tells us that the caller just wants metrics that are unaffected | 1838 * ignoreGamma tells us that the caller just wants metrics that are unaffected |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1967 */ | 1984 */ |
| 1968 //static | 1985 //static |
| 1969 SkMaskGamma::PreBlend SkScalerContext::GetMaskPreBlend(const SkScalerContext::Re c& rec) { | 1986 SkMaskGamma::PreBlend SkScalerContext::GetMaskPreBlend(const SkScalerContext::Re c& rec) { |
| 1970 SkAutoMutexAcquire ama(gMaskGammaCacheMutex); | 1987 SkAutoMutexAcquire ama(gMaskGammaCacheMutex); |
| 1971 const SkMaskGamma& maskGamma = cachedMaskGamma(rec.getContrast(), | 1988 const SkMaskGamma& maskGamma = cachedMaskGamma(rec.getContrast(), |
| 1972 rec.getPaintGamma(), | 1989 rec.getPaintGamma(), |
| 1973 rec.getDeviceGamma()); | 1990 rec.getDeviceGamma()); |
| 1974 return maskGamma.preBlend(rec.getLuminanceColor()); | 1991 return maskGamma.preBlend(rec.getLuminanceColor()); |
| 1975 } | 1992 } |
| 1976 | 1993 |
| 1994 size_t SkScalerContext::getGammaLUTSize(SkScalar contrast, SkScalar paintGamma, | |
| 1995 SkScalar deviceGamma, int* width, int* h eight) { | |
| 1996 SkAutoMutexAcquire ama(gMaskGammaCacheMutex); | |
| 1997 const SkMaskGamma& maskGamma = cachedMaskGamma(contrast, | |
| 1998 paintGamma, | |
| 1999 deviceGamma); | |
| 2000 | |
| 2001 maskGamma.getGammaTableDimensions(width, height); | |
| 2002 size_t size = (*width)*(*height)*sizeof(uint8_t); | |
| 2003 | |
| 2004 return size; | |
| 2005 } | |
| 2006 | |
| 2007 void SkScalerContext::getGammaLUTData(SkScalar contrast, SkScalar paintGamma, Sk Scalar deviceGamma, | |
| 2008 void* data) { | |
| 2009 SkAutoMutexAcquire ama(gMaskGammaCacheMutex); | |
| 2010 const SkMaskGamma& maskGamma = cachedMaskGamma(contrast, | |
| 2011 paintGamma, | |
| 2012 deviceGamma); | |
| 2013 int width, height; | |
| 2014 maskGamma.getGammaTableDimensions(&width, &height); | |
| 2015 size_t size = width*height*sizeof(uint8_t); | |
| 2016 const uint8_t* gammaTables = maskGamma.getGammaTables(); | |
| 2017 memcpy(data, gammaTables, size); | |
| 2018 } | |
| 2019 | |
| 2020 | |
| 1977 /////////////////////////////////////////////////////////////////////////////// | 2021 /////////////////////////////////////////////////////////////////////////////// |
| 1978 | 2022 |
| 1979 #include "SkStream.h" | 2023 #include "SkStream.h" |
| 1980 | 2024 |
| 1981 static uintptr_t asint(const void* p) { | 2025 static uintptr_t asint(const void* p) { |
| 1982 return reinterpret_cast<uintptr_t>(p); | 2026 return reinterpret_cast<uintptr_t>(p); |
| 1983 } | 2027 } |
| 1984 | 2028 |
| 1985 union Scalar32 { | 2029 union Scalar32 { |
| 1986 SkScalar fScalar; | 2030 SkScalar fScalar; |
| (...skipping 747 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2734 } | 2778 } |
| 2735 #ifdef SK_BUILD_FOR_ANDROID | 2779 #ifdef SK_BUILD_FOR_ANDROID |
| 2736 if (dirty & kPaintOptionsAndroid_DirtyBit) { | 2780 if (dirty & kPaintOptionsAndroid_DirtyBit) { |
| 2737 SkPaintOptionsAndroid options; | 2781 SkPaintOptionsAndroid options; |
| 2738 options.unflatten(buffer); | 2782 options.unflatten(buffer); |
| 2739 paint->setPaintOptionsAndroid(options); | 2783 paint->setPaintOptionsAndroid(options); |
| 2740 } | 2784 } |
| 2741 #endif | 2785 #endif |
| 2742 SkASSERT(dirty == paint->fDirtyBits); | 2786 SkASSERT(dirty == paint->fDirtyBits); |
| 2743 } | 2787 } |
| OLD | NEW |