| 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 |