| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 #include "SkPaint.h" | 9 #include "SkPaint.h" |
| 10 #include "SkAnnotation.h" | 10 #include "SkAnnotation.h" |
| 11 #include "SkAutoKern.h" | 11 #include "SkAutoKern.h" |
| 12 #include "SkColorFilter.h" | 12 #include "SkColorFilter.h" |
| 13 #include "SkData.h" | 13 #include "SkData.h" |
| 14 #include "SkDeviceProperties.h" | 14 #include "SkDeviceProperties.h" |
| 15 #include "SkFontDescriptor.h" | 15 #include "SkFontDescriptor.h" |
| 16 #include "SkFontHost.h" | 16 #include "SkFontHost.h" |
| 17 #include "SkGlyphCache.h" | 17 #include "SkGlyphCache.h" |
| 18 #include "SkImageFilter.h" | 18 #include "SkImageFilter.h" |
| 19 #include "SkMaskFilter.h" | 19 #include "SkMaskFilter.h" |
| 20 #include "SkMaskGamma.h" | 20 #include "SkMaskGamma.h" |
| 21 #include "SkOrderedReadBuffer.h" | 21 #include "SkReadBuffer.h" |
| 22 #include "SkOrderedWriteBuffer.h" | 22 #include "SkWriteBuffer.h" |
| 23 #include "SkPaintDefaults.h" | 23 #include "SkPaintDefaults.h" |
| 24 #include "SkPaintOptionsAndroid.h" | 24 #include "SkPaintOptionsAndroid.h" |
| 25 #include "SkPathEffect.h" | 25 #include "SkPathEffect.h" |
| 26 #include "SkRasterizer.h" | 26 #include "SkRasterizer.h" |
| 27 #include "SkScalar.h" | 27 #include "SkScalar.h" |
| 28 #include "SkScalerContext.h" | 28 #include "SkScalerContext.h" |
| 29 #include "SkShader.h" | 29 #include "SkShader.h" |
| 30 #include "SkStringUtils.h" | 30 #include "SkStringUtils.h" |
| 31 #include "SkStroke.h" | 31 #include "SkStroke.h" |
| 32 #include "SkTextFormatParams.h" | 32 #include "SkTextFormatParams.h" |
| (...skipping 1434 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1467 matrix.postTranslate(pos[i].fX - prevPos.fX, pos[i].fY - prevPos.fY); | 1467 matrix.postTranslate(pos[i].fX - prevPos.fX, pos[i].fY - prevPos.fY); |
| 1468 if (iterPath) { | 1468 if (iterPath) { |
| 1469 path->addPath(*iterPath, matrix); | 1469 path->addPath(*iterPath, matrix); |
| 1470 } | 1470 } |
| 1471 prevPos = pos[i]; | 1471 prevPos = pos[i]; |
| 1472 i++; | 1472 i++; |
| 1473 } | 1473 } |
| 1474 } | 1474 } |
| 1475 | 1475 |
| 1476 static void add_flattenable(SkDescriptor* desc, uint32_t tag, | 1476 static void add_flattenable(SkDescriptor* desc, uint32_t tag, |
| 1477 SkOrderedWriteBuffer* buffer) { | 1477 SkWriteBuffer* buffer) { |
| 1478 buffer->writeToMemory(desc->addEntry(tag, buffer->size(), NULL)); | 1478 buffer->writeToMemory(desc->addEntry(tag, buffer->bytesWritten(), NULL)); |
| 1479 } | 1479 } |
| 1480 | 1480 |
| 1481 // SkFontHost can override this choice in FilterRec() | 1481 // SkFontHost can override this choice in FilterRec() |
| 1482 static SkMask::Format computeMaskFormat(const SkPaint& paint) { | 1482 static SkMask::Format computeMaskFormat(const SkPaint& paint) { |
| 1483 uint32_t flags = paint.getFlags(); | 1483 uint32_t flags = paint.getFlags(); |
| 1484 | 1484 |
| 1485 // Antialiasing being disabled trumps all other settings. | 1485 // Antialiasing being disabled trumps all other settings. |
| 1486 if (!(flags & SkPaint::kAntiAlias_Flag)) { | 1486 if (!(flags & SkPaint::kAntiAlias_Flag)) { |
| 1487 return SkMask::kBW_Format; | 1487 return SkMask::kBW_Format; |
| 1488 } | 1488 } |
| (...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1808 if (ignoreGamma) { | 1808 if (ignoreGamma) { |
| 1809 rec.setLuminanceColor(0); | 1809 rec.setLuminanceColor(0); |
| 1810 } | 1810 } |
| 1811 | 1811 |
| 1812 size_t descSize = sizeof(rec); | 1812 size_t descSize = sizeof(rec); |
| 1813 int entryCount = 1; | 1813 int entryCount = 1; |
| 1814 SkPathEffect* pe = this->getPathEffect(); | 1814 SkPathEffect* pe = this->getPathEffect(); |
| 1815 SkMaskFilter* mf = this->getMaskFilter(); | 1815 SkMaskFilter* mf = this->getMaskFilter(); |
| 1816 SkRasterizer* ra = this->getRasterizer(); | 1816 SkRasterizer* ra = this->getRasterizer(); |
| 1817 | 1817 |
| 1818 SkOrderedWriteBuffer peBuffer, mfBuffer, raBuffer; | 1818 SkWriteBuffer peBuffer, mfBuffer, raBuffer; |
| 1819 | 1819 |
| 1820 if (pe) { | 1820 if (pe) { |
| 1821 peBuffer.writeFlattenable(pe); | 1821 peBuffer.writeFlattenable(pe); |
| 1822 descSize += peBuffer.size(); | 1822 descSize += peBuffer.bytesWritten(); |
| 1823 entryCount += 1; | 1823 entryCount += 1; |
| 1824 rec.fMaskFormat = SkMask::kA8_Format; // force antialiasing when we do
the scan conversion | 1824 rec.fMaskFormat = SkMask::kA8_Format; // force antialiasing when we do
the scan conversion |
| 1825 // seems like we could support kLCD as well at this point... | 1825 // seems like we could support kLCD as well at this point... |
| 1826 } | 1826 } |
| 1827 if (mf) { | 1827 if (mf) { |
| 1828 mfBuffer.writeFlattenable(mf); | 1828 mfBuffer.writeFlattenable(mf); |
| 1829 descSize += mfBuffer.size(); | 1829 descSize += mfBuffer.bytesWritten(); |
| 1830 entryCount += 1; | 1830 entryCount += 1; |
| 1831 rec.fMaskFormat = SkMask::kA8_Format; // force antialiasing with maskf
ilters | 1831 rec.fMaskFormat = SkMask::kA8_Format; // force antialiasing with maskf
ilters |
| 1832 /* Pre-blend is not currently applied to filtered text. | 1832 /* Pre-blend is not currently applied to filtered text. |
| 1833 The primary filter is blur, for which contrast makes no sense, | 1833 The primary filter is blur, for which contrast makes no sense, |
| 1834 and for which the destination guess error is more visible. | 1834 and for which the destination guess error is more visible. |
| 1835 Also, all existing users of blur have calibrated for linear. */ | 1835 Also, all existing users of blur have calibrated for linear. */ |
| 1836 rec.ignorePreBlend(); | 1836 rec.ignorePreBlend(); |
| 1837 } | 1837 } |
| 1838 if (ra) { | 1838 if (ra) { |
| 1839 raBuffer.writeFlattenable(ra); | 1839 raBuffer.writeFlattenable(ra); |
| 1840 descSize += raBuffer.size(); | 1840 descSize += raBuffer.bytesWritten(); |
| 1841 entryCount += 1; | 1841 entryCount += 1; |
| 1842 rec.fMaskFormat = SkMask::kA8_Format; // force antialiasing when we do
the scan conversion | 1842 rec.fMaskFormat = SkMask::kA8_Format; // force antialiasing when we do
the scan conversion |
| 1843 } | 1843 } |
| 1844 | 1844 |
| 1845 #ifdef SK_BUILD_FOR_ANDROID | 1845 #ifdef SK_BUILD_FOR_ANDROID |
| 1846 SkOrderedWriteBuffer androidBuffer; | 1846 SkWriteBuffer androidBuffer; |
| 1847 fPaintOptionsAndroid.flatten(androidBuffer); | 1847 fPaintOptionsAndroid.flatten(androidBuffer); |
| 1848 descSize += androidBuffer.size(); | 1848 descSize += androidBuffer.bytesWritten(); |
| 1849 entryCount += 1; | 1849 entryCount += 1; |
| 1850 #endif | 1850 #endif |
| 1851 | 1851 |
| 1852 /////////////////////////////////////////////////////////////////////////// | 1852 /////////////////////////////////////////////////////////////////////////// |
| 1853 // Now that we're done tweaking the rec, call the PostMakeRec cleanup | 1853 // Now that we're done tweaking the rec, call the PostMakeRec cleanup |
| 1854 SkScalerContext::PostMakeRec(*this, &rec); | 1854 SkScalerContext::PostMakeRec(*this, &rec); |
| 1855 | 1855 |
| 1856 descSize += SkDescriptor::ComputeOverhead(entryCount); | 1856 descSize += SkDescriptor::ComputeOverhead(entryCount); |
| 1857 | 1857 |
| 1858 SkAutoDescriptor ad(descSize); | 1858 SkAutoDescriptor ad(descSize); |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1992 | 1992 |
| 1993 // The size of a flat paint's POD fields | 1993 // The size of a flat paint's POD fields |
| 1994 static const uint32_t kPODPaintSize = 5 * sizeof(SkScalar) + | 1994 static const uint32_t kPODPaintSize = 5 * sizeof(SkScalar) + |
| 1995 1 * sizeof(SkColor) + | 1995 1 * sizeof(SkColor) + |
| 1996 1 * sizeof(uint16_t) + | 1996 1 * sizeof(uint16_t) + |
| 1997 6 * sizeof(uint8_t); | 1997 6 * sizeof(uint8_t); |
| 1998 | 1998 |
| 1999 /* To save space/time, we analyze the paint, and write a truncated version of | 1999 /* To save space/time, we analyze the paint, and write a truncated version of |
| 2000 it if there are not tricky elements like shaders, etc. | 2000 it if there are not tricky elements like shaders, etc. |
| 2001 */ | 2001 */ |
| 2002 void SkPaint::flatten(SkFlattenableWriteBuffer& buffer) const { | 2002 void SkPaint::flatten(SkWriteBuffer& buffer) const { |
| 2003 uint8_t flatFlags = 0; | 2003 uint8_t flatFlags = 0; |
| 2004 if (this->getTypeface()) { | 2004 if (this->getTypeface()) { |
| 2005 flatFlags |= kHasTypeface_FlatFlag; | 2005 flatFlags |= kHasTypeface_FlatFlag; |
| 2006 } | 2006 } |
| 2007 if (asint(this->getPathEffect()) | | 2007 if (asint(this->getPathEffect()) | |
| 2008 asint(this->getShader()) | | 2008 asint(this->getShader()) | |
| 2009 asint(this->getXfermode()) | | 2009 asint(this->getXfermode()) | |
| 2010 asint(this->getMaskFilter()) | | 2010 asint(this->getMaskFilter()) | |
| 2011 asint(this->getColorFilter()) | | 2011 asint(this->getColorFilter()) | |
| 2012 asint(this->getRasterizer()) | | 2012 asint(this->getRasterizer()) | |
| 2013 asint(this->getLooper()) | | 2013 asint(this->getLooper()) | |
| 2014 asint(this->getAnnotation()) | | 2014 asint(this->getAnnotation()) | |
| 2015 asint(this->getImageFilter())) { | 2015 asint(this->getImageFilter())) { |
| 2016 flatFlags |= kHasEffects_FlatFlag; | 2016 flatFlags |= kHasEffects_FlatFlag; |
| 2017 } | 2017 } |
| 2018 #ifdef SK_BUILD_FOR_ANDROID | 2018 #ifdef SK_BUILD_FOR_ANDROID |
| 2019 if (this->getPaintOptionsAndroid() != SkPaintOptionsAndroid()) { | 2019 if (this->getPaintOptionsAndroid() != SkPaintOptionsAndroid()) { |
| 2020 flatFlags |= kHasNonDefaultPaintOptionsAndroid_FlatFlag; | 2020 flatFlags |= kHasNonDefaultPaintOptionsAndroid_FlatFlag; |
| 2021 } | 2021 } |
| 2022 #endif | 2022 #endif |
| 2023 | 2023 |
| 2024 if (buffer.isOrderedBinaryBuffer()) { | 2024 SkASSERT(SkAlign4(kPODPaintSize) == kPODPaintSize); |
| 2025 SkASSERT(SkAlign4(kPODPaintSize) == kPODPaintSize); | 2025 uint32_t* ptr = buffer.reserve(kPODPaintSize); |
| 2026 uint32_t* ptr = buffer.getOrderedBinaryBuffer()->reserve(kPODPaintSize); | |
| 2027 | 2026 |
| 2028 ptr = write_scalar(ptr, this->getTextSize()); | 2027 ptr = write_scalar(ptr, this->getTextSize()); |
| 2029 ptr = write_scalar(ptr, this->getTextScaleX()); | 2028 ptr = write_scalar(ptr, this->getTextScaleX()); |
| 2030 ptr = write_scalar(ptr, this->getTextSkewX()); | 2029 ptr = write_scalar(ptr, this->getTextSkewX()); |
| 2031 ptr = write_scalar(ptr, this->getStrokeWidth()); | 2030 ptr = write_scalar(ptr, this->getStrokeWidth()); |
| 2032 ptr = write_scalar(ptr, this->getStrokeMiter()); | 2031 ptr = write_scalar(ptr, this->getStrokeMiter()); |
| 2033 *ptr++ = this->getColor(); | 2032 *ptr++ = this->getColor(); |
| 2034 // previously flags:16, textAlign:8, flatFlags:8 | 2033 // previously flags:16, textAlign:8, flatFlags:8 |
| 2035 // now flags:16, hinting:4, textAlign:4, flatFlags:8 | 2034 // now flags:16, hinting:4, textAlign:4, flatFlags:8 |
| 2036 *ptr++ = (this->getFlags() << 16) | | 2035 *ptr++ = (this->getFlags() << 16) | |
| 2037 // hinting added later. 0 in this nibble means use the default. | 2036 // hinting added later. 0 in this nibble means use the default. |
| 2038 ((this->getHinting()+1) << 12) | | 2037 ((this->getHinting()+1) << 12) | |
| 2039 (this->getTextAlign() << 8) | | 2038 (this->getTextAlign() << 8) | |
| 2040 flatFlags; | 2039 flatFlags; |
| 2041 *ptr++ = pack_4(this->getStrokeCap(), this->getStrokeJoin(), | 2040 *ptr++ = pack_4(this->getStrokeCap(), this->getStrokeJoin(), |
| 2042 this->getStyle(), this->getTextEncoding()); | 2041 this->getStyle(), this->getTextEncoding()); |
| 2043 } else { | |
| 2044 buffer.writeScalar(fTextSize); | |
| 2045 buffer.writeScalar(fTextScaleX); | |
| 2046 buffer.writeScalar(fTextSkewX); | |
| 2047 buffer.writeScalar(fWidth); | |
| 2048 buffer.writeScalar(fMiterLimit); | |
| 2049 buffer.writeColor(fColor); | |
| 2050 buffer.writeUInt(fFlags); | |
| 2051 buffer.writeUInt(fHinting); | |
| 2052 buffer.writeUInt(fTextAlign); | |
| 2053 buffer.writeUInt(flatFlags); | |
| 2054 | |
| 2055 buffer.writeUInt(fCapType); | |
| 2056 buffer.writeUInt(fJoinType); | |
| 2057 buffer.writeUInt(fStyle); | |
| 2058 buffer.writeUInt(fTextEncoding); | |
| 2059 } | |
| 2060 | 2042 |
| 2061 // now we're done with ptr and the (pre)reserved space. If we need to write | 2043 // now we're done with ptr and the (pre)reserved space. If we need to write |
| 2062 // additional fields, use the buffer directly | 2044 // additional fields, use the buffer directly |
| 2063 if (flatFlags & kHasTypeface_FlatFlag) { | 2045 if (flatFlags & kHasTypeface_FlatFlag) { |
| 2064 buffer.writeTypeface(this->getTypeface()); | 2046 buffer.writeTypeface(this->getTypeface()); |
| 2065 } | 2047 } |
| 2066 if (flatFlags & kHasEffects_FlatFlag) { | 2048 if (flatFlags & kHasEffects_FlatFlag) { |
| 2067 buffer.writeFlattenable(this->getPathEffect()); | 2049 buffer.writeFlattenable(this->getPathEffect()); |
| 2068 buffer.writeFlattenable(this->getShader()); | 2050 buffer.writeFlattenable(this->getShader()); |
| 2069 buffer.writeFlattenable(this->getXfermode()); | 2051 buffer.writeFlattenable(this->getXfermode()); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 2080 buffer.writeBool(false); | 2062 buffer.writeBool(false); |
| 2081 } | 2063 } |
| 2082 } | 2064 } |
| 2083 #ifdef SK_BUILD_FOR_ANDROID | 2065 #ifdef SK_BUILD_FOR_ANDROID |
| 2084 if (flatFlags & kHasNonDefaultPaintOptionsAndroid_FlatFlag) { | 2066 if (flatFlags & kHasNonDefaultPaintOptionsAndroid_FlatFlag) { |
| 2085 this->getPaintOptionsAndroid().flatten(buffer); | 2067 this->getPaintOptionsAndroid().flatten(buffer); |
| 2086 } | 2068 } |
| 2087 #endif | 2069 #endif |
| 2088 } | 2070 } |
| 2089 | 2071 |
| 2090 void SkPaint::unflatten(SkFlattenableReadBuffer& buffer) { | 2072 void SkPaint::unflatten(SkReadBuffer& buffer) { |
| 2091 uint8_t flatFlags = 0; | 2073 uint8_t flatFlags = 0; |
| 2092 if (buffer.isOrderedBinaryBuffer()) { | 2074 SkASSERT(SkAlign4(kPODPaintSize) == kPODPaintSize); |
| 2093 SkASSERT(SkAlign4(kPODPaintSize) == kPODPaintSize); | 2075 const void* podData = buffer.skip(kPODPaintSize); |
| 2094 const void* podData = buffer.getOrderedBinaryBuffer()->skip(kPODPaintSiz
e); | 2076 const uint32_t* pod = reinterpret_cast<const uint32_t*>(podData); |
| 2095 const uint32_t* pod = reinterpret_cast<const uint32_t*>(podData); | |
| 2096 | 2077 |
| 2097 // the order we read must match the order we wrote in flatten() | 2078 // the order we read must match the order we wrote in flatten() |
| 2098 this->setTextSize(read_scalar(pod)); | 2079 this->setTextSize(read_scalar(pod)); |
| 2099 this->setTextScaleX(read_scalar(pod)); | 2080 this->setTextScaleX(read_scalar(pod)); |
| 2100 this->setTextSkewX(read_scalar(pod)); | 2081 this->setTextSkewX(read_scalar(pod)); |
| 2101 this->setStrokeWidth(read_scalar(pod)); | 2082 this->setStrokeWidth(read_scalar(pod)); |
| 2102 this->setStrokeMiter(read_scalar(pod)); | 2083 this->setStrokeMiter(read_scalar(pod)); |
| 2103 this->setColor(*pod++); | 2084 this->setColor(*pod++); |
| 2104 | 2085 |
| 2105 // previously flags:16, textAlign:8, flatFlags:8 | 2086 // previously flags:16, textAlign:8, flatFlags:8 |
| 2106 // now flags:16, hinting:4, textAlign:4, flatFlags:8 | 2087 // now flags:16, hinting:4, textAlign:4, flatFlags:8 |
| 2107 uint32_t tmp = *pod++; | 2088 uint32_t tmp = *pod++; |
| 2108 this->setFlags(tmp >> 16); | 2089 this->setFlags(tmp >> 16); |
| 2109 | 2090 |
| 2110 // hinting added later. 0 in this nibble means use the default. | 2091 // hinting added later. 0 in this nibble means use the default. |
| 2111 uint32_t hinting = (tmp >> 12) & 0xF; | 2092 uint32_t hinting = (tmp >> 12) & 0xF; |
| 2112 this->setHinting(0 == hinting ? kNormal_Hinting : static_cast<Hinting>(h
inting-1)); | 2093 this->setHinting(0 == hinting ? kNormal_Hinting : static_cast<Hinting>(hinti
ng-1)); |
| 2113 | 2094 |
| 2114 this->setTextAlign(static_cast<Align>((tmp >> 8) & 0xF)); | 2095 this->setTextAlign(static_cast<Align>((tmp >> 8) & 0xF)); |
| 2115 | 2096 |
| 2116 flatFlags = tmp & 0xFF; | 2097 flatFlags = tmp & 0xFF; |
| 2117 | 2098 |
| 2118 tmp = *pod++; | 2099 tmp = *pod++; |
| 2119 this->setStrokeCap(static_cast<Cap>((tmp >> 24) & 0xFF)); | 2100 this->setStrokeCap(static_cast<Cap>((tmp >> 24) & 0xFF)); |
| 2120 this->setStrokeJoin(static_cast<Join>((tmp >> 16) & 0xFF)); | 2101 this->setStrokeJoin(static_cast<Join>((tmp >> 16) & 0xFF)); |
| 2121 this->setStyle(static_cast<Style>((tmp >> 8) & 0xFF)); | 2102 this->setStyle(static_cast<Style>((tmp >> 8) & 0xFF)); |
| 2122 this->setTextEncoding(static_cast<TextEncoding>((tmp >> 0) & 0xFF)); | 2103 this->setTextEncoding(static_cast<TextEncoding>((tmp >> 0) & 0xFF)); |
| 2123 } else { | |
| 2124 this->setTextSize(buffer.readScalar()); | |
| 2125 this->setTextScaleX(buffer.readScalar()); | |
| 2126 this->setTextSkewX(buffer.readScalar()); | |
| 2127 // Skip the hinting scalar factor, which is not supported. | |
| 2128 buffer.readScalar(); | |
| 2129 this->setStrokeWidth(buffer.readScalar()); | |
| 2130 this->setStrokeMiter(buffer.readScalar()); | |
| 2131 this->setColor(buffer.readColor()); | |
| 2132 this->setFlags(buffer.readUInt()); | |
| 2133 this->setHinting(static_cast<SkPaint::Hinting>(buffer.readUInt())); | |
| 2134 this->setTextAlign(static_cast<SkPaint::Align>(buffer.readUInt())); | |
| 2135 flatFlags = buffer.readUInt(); | |
| 2136 | |
| 2137 this->setStrokeCap(static_cast<SkPaint::Cap>(buffer.readUInt())); | |
| 2138 this->setStrokeJoin(static_cast<SkPaint::Join>(buffer.readUInt())); | |
| 2139 this->setStyle(static_cast<SkPaint::Style>(buffer.readUInt())); | |
| 2140 this->setTextEncoding(static_cast<SkPaint::TextEncoding>(buffer.readUInt
())); | |
| 2141 } | |
| 2142 | 2104 |
| 2143 if (flatFlags & kHasTypeface_FlatFlag) { | 2105 if (flatFlags & kHasTypeface_FlatFlag) { |
| 2144 this->setTypeface(buffer.readTypeface()); | 2106 this->setTypeface(buffer.readTypeface()); |
| 2145 } else { | 2107 } else { |
| 2146 this->setTypeface(NULL); | 2108 this->setTypeface(NULL); |
| 2147 } | 2109 } |
| 2148 | 2110 |
| 2149 if (flatFlags & kHasEffects_FlatFlag) { | 2111 if (flatFlags & kHasEffects_FlatFlag) { |
| 2150 SkSafeUnref(this->setPathEffect(buffer.readPathEffect())); | 2112 SkSafeUnref(this->setPathEffect(buffer.readPathEffect())); |
| 2151 SkSafeUnref(this->setShader(buffer.readShader())); | 2113 SkSafeUnref(this->setShader(buffer.readShader())); |
| (...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2581 case SkXfermode::kPlus_Mode: | 2543 case SkXfermode::kPlus_Mode: |
| 2582 return 0 == this->getAlpha(); | 2544 return 0 == this->getAlpha(); |
| 2583 case SkXfermode::kDst_Mode: | 2545 case SkXfermode::kDst_Mode: |
| 2584 return true; | 2546 return true; |
| 2585 default: | 2547 default: |
| 2586 break; | 2548 break; |
| 2587 } | 2549 } |
| 2588 } | 2550 } |
| 2589 return false; | 2551 return false; |
| 2590 } | 2552 } |
| OLD | NEW |