Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(471)

Side by Side Diff: src/utils/win/SkDWriteFontFileStream.cpp

Issue 940563002: Update DirectWrite streams to SkStreamAsset. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/utils/win/SkDWriteFontFileStream.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 Google Inc.
3 * 3 *
4 * 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
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkTypes.h" 8 #include "SkTypes.h"
9 #include "SkDWriteFontFileStream.h" 9 #include "SkDWriteFontFileStream.h"
10 #include "SkHRESULT.h" 10 #include "SkHRESULT.h"
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 UINT64 fileSize; 126 UINT64 fileSize;
127 HRNM(fFontFileStream->GetFileSize(&fileSize), "Could not get file size"); 127 HRNM(fFontFileStream->GetFileSize(&fileSize), "Could not get file size");
128 HRNM(fFontFileStream->ReadFileFragment(&fLockedMemory, 0, fileSize, &fFragme ntLock), 128 HRNM(fFontFileStream->ReadFileFragment(&fLockedMemory, 0, fileSize, &fFragme ntLock),
129 "Could not lock file fragment."); 129 "Could not lock file fragment.");
130 return fLockedMemory; 130 return fLockedMemory;
131 } 131 }
132 132
133 /////////////////////////////////////////////////////////////////////////////// 133 ///////////////////////////////////////////////////////////////////////////////
134 // SkIDWriteFontFileStreamWrapper 134 // SkIDWriteFontFileStreamWrapper
135 135
136 HRESULT SkDWriteFontFileStreamWrapper::Create(SkStream* stream, SkDWriteFontFile StreamWrapper** streamFontFileStream) { 136 HRESULT SkDWriteFontFileStreamWrapper::Create(SkStreamAsset* stream,
137 SkDWriteFontFileStreamWrapper** st reamFontFileStream)
138 {
137 *streamFontFileStream = new SkDWriteFontFileStreamWrapper(stream); 139 *streamFontFileStream = new SkDWriteFontFileStreamWrapper(stream);
138 if (NULL == streamFontFileStream) { 140 if (NULL == streamFontFileStream) {
139 return E_OUTOFMEMORY; 141 return E_OUTOFMEMORY;
140 } 142 }
141 return S_OK; 143 return S_OK;
142 } 144 }
143 145
144 SkDWriteFontFileStreamWrapper::SkDWriteFontFileStreamWrapper(SkStream* stream) 146 SkDWriteFontFileStreamWrapper::SkDWriteFontFileStreamWrapper(SkStreamAsset* stre am)
145 : fRefCount(1), fStream(stream) { 147 : fRefCount(1), fStream(stream) {
146 } 148 }
147 149
148 HRESULT STDMETHODCALLTYPE SkDWriteFontFileStreamWrapper::QueryInterface(REFIID i id, void** ppvObject) { 150 HRESULT STDMETHODCALLTYPE SkDWriteFontFileStreamWrapper::QueryInterface(REFIID i id, void** ppvObject) {
149 if (iid == IID_IUnknown || iid == __uuidof(IDWriteFontFileStream)) { 151 if (iid == IID_IUnknown || iid == __uuidof(IDWriteFontFileStream)) {
150 *ppvObject = this; 152 *ppvObject = this;
151 AddRef(); 153 AddRef();
152 return S_OK; 154 return S_OK;
153 } else { 155 } else {
154 *ppvObject = NULL; 156 *ppvObject = NULL;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 if (!SkTFitsIn<size_t>(fileOffset + fragmentSize)) { 188 if (!SkTFitsIn<size_t>(fileOffset + fragmentSize)) {
187 return E_FAIL; 189 return E_FAIL;
188 } 190 }
189 191
190 const void* data = fStream->getMemoryBase(); 192 const void* data = fStream->getMemoryBase();
191 if (data) { 193 if (data) {
192 *fragmentStart = static_cast<BYTE const*>(data) + static_cast<size_t>(fi leOffset); 194 *fragmentStart = static_cast<BYTE const*>(data) + static_cast<size_t>(fi leOffset);
193 *fragmentContext = NULL; 195 *fragmentContext = NULL;
194 196
195 } else { 197 } else {
196 //May be called from multiple threads. 198 // May be called from multiple threads.
197 SkAutoMutexAcquire ama(fStreamMutex); 199 SkAutoMutexAcquire ama(fStreamMutex);
198 200
199 *fragmentStart = NULL; 201 *fragmentStart = NULL;
200 *fragmentContext = NULL; 202 *fragmentContext = NULL;
201 203
202 if (!fStream->rewind()) { 204 if (!fStream->seek(static_cast<size_t>(fileOffset))) {
203 return E_FAIL;
204 }
205 if (fStream->skip(static_cast<size_t>(fileOffset)) != fileOffset) {
206 return E_FAIL; 205 return E_FAIL;
207 } 206 }
208 SkAutoTMalloc<uint8_t> streamData(static_cast<size_t>(fragmentSize)); 207 SkAutoTMalloc<uint8_t> streamData(static_cast<size_t>(fragmentSize));
209 if (fStream->read(streamData.get(), static_cast<size_t>(fragmentSize)) ! = fragmentSize) { 208 if (fStream->read(streamData.get(), static_cast<size_t>(fragmentSize)) ! = fragmentSize) {
210 return E_FAIL; 209 return E_FAIL;
211 } 210 }
212 211
213 *fragmentStart = streamData.get(); 212 *fragmentStart = streamData.get();
214 *fragmentContext = streamData.detach(); 213 *fragmentContext = streamData.detach();
215 } 214 }
216 return S_OK; 215 return S_OK;
217 } 216 }
218 217
219 void STDMETHODCALLTYPE SkDWriteFontFileStreamWrapper::ReleaseFileFragment(void* fragmentContext) { 218 void STDMETHODCALLTYPE SkDWriteFontFileStreamWrapper::ReleaseFileFragment(void* fragmentContext) {
220 sk_free(fragmentContext); 219 sk_free(fragmentContext);
221 } 220 }
222 221
223 HRESULT STDMETHODCALLTYPE SkDWriteFontFileStreamWrapper::GetFileSize(UINT64* fil eSize) { 222 HRESULT STDMETHODCALLTYPE SkDWriteFontFileStreamWrapper::GetFileSize(UINT64* fil eSize) {
224 *fileSize = fStream->getLength(); 223 *fileSize = fStream->getLength();
225 return S_OK; 224 return S_OK;
226 } 225 }
227 226
228 HRESULT STDMETHODCALLTYPE SkDWriteFontFileStreamWrapper::GetLastWriteTime(UINT64 * lastWriteTime) { 227 HRESULT STDMETHODCALLTYPE SkDWriteFontFileStreamWrapper::GetLastWriteTime(UINT64 * lastWriteTime) {
229 // The concept of last write time does not apply to this loader. 228 // The concept of last write time does not apply to this loader.
230 *lastWriteTime = 0; 229 *lastWriteTime = 0;
231 return E_NOTIMPL; 230 return E_NOTIMPL;
232 } 231 }
OLDNEW
« no previous file with comments | « src/utils/win/SkDWriteFontFileStream.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698