1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/gfx/skia/trunk/src/utils/win/SkDWriteFontFileStream.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,76 @@ 1.4 +/* 1.5 + * Copyright 2012 Google Inc. 1.6 + * 1.7 + * Use of this source code is governed by a BSD-style license that can be 1.8 + * found in the LICENSE file. 1.9 + */ 1.10 + 1.11 +#ifndef SkDWriteFontFileStream_DEFINED 1.12 +#define SkDWriteFontFileStream_DEFINED 1.13 + 1.14 +#include "SkTypes.h" 1.15 + 1.16 +#include "SkStream.h" 1.17 +#include "SkTScopedComPtr.h" 1.18 + 1.19 +#include <dwrite.h> 1.20 + 1.21 +/** 1.22 + * An SkStream backed by an IDWriteFontFileStream. 1.23 + * This allows Skia code to read an IDWriteFontFileStream. 1.24 + */ 1.25 +class SkDWriteFontFileStream : public SkStreamMemory { 1.26 +public: 1.27 + explicit SkDWriteFontFileStream(IDWriteFontFileStream* fontFileStream); 1.28 + virtual ~SkDWriteFontFileStream(); 1.29 + 1.30 + virtual size_t read(void* buffer, size_t size) SK_OVERRIDE; 1.31 + virtual bool isAtEnd() const SK_OVERRIDE; 1.32 + virtual bool rewind() SK_OVERRIDE; 1.33 + virtual SkDWriteFontFileStream* duplicate() const SK_OVERRIDE; 1.34 + virtual size_t getPosition() const SK_OVERRIDE; 1.35 + virtual bool seek(size_t position) SK_OVERRIDE; 1.36 + virtual bool move(long offset) SK_OVERRIDE; 1.37 + virtual SkDWriteFontFileStream* fork() const SK_OVERRIDE; 1.38 + virtual size_t getLength() const SK_OVERRIDE; 1.39 + virtual const void* getMemoryBase() SK_OVERRIDE; 1.40 + 1.41 +private: 1.42 + SkTScopedComPtr<IDWriteFontFileStream> fFontFileStream; 1.43 + size_t fPos; 1.44 + const void* fLockedMemory; 1.45 + void* fFragmentLock; 1.46 +}; 1.47 + 1.48 +/** 1.49 + * An IDWriteFontFileStream backed by an SkStream. 1.50 + * This allows DirectWrite to read an SkStream. 1.51 + */ 1.52 +class SkDWriteFontFileStreamWrapper : public IDWriteFontFileStream { 1.53 +public: 1.54 + // IUnknown methods 1.55 + virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void** ppvObject); 1.56 + virtual ULONG STDMETHODCALLTYPE AddRef(); 1.57 + virtual ULONG STDMETHODCALLTYPE Release(); 1.58 + 1.59 + // IDWriteFontFileStream methods 1.60 + virtual HRESULT STDMETHODCALLTYPE ReadFileFragment( 1.61 + void const** fragmentStart, 1.62 + UINT64 fileOffset, 1.63 + UINT64 fragmentSize, 1.64 + void** fragmentContext); 1.65 + 1.66 + virtual void STDMETHODCALLTYPE ReleaseFileFragment(void* fragmentContext); 1.67 + virtual HRESULT STDMETHODCALLTYPE GetFileSize(UINT64* fileSize); 1.68 + virtual HRESULT STDMETHODCALLTYPE GetLastWriteTime(UINT64* lastWriteTime); 1.69 + 1.70 + static HRESULT Create(SkStream* stream, SkDWriteFontFileStreamWrapper** streamFontFileStream); 1.71 + 1.72 +private: 1.73 + explicit SkDWriteFontFileStreamWrapper(SkStream* stream); 1.74 + 1.75 + ULONG fRefCount; 1.76 + SkAutoTUnref<SkStream> fStream; 1.77 + SkMutex fStreamMutex; 1.78 +}; 1.79 +#endif