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 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 fMiterLimit = SkPaintDefaults_MiterLimit; | 76 fMiterLimit = SkPaintDefaults_MiterLimit; |
77 fFlags = SkPaintDefaults_Flags; | 77 fFlags = SkPaintDefaults_Flags; |
78 fCapType = kDefault_Cap; | 78 fCapType = kDefault_Cap; |
79 fJoinType = kDefault_Join; | 79 fJoinType = kDefault_Join; |
80 fTextAlign = kLeft_Align; | 80 fTextAlign = kLeft_Align; |
81 fStyle = kFill_Style; | 81 fStyle = kFill_Style; |
82 fTextEncoding = kUTF8_TextEncoding; | 82 fTextEncoding = kUTF8_TextEncoding; |
83 fHinting = SkPaintDefaults_Hinting; | 83 fHinting = SkPaintDefaults_Hinting; |
84 fPrivFlags = 0; | 84 fPrivFlags = 0; |
85 #ifdef SK_BUILD_FOR_ANDROID | 85 #ifdef SK_BUILD_FOR_ANDROID |
| 86 new (&fPaintOptionsAndroid) SkPaintOptionsAndroid; |
86 fGenerationID = 0; | 87 fGenerationID = 0; |
87 #endif | 88 #endif |
88 } | 89 } |
89 | 90 |
90 SkPaint::SkPaint(const SkPaint& src) { | 91 SkPaint::SkPaint(const SkPaint& src) { |
91 memcpy(this, &src, sizeof(src)); | 92 memcpy(this, &src, sizeof(src)); |
92 | 93 |
93 SkSafeRef(fTypeface); | 94 SkSafeRef(fTypeface); |
94 SkSafeRef(fPathEffect); | 95 SkSafeRef(fPathEffect); |
95 SkSafeRef(fShader); | 96 SkSafeRef(fShader); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 SkSafeUnref(fShader); | 135 SkSafeUnref(fShader); |
135 SkSafeUnref(fXfermode); | 136 SkSafeUnref(fXfermode); |
136 SkSafeUnref(fMaskFilter); | 137 SkSafeUnref(fMaskFilter); |
137 SkSafeUnref(fColorFilter); | 138 SkSafeUnref(fColorFilter); |
138 SkSafeUnref(fRasterizer); | 139 SkSafeUnref(fRasterizer); |
139 SkSafeUnref(fLooper); | 140 SkSafeUnref(fLooper); |
140 SkSafeUnref(fImageFilter); | 141 SkSafeUnref(fImageFilter); |
141 SkSafeUnref(fAnnotation); | 142 SkSafeUnref(fAnnotation); |
142 | 143 |
143 #ifdef SK_BUILD_FOR_ANDROID | 144 #ifdef SK_BUILD_FOR_ANDROID |
| 145 fPaintOptionsAndroid.~SkPaintOptionsAndroid(); |
| 146 |
144 uint32_t oldGenerationID = fGenerationID; | 147 uint32_t oldGenerationID = fGenerationID; |
145 #endif | 148 #endif |
146 memcpy(this, &src, sizeof(src)); | 149 memcpy(this, &src, sizeof(src)); |
147 #ifdef SK_BUILD_FOR_ANDROID | 150 #ifdef SK_BUILD_FOR_ANDROID |
148 fGenerationID = oldGenerationID + 1; | 151 fGenerationID = oldGenerationID + 1; |
| 152 |
| 153 new (&fPaintOptionsAndroid) SkPaintOptionsAndroid(src.fPaintOptionsAndroid); |
149 #endif | 154 #endif |
150 | 155 |
151 return *this; | 156 return *this; |
152 } | 157 } |
153 | 158 |
154 bool operator==(const SkPaint& a, const SkPaint& b) { | 159 bool operator==(const SkPaint& a, const SkPaint& b) { |
155 #ifdef SK_BUILD_FOR_ANDROID | 160 #ifdef SK_BUILD_FOR_ANDROID |
156 //assumes that fGenerationID is the last field in the struct | 161 //assumes that fGenerationID is the last field in the struct |
157 return !memcmp(&a, &b, SK_OFFSETOF(SkPaint, fGenerationID)); | 162 return !memcmp(&a, &b, SK_OFFSETOF(SkPaint, fGenerationID)); |
158 #else | 163 #else |
(...skipping 14 matching lines...) Expand all Loading... |
173 } | 178 } |
174 | 179 |
175 #ifdef SK_BUILD_FOR_ANDROID | 180 #ifdef SK_BUILD_FOR_ANDROID |
176 uint32_t SkPaint::getGenerationID() const { | 181 uint32_t SkPaint::getGenerationID() const { |
177 return fGenerationID; | 182 return fGenerationID; |
178 } | 183 } |
179 | 184 |
180 void SkPaint::setGenerationID(uint32_t generationID) { | 185 void SkPaint::setGenerationID(uint32_t generationID) { |
181 fGenerationID = generationID; | 186 fGenerationID = generationID; |
182 } | 187 } |
183 #endif | |
184 | 188 |
185 #ifdef SK_BUILD_FOR_ANDROID | |
186 unsigned SkPaint::getBaseGlyphCount(SkUnichar text) const { | 189 unsigned SkPaint::getBaseGlyphCount(SkUnichar text) const { |
187 SkAutoGlyphCache autoCache(*this, NULL, NULL); | 190 SkAutoGlyphCache autoCache(*this, NULL, NULL); |
188 SkGlyphCache* cache = autoCache.getCache(); | 191 SkGlyphCache* cache = autoCache.getCache(); |
189 return cache->getBaseGlyphCount(text); | 192 return cache->getBaseGlyphCount(text); |
190 } | 193 } |
| 194 |
| 195 void SkPaint::setPaintOptionsAndroid(const SkPaintOptionsAndroid& options) { |
| 196 if (options != fPaintOptionsAndroid) { |
| 197 fPaintOptionsAndroid = options; |
| 198 GEN_ID_INC; |
| 199 } |
| 200 } |
191 #endif | 201 #endif |
192 | 202 |
193 void SkPaint::setHinting(Hinting hintingLevel) { | 203 void SkPaint::setHinting(Hinting hintingLevel) { |
194 GEN_ID_INC_EVAL((unsigned) hintingLevel != fHinting); | 204 GEN_ID_INC_EVAL((unsigned) hintingLevel != fHinting); |
195 fHinting = hintingLevel; | 205 fHinting = hintingLevel; |
196 } | 206 } |
197 | 207 |
198 void SkPaint::setFlags(uint32_t flags) { | 208 void SkPaint::setFlags(uint32_t flags) { |
199 GEN_ID_INC_EVAL(fFlags != flags); | 209 GEN_ID_INC_EVAL(fFlags != flags); |
200 fFlags = flags; | 210 fFlags = flags; |
(...skipping 1598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1799 Also, all existing users of blur have calibrated for linear. */ | 1809 Also, all existing users of blur have calibrated for linear. */ |
1800 rec.ignorePreBlend(); | 1810 rec.ignorePreBlend(); |
1801 } | 1811 } |
1802 if (ra) { | 1812 if (ra) { |
1803 raBuffer.writeFlattenable(ra); | 1813 raBuffer.writeFlattenable(ra); |
1804 descSize += raBuffer.size(); | 1814 descSize += raBuffer.size(); |
1805 entryCount += 1; | 1815 entryCount += 1; |
1806 rec.fMaskFormat = SkMask::kA8_Format; // force antialiasing when we do
the scan conversion | 1816 rec.fMaskFormat = SkMask::kA8_Format; // force antialiasing when we do
the scan conversion |
1807 } | 1817 } |
1808 | 1818 |
| 1819 #ifdef SK_BUILD_FOR_ANDROID |
| 1820 SkOrderedWriteBuffer androidBuffer(128); |
| 1821 fPaintOptionsAndroid.flatten(androidBuffer); |
| 1822 descSize += androidBuffer.size(); |
| 1823 entryCount += 1; |
| 1824 #endif |
| 1825 |
1809 /////////////////////////////////////////////////////////////////////////// | 1826 /////////////////////////////////////////////////////////////////////////// |
1810 // Now that we're done tweaking the rec, call the PostMakeRec cleanup | 1827 // Now that we're done tweaking the rec, call the PostMakeRec cleanup |
1811 SkScalerContext::PostMakeRec(*this, &rec); | 1828 SkScalerContext::PostMakeRec(*this, &rec); |
1812 | 1829 |
1813 descSize += SkDescriptor::ComputeOverhead(entryCount); | 1830 descSize += SkDescriptor::ComputeOverhead(entryCount); |
1814 | 1831 |
1815 SkAutoDescriptor ad(descSize); | 1832 SkAutoDescriptor ad(descSize); |
1816 SkDescriptor* desc = ad.getDesc(); | 1833 SkDescriptor* desc = ad.getDesc(); |
1817 | 1834 |
1818 desc->init(); | 1835 desc->init(); |
1819 desc->addEntry(kRec_SkDescriptorTag, sizeof(rec), &rec); | 1836 desc->addEntry(kRec_SkDescriptorTag, sizeof(rec), &rec); |
1820 | 1837 |
| 1838 #ifdef SK_BUILD_FOR_ANDROID |
| 1839 add_flattenable(desc, kAndroidOpts_SkDescriptorTag, &androidBuffer); |
| 1840 #endif |
| 1841 |
1821 if (pe) { | 1842 if (pe) { |
1822 add_flattenable(desc, kPathEffect_SkDescriptorTag, &peBuffer); | 1843 add_flattenable(desc, kPathEffect_SkDescriptorTag, &peBuffer); |
1823 } | 1844 } |
1824 if (mf) { | 1845 if (mf) { |
1825 add_flattenable(desc, kMaskFilter_SkDescriptorTag, &mfBuffer); | 1846 add_flattenable(desc, kMaskFilter_SkDescriptorTag, &mfBuffer); |
1826 } | 1847 } |
1827 if (ra) { | 1848 if (ra) { |
1828 add_flattenable(desc, kRasterizer_SkDescriptorTag, &raBuffer); | 1849 add_flattenable(desc, kRasterizer_SkDescriptorTag, &raBuffer); |
1829 } | 1850 } |
1830 | 1851 |
(...skipping 14 matching lines...) Expand all Loading... |
1845 SkDescriptor* desc2 = ad2.getDesc(); | 1866 SkDescriptor* desc2 = ad2.getDesc(); |
1846 | 1867 |
1847 memset(desc1, 0x00, descSize); | 1868 memset(desc1, 0x00, descSize); |
1848 memset(desc2, 0xFF, descSize); | 1869 memset(desc2, 0xFF, descSize); |
1849 | 1870 |
1850 desc1->init(); | 1871 desc1->init(); |
1851 desc2->init(); | 1872 desc2->init(); |
1852 desc1->addEntry(kRec_SkDescriptorTag, sizeof(rec), &rec); | 1873 desc1->addEntry(kRec_SkDescriptorTag, sizeof(rec), &rec); |
1853 desc2->addEntry(kRec_SkDescriptorTag, sizeof(rec), &rec); | 1874 desc2->addEntry(kRec_SkDescriptorTag, sizeof(rec), &rec); |
1854 | 1875 |
| 1876 #ifdef SK_BUILD_FOR_ANDROID |
| 1877 add_flattenable(desc1, kAndroidOpts_SkDescriptorTag, &androidBuffer); |
| 1878 add_flattenable(desc2, kAndroidOpts_SkDescriptorTag, &androidBuffer); |
| 1879 #endif |
| 1880 |
1855 if (pe) { | 1881 if (pe) { |
1856 add_flattenable(desc1, kPathEffect_SkDescriptorTag, &peBuffer); | 1882 add_flattenable(desc1, kPathEffect_SkDescriptorTag, &peBuffer); |
1857 add_flattenable(desc2, kPathEffect_SkDescriptorTag, &peBuffer); | 1883 add_flattenable(desc2, kPathEffect_SkDescriptorTag, &peBuffer); |
1858 } | 1884 } |
1859 if (mf) { | 1885 if (mf) { |
1860 add_flattenable(desc1, kMaskFilter_SkDescriptorTag, &mfBuffer); | 1886 add_flattenable(desc1, kMaskFilter_SkDescriptorTag, &mfBuffer); |
1861 add_flattenable(desc2, kMaskFilter_SkDescriptorTag, &mfBuffer); | 1887 add_flattenable(desc2, kMaskFilter_SkDescriptorTag, &mfBuffer); |
1862 } | 1888 } |
1863 if (ra) { | 1889 if (ra) { |
1864 add_flattenable(desc1, kRasterizer_SkDescriptorTag, &raBuffer); | 1890 add_flattenable(desc1, kRasterizer_SkDescriptorTag, &raBuffer); |
(...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2566 if (firstTime) { | 2592 if (firstTime) { |
2567 *dst = r; | 2593 *dst = r; |
2568 } else { | 2594 } else { |
2569 dst->join(r); | 2595 dst->join(r); |
2570 } | 2596 } |
2571 } else { | 2597 } else { |
2572 break; | 2598 break; |
2573 } | 2599 } |
2574 } | 2600 } |
2575 } | 2601 } |
OLD | NEW |