Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 | |
| 2 /* | 1 /* |
| 3 * Copyright 2011 The Android Open Source Project | 2 * Copyright 2011 The Android Open Source Project |
| 4 * | 3 * |
| 5 * 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 |
| 6 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 7 */ | 6 */ |
| 8 | 7 |
| 9 | |
| 10 #include "SkAdvancedTypefaceMetrics.h" | 8 #include "SkAdvancedTypefaceMetrics.h" |
| 9 #include "SkFontDescriptor.h" | |
| 10 #include "SkFontHost.h" | |
| 11 #include "SkFontStream.h" | |
| 12 #include "SkStream.h" | |
| 11 #include "SkTypeface.h" | 13 #include "SkTypeface.h" |
| 12 #include "SkFontHost.h" | |
| 13 | 14 |
| 14 SK_DEFINE_INST_COUNT(SkTypeface) | 15 SK_DEFINE_INST_COUNT(SkTypeface) |
| 15 | 16 |
| 16 //#define TRACE_LIFECYCLE | 17 //#define TRACE_LIFECYCLE |
| 17 | 18 |
| 18 #ifdef TRACE_LIFECYCLE | 19 #ifdef TRACE_LIFECYCLE |
| 19 static int32_t gTypefaceCounter; | 20 static int32_t gTypefaceCounter; |
| 20 #endif | 21 #endif |
| 21 | 22 |
| 22 SkTypeface::SkTypeface(Style style, SkFontID fontID, bool isFixedWidth) | 23 SkTypeface::SkTypeface(Style style, SkFontID fontID, bool isFixedWidth) |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 81 SkTypeface* SkTypeface::CreateFromStream(SkStream* stream) { | 82 SkTypeface* SkTypeface::CreateFromStream(SkStream* stream) { |
| 82 return SkFontHost::CreateTypefaceFromStream(stream); | 83 return SkFontHost::CreateTypefaceFromStream(stream); |
| 83 } | 84 } |
| 84 | 85 |
| 85 SkTypeface* SkTypeface::CreateFromFile(const char path[]) { | 86 SkTypeface* SkTypeface::CreateFromFile(const char path[]) { |
| 86 return SkFontHost::CreateTypefaceFromFile(path); | 87 return SkFontHost::CreateTypefaceFromFile(path); |
| 87 } | 88 } |
| 88 | 89 |
| 89 /////////////////////////////////////////////////////////////////////////////// | 90 /////////////////////////////////////////////////////////////////////////////// |
| 90 | 91 |
| 91 void SkTypeface::serialize(SkWStream* stream) const { | 92 void SkTypeface::serialize(SkWStream* wstream) const { |
| 92 SkFontHost::Serialize(this, stream); | 93 bool isLocal = false; |
| 94 SkFontDescriptor desc(this->style()); | |
| 95 this->onGetFontDescriptor(&desc, &isLocal); | |
| 96 | |
| 97 desc.serialize(wstream); | |
| 98 if (isLocal) { | |
| 99 int ttcIndex; // TODO: write this to the stream? | |
|
bungeman-skia
2013/03/22 21:04:05
Yes, we need a issue to track this.
reed1
2013/03/25 12:26:27
Done.
| |
| 100 SkAutoTUnref<SkStream> rstream(this->openStream(&ttcIndex)); | |
| 101 if (rstream.get()) { | |
| 102 size_t length = rstream->getLength(); | |
| 103 wstream->writePackedUInt(length); | |
| 104 wstream->writeStream(rstream, length); | |
| 105 } else { | |
| 106 wstream->writePackedUInt(0); | |
| 107 } | |
| 108 } else { | |
| 109 wstream->writePackedUInt(0); | |
| 110 } | |
| 93 } | 111 } |
| 94 | 112 |
| 95 SkTypeface* SkTypeface::Deserialize(SkStream* stream) { | 113 SkTypeface* SkTypeface::Deserialize(SkStream* stream) { |
| 96 return SkFontHost::Deserialize(stream); | 114 SkFontDescriptor desc(stream); |
| 97 } | 115 size_t length = stream->readPackedUInt(); |
| 116 if (length > 0) { | |
| 117 void* addr = sk_malloc_flags(length, 0); | |
| 118 if (addr) { | |
| 119 SkAutoTUnref<SkStream> localStream(SkNEW_ARGS(SkMemoryStream, | |
| 120 (addr, length, false))); | |
| 121 return SkTypeface::CreateFromStream(localStream.get()); | |
|
bungeman-skia
2013/03/22 21:04:05
In the same issue, or maybe here in comment, note
reed1
2013/03/25 12:26:27
Done.
| |
| 122 } | |
| 123 // failed to allocate, so just skip and create-from-name | |
| 124 stream->skip(length); | |
| 125 } | |
| 98 | 126 |
| 99 SkAdvancedTypefaceMetrics* SkTypeface::getAdvancedTypefaceMetrics( | 127 return SkTypeface::CreateFromName(desc.getFamilyName(), desc.getStyle()); |
| 100 SkAdvancedTypefaceMetrics::PerGlyphInfo info, | |
| 101 const uint32_t* glyphIDs, | |
| 102 uint32_t glyphIDsCount) const { | |
| 103 return this->onGetAdvancedTypefaceMetrics(info, glyphIDs, glyphIDsCount); | |
| 104 } | 128 } |
| 105 | 129 |
| 106 /////////////////////////////////////////////////////////////////////////////// | 130 /////////////////////////////////////////////////////////////////////////////// |
| 107 | 131 |
| 108 int SkTypeface::countTables() const { | 132 int SkTypeface::countTables() const { |
| 109 return this->onGetTableTags(NULL); | 133 return this->onGetTableTags(NULL); |
| 110 } | 134 } |
| 111 | 135 |
| 112 int SkTypeface::getTableTags(SkFontTableTag tags[]) const { | 136 int SkTypeface::getTableTags(SkFontTableTag tags[]) const { |
| 113 return this->onGetTableTags(tags); | 137 return this->onGetTableTags(tags); |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 129 ttcIndex = &ttcIndexStorage; | 153 ttcIndex = &ttcIndexStorage; |
| 130 } | 154 } |
| 131 return this->onOpenStream(ttcIndex); | 155 return this->onOpenStream(ttcIndex); |
| 132 } | 156 } |
| 133 | 157 |
| 134 int SkTypeface::getUnitsPerEm() const { | 158 int SkTypeface::getUnitsPerEm() const { |
| 135 // should we try to cache this in the base-class? | 159 // should we try to cache this in the base-class? |
| 136 return this->onGetUPEM(); | 160 return this->onGetUPEM(); |
| 137 } | 161 } |
| 138 | 162 |
| 163 SkAdvancedTypefaceMetrics* SkTypeface::getAdvancedTypefaceMetrics( | |
| 164 SkAdvancedTypefaceMetrics::PerGlyphInfo info, | |
| 165 const uint32_t* glyphIDs, | |
| 166 uint32_t glyphIDsCount) const { | |
| 167 return this->onGetAdvancedTypefaceMetrics(info, glyphIDs, glyphIDsCount); | |
| 168 } | |
| 169 | |
| 139 /////////////////////////////////////////////////////////////////////////////// | 170 /////////////////////////////////////////////////////////////////////////////// |
| 140 /////////////////////////////////////////////////////////////////////////////// | 171 /////////////////////////////////////////////////////////////////////////////// |
| 141 | 172 |
| 142 #include "SkFontDescriptor.h" | |
| 143 | |
| 144 int SkTypeface::onGetUPEM() const { | 173 int SkTypeface::onGetUPEM() const { |
| 145 int upem = 0; | 174 int upem = 0; |
| 146 | 175 |
| 147 SkAdvancedTypefaceMetrics* metrics; | 176 SkAdvancedTypefaceMetrics* metrics; |
| 148 metrics = this->getAdvancedTypefaceMetrics( | 177 metrics = this->getAdvancedTypefaceMetrics( |
| 149 SkAdvancedTypefaceMetrics::kNo_PerGlyphInfo, | 178 SkAdvancedTypefaceMetrics::kNo_PerGlyphInfo, |
| 150 NULL, 0); | 179 NULL, 0); |
| 151 if (metrics) { | 180 if (metrics) { |
| 152 upem = metrics->fEmSize; | 181 upem = metrics->fEmSize; |
| 153 metrics->unref(); | 182 metrics->unref(); |
| 154 } | 183 } |
| 155 return upem; | 184 return upem; |
| 156 } | 185 } |
| 157 | 186 |
| 158 void SkTypeface::onGetFontDescriptor(SkFontDescriptor* desc) const { | |
| 159 desc->setStyle(this->style()); | |
| 160 } | |
| 161 | |
| 162 #include "SkFontStream.h" | |
| 163 #include "SkStream.h" | |
| 164 | |
| 165 int SkTypeface::onGetTableTags(SkFontTableTag tags[]) const { | 187 int SkTypeface::onGetTableTags(SkFontTableTag tags[]) const { |
| 166 int ttcIndex; | 188 int ttcIndex; |
| 167 SkAutoTUnref<SkStream> stream(this->openStream(&ttcIndex)); | 189 SkAutoTUnref<SkStream> stream(this->openStream(&ttcIndex)); |
| 168 return stream.get() ? SkFontStream::GetTableTags(stream, ttcIndex, tags) : 0 ; | 190 return stream.get() ? SkFontStream::GetTableTags(stream, ttcIndex, tags) : 0 ; |
| 169 } | 191 } |
| 170 | 192 |
| 171 size_t SkTypeface::onGetTableData(SkFontTableTag tag, size_t offset, | 193 size_t SkTypeface::onGetTableData(SkFontTableTag tag, size_t offset, |
| 172 size_t length, void* data) const { | 194 size_t length, void* data) const { |
| 173 int ttcIndex; | 195 int ttcIndex; |
| 174 SkAutoTUnref<SkStream> stream(this->openStream(&ttcIndex)); | 196 SkAutoTUnref<SkStream> stream(this->openStream(&ttcIndex)); |
| 175 return stream.get() | 197 return stream.get() |
| 176 ? SkFontStream::GetTableData(stream, ttcIndex, tag, offset, length, data ) | 198 ? SkFontStream::GetTableData(stream, ttcIndex, tag, offset, length, data ) |
| 177 : 0; | 199 : 0; |
| 178 } | 200 } |
| 201 | |
| OLD | NEW |