| 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" |
| (...skipping 2027 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2038 } | 2038 } |
| 2039 | 2039 |
| 2040 | 2040 |
| 2041 if (buffer.isOrderedBinaryBuffer()) { | 2041 if (buffer.isOrderedBinaryBuffer()) { |
| 2042 SkASSERT(SkAlign4(kPODPaintSize) == kPODPaintSize); | 2042 SkASSERT(SkAlign4(kPODPaintSize) == kPODPaintSize); |
| 2043 uint32_t* ptr = buffer.getOrderedBinaryBuffer()->reserve(kPODPaintSize); | 2043 uint32_t* ptr = buffer.getOrderedBinaryBuffer()->reserve(kPODPaintSize); |
| 2044 | 2044 |
| 2045 ptr = write_scalar(ptr, this->getTextSize()); | 2045 ptr = write_scalar(ptr, this->getTextSize()); |
| 2046 ptr = write_scalar(ptr, this->getTextScaleX()); | 2046 ptr = write_scalar(ptr, this->getTextScaleX()); |
| 2047 ptr = write_scalar(ptr, this->getTextSkewX()); | 2047 ptr = write_scalar(ptr, this->getTextSkewX()); |
| 2048 // Dummy value for obsolete hinting scale factor. TODO: remove with nex
t picture version | |
| 2049 ptr = write_scalar(ptr, SK_Scalar1); | |
| 2050 ptr = write_scalar(ptr, this->getStrokeWidth()); | 2048 ptr = write_scalar(ptr, this->getStrokeWidth()); |
| 2051 ptr = write_scalar(ptr, this->getStrokeMiter()); | 2049 ptr = write_scalar(ptr, this->getStrokeMiter()); |
| 2052 *ptr++ = this->getColor(); | 2050 *ptr++ = this->getColor(); |
| 2053 // previously flags:16, textAlign:8, flatFlags:8 | 2051 // previously flags:16, textAlign:8, flatFlags:8 |
| 2054 // now flags:16, hinting:4, textAlign:4, flatFlags:8 | 2052 // now flags:16, hinting:4, textAlign:4, flatFlags:8 |
| 2055 *ptr++ = (this->getFlags() << 16) | | 2053 *ptr++ = (this->getFlags() << 16) | |
| 2056 // hinting added later. 0 in this nibble means use the default. | 2054 // hinting added later. 0 in this nibble means use the default. |
| 2057 ((this->getHinting()+1) << 12) | | 2055 ((this->getHinting()+1) << 12) | |
| 2058 (this->getTextAlign() << 8) | | 2056 (this->getTextAlign() << 8) | |
| 2059 flatFlags; | 2057 flatFlags; |
| 2060 *ptr++ = pack_4(this->getStrokeCap(), this->getStrokeJoin(), | 2058 *ptr++ = pack_4(this->getStrokeCap(), this->getStrokeJoin(), |
| 2061 this->getStyle(), this->getTextEncoding()); | 2059 this->getStyle(), this->getTextEncoding()); |
| 2062 } else { | 2060 } else { |
| 2063 buffer.writeScalar(fTextSize); | 2061 buffer.writeScalar(fTextSize); |
| 2064 buffer.writeScalar(fTextScaleX); | 2062 buffer.writeScalar(fTextScaleX); |
| 2065 buffer.writeScalar(fTextSkewX); | 2063 buffer.writeScalar(fTextSkewX); |
| 2066 // Dummy value for obsolete hinting scale factor. TODO: remove with nex
t picture version | |
| 2067 buffer.writeScalar(SK_Scalar1); | |
| 2068 buffer.writeScalar(fWidth); | 2064 buffer.writeScalar(fWidth); |
| 2069 buffer.writeScalar(fMiterLimit); | 2065 buffer.writeScalar(fMiterLimit); |
| 2070 buffer.writeColor(fColor); | 2066 buffer.writeColor(fColor); |
| 2071 buffer.writeUInt(fFlags); | 2067 buffer.writeUInt(fFlags); |
| 2072 buffer.writeUInt(fHinting); | 2068 buffer.writeUInt(fHinting); |
| 2073 buffer.writeUInt(fTextAlign); | 2069 buffer.writeUInt(fTextAlign); |
| 2074 buffer.writeUInt(flatFlags); | 2070 buffer.writeUInt(flatFlags); |
| 2075 | 2071 |
| 2076 buffer.writeUInt(fCapType); | 2072 buffer.writeUInt(fCapType); |
| 2077 buffer.writeUInt(fJoinType); | 2073 buffer.writeUInt(fJoinType); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 2088 buffer.writeFlattenable(this->getPathEffect()); | 2084 buffer.writeFlattenable(this->getPathEffect()); |
| 2089 buffer.writeFlattenable(this->getShader()); | 2085 buffer.writeFlattenable(this->getShader()); |
| 2090 buffer.writeFlattenable(this->getXfermode()); | 2086 buffer.writeFlattenable(this->getXfermode()); |
| 2091 buffer.writeFlattenable(this->getMaskFilter()); | 2087 buffer.writeFlattenable(this->getMaskFilter()); |
| 2092 buffer.writeFlattenable(this->getColorFilter()); | 2088 buffer.writeFlattenable(this->getColorFilter()); |
| 2093 buffer.writeFlattenable(this->getRasterizer()); | 2089 buffer.writeFlattenable(this->getRasterizer()); |
| 2094 buffer.writeFlattenable(this->getLooper()); | 2090 buffer.writeFlattenable(this->getLooper()); |
| 2095 buffer.writeFlattenable(this->getImageFilter()); | 2091 buffer.writeFlattenable(this->getImageFilter()); |
| 2096 buffer.writeFlattenable(this->getAnnotation()); | 2092 buffer.writeFlattenable(this->getAnnotation()); |
| 2097 } | 2093 } |
| 2094 |
| 2095 #if SK_BUILD_FOR_ANDROID |
| 2096 this->getPaintOptionsAndroid().flatten(buffer); |
| 2097 #endif |
| 2098 } | 2098 } |
| 2099 | 2099 |
| 2100 void SkPaint::unflatten(SkFlattenableReadBuffer& buffer) { | 2100 void SkPaint::unflatten(SkFlattenableReadBuffer& buffer) { |
| 2101 fPrivFlags = 0; | 2101 fPrivFlags = 0; |
| 2102 | 2102 |
| 2103 uint8_t flatFlags = 0; | 2103 uint8_t flatFlags = 0; |
| 2104 if (buffer.isOrderedBinaryBuffer()) { | 2104 if (buffer.isOrderedBinaryBuffer()) { |
| 2105 SkASSERT(SkAlign4(kPODPaintSize) == kPODPaintSize); | 2105 SkASSERT(SkAlign4(kPODPaintSize) == kPODPaintSize); |
| 2106 const void* podData = buffer.getOrderedBinaryBuffer()->skip(kPODPaintSiz
e); | 2106 const void* podData = buffer.getOrderedBinaryBuffer()->skip(kPODPaintSiz
e); |
| 2107 const uint32_t* pod = reinterpret_cast<const uint32_t*>(podData); | 2107 const uint32_t* pod = reinterpret_cast<const uint32_t*>(podData); |
| 2108 | 2108 |
| 2109 // the order we read must match the order we wrote in flatten() | 2109 // the order we read must match the order we wrote in flatten() |
| 2110 this->setTextSize(read_scalar(pod)); | 2110 this->setTextSize(read_scalar(pod)); |
| 2111 this->setTextScaleX(read_scalar(pod)); | 2111 this->setTextScaleX(read_scalar(pod)); |
| 2112 this->setTextSkewX(read_scalar(pod)); | 2112 this->setTextSkewX(read_scalar(pod)); |
| 2113 // Skip the hinting scalar factor, which is not supported. | |
| 2114 read_scalar(pod); | |
| 2115 this->setStrokeWidth(read_scalar(pod)); | 2113 this->setStrokeWidth(read_scalar(pod)); |
| 2116 this->setStrokeMiter(read_scalar(pod)); | 2114 this->setStrokeMiter(read_scalar(pod)); |
| 2117 this->setColor(*pod++); | 2115 this->setColor(*pod++); |
| 2118 | 2116 |
| 2119 // previously flags:16, textAlign:8, flatFlags:8 | 2117 // previously flags:16, textAlign:8, flatFlags:8 |
| 2120 // now flags:16, hinting:4, textAlign:4, flatFlags:8 | 2118 // now flags:16, hinting:4, textAlign:4, flatFlags:8 |
| 2121 uint32_t tmp = *pod++; | 2119 uint32_t tmp = *pod++; |
| 2122 this->setFlags(tmp >> 16); | 2120 this->setFlags(tmp >> 16); |
| 2123 | 2121 |
| 2124 // hinting added later. 0 in this nibble means use the default. | 2122 // hinting added later. 0 in this nibble means use the default. |
| 2125 uint32_t hinting = (tmp >> 12) & 0xF; | 2123 uint32_t hinting = (tmp >> 12) & 0xF; |
| 2126 this->setHinting(0 == hinting ? kNormal_Hinting : static_cast<Hinting>(h
inting-1)); | 2124 this->setHinting(0 == hinting ? kNormal_Hinting : static_cast<Hinting>(h
inting-1)); |
| 2127 | 2125 |
| 2128 this->setTextAlign(static_cast<Align>((tmp >> 8) & 0xF)); | 2126 this->setTextAlign(static_cast<Align>((tmp >> 8) & 0xF)); |
| 2129 | 2127 |
| 2130 flatFlags = tmp & 0xFF; | 2128 flatFlags = tmp & 0xFF; |
| 2131 | 2129 |
| 2132 tmp = *pod++; | 2130 tmp = *pod++; |
| 2133 this->setStrokeCap(static_cast<Cap>((tmp >> 24) & 0xFF)); | 2131 this->setStrokeCap(static_cast<Cap>((tmp >> 24) & 0xFF)); |
| 2134 this->setStrokeJoin(static_cast<Join>((tmp >> 16) & 0xFF)); | 2132 this->setStrokeJoin(static_cast<Join>((tmp >> 16) & 0xFF)); |
| 2135 this->setStyle(static_cast<Style>((tmp >> 8) & 0xFF)); | 2133 this->setStyle(static_cast<Style>((tmp >> 8) & 0xFF)); |
| 2136 this->setTextEncoding(static_cast<TextEncoding>((tmp >> 0) & 0xFF)); | 2134 this->setTextEncoding(static_cast<TextEncoding>((tmp >> 0) & 0xFF)); |
| 2137 } else { | 2135 } else { |
| 2138 this->setTextSize(buffer.readScalar()); | 2136 this->setTextSize(buffer.readScalar()); |
| 2139 this->setTextScaleX(buffer.readScalar()); | 2137 this->setTextScaleX(buffer.readScalar()); |
| 2140 this->setTextSkewX(buffer.readScalar()); | 2138 this->setTextSkewX(buffer.readScalar()); |
| 2141 // Skip the hinting scalar factor, which is not supported. | |
| 2142 buffer.readScalar(); | |
| 2143 this->setStrokeWidth(buffer.readScalar()); | 2139 this->setStrokeWidth(buffer.readScalar()); |
| 2144 this->setStrokeMiter(buffer.readScalar()); | 2140 this->setStrokeMiter(buffer.readScalar()); |
| 2145 this->setColor(buffer.readColor()); | 2141 this->setColor(buffer.readColor()); |
| 2146 this->setFlags(buffer.readUInt()); | 2142 this->setFlags(buffer.readUInt()); |
| 2147 this->setHinting(static_cast<SkPaint::Hinting>(buffer.readUInt())); | 2143 this->setHinting(static_cast<SkPaint::Hinting>(buffer.readUInt())); |
| 2148 this->setTextAlign(static_cast<SkPaint::Align>(buffer.readUInt())); | 2144 this->setTextAlign(static_cast<SkPaint::Align>(buffer.readUInt())); |
| 2149 flatFlags = buffer.readUInt(); | 2145 flatFlags = buffer.readUInt(); |
| 2150 | 2146 |
| 2151 this->setStrokeCap(static_cast<SkPaint::Cap>(buffer.readUInt())); | 2147 this->setStrokeCap(static_cast<SkPaint::Cap>(buffer.readUInt())); |
| 2152 this->setStrokeJoin(static_cast<SkPaint::Join>(buffer.readUInt())); | 2148 this->setStrokeJoin(static_cast<SkPaint::Join>(buffer.readUInt())); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 2173 } else { | 2169 } else { |
| 2174 this->setPathEffect(NULL); | 2170 this->setPathEffect(NULL); |
| 2175 this->setShader(NULL); | 2171 this->setShader(NULL); |
| 2176 this->setXfermode(NULL); | 2172 this->setXfermode(NULL); |
| 2177 this->setMaskFilter(NULL); | 2173 this->setMaskFilter(NULL); |
| 2178 this->setColorFilter(NULL); | 2174 this->setColorFilter(NULL); |
| 2179 this->setRasterizer(NULL); | 2175 this->setRasterizer(NULL); |
| 2180 this->setLooper(NULL); | 2176 this->setLooper(NULL); |
| 2181 this->setImageFilter(NULL); | 2177 this->setImageFilter(NULL); |
| 2182 } | 2178 } |
| 2179 #if SK_BUILD_FOR_ANDROID |
| 2180 SkPaintOptionsAndroid options; |
| 2181 options.unflatten(buffer); |
| 2182 this->setPaintOptionsAndroid(options); |
| 2183 #endif |
| 2183 } | 2184 } |
| 2184 | 2185 |
| 2185 /////////////////////////////////////////////////////////////////////////////// | 2186 /////////////////////////////////////////////////////////////////////////////// |
| 2186 | 2187 |
| 2187 SkShader* SkPaint::setShader(SkShader* shader) { | 2188 SkShader* SkPaint::setShader(SkShader* shader) { |
| 2188 GEN_ID_INC_EVAL(shader != fShader); | 2189 GEN_ID_INC_EVAL(shader != fShader); |
| 2189 SkRefCnt_SafeAssign(fShader, shader); | 2190 SkRefCnt_SafeAssign(fShader, shader); |
| 2190 return shader; | 2191 return shader; |
| 2191 } | 2192 } |
| 2192 | 2193 |
| (...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2573 case SkXfermode::kPlus_Mode: | 2574 case SkXfermode::kPlus_Mode: |
| 2574 return 0 == this->getAlpha(); | 2575 return 0 == this->getAlpha(); |
| 2575 case SkXfermode::kDst_Mode: | 2576 case SkXfermode::kDst_Mode: |
| 2576 return true; | 2577 return true; |
| 2577 default: | 2578 default: |
| 2578 break; | 2579 break; |
| 2579 } | 2580 } |
| 2580 } | 2581 } |
| 2581 return false; | 2582 return false; |
| 2582 } | 2583 } |
| OLD | NEW |