Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
SkDWriteFontFileStream.h
Go to the documentation of this file.
1/*
2 * Copyright 2012 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SkDWriteFontFileStream_DEFINED
9#define SkDWriteFontFileStream_DEFINED
10
12
17
18#include <dwrite.h>
19
20/**
21 * An SkStream backed by an IDWriteFontFileStream.
22 * This allows Skia code to read an IDWriteFontFileStream.
23 */
25public:
26 explicit SkDWriteFontFileStream(IDWriteFontFileStream* fontFileStream);
28
29 size_t read(void* buffer, size_t size) override;
30 bool isAtEnd() const override;
31 bool rewind() override;
32 size_t getPosition() const override;
33 bool seek(size_t position) override;
34 bool move(long offset) override;
35 size_t getLength() const override;
36 const void* getMemoryBase() override;
37
38 std::unique_ptr<SkDWriteFontFileStream> duplicate() const {
39 return std::unique_ptr<SkDWriteFontFileStream>(this->onDuplicate());
40 }
41 std::unique_ptr<SkDWriteFontFileStream> fork() const {
42 return std::unique_ptr<SkDWriteFontFileStream>(this->onFork());
43 }
44
45private:
47 SkDWriteFontFileStream* onFork() const override;
48
49 SkTScopedComPtr<IDWriteFontFileStream> fFontFileStream;
50 size_t fPos;
51 const void* fLockedMemory;
52 void* fFragmentLock;
53};
54
55/**
56 * An IDWriteFontFileStream backed by an SkStream.
57 * This allows DirectWrite to read an SkStream.
58 */
59class SkDWriteFontFileStreamWrapper : public IDWriteFontFileStream {
60public:
61 // IUnknown methods
62 SK_STDMETHODIMP QueryInterface(REFIID iid, void** ppvObject) override;
63 SK_STDMETHODIMP_(ULONG) AddRef() override;
64 SK_STDMETHODIMP_(ULONG) Release() override;
65
66 // IDWriteFontFileStream methods
68 void const** fragmentStart,
69 UINT64 fileOffset,
70 UINT64 fragmentSize,
71 void** fragmentContext) override;
72
73 SK_STDMETHODIMP_(void) ReleaseFileFragment(void* fragmentContext) override;
74 SK_STDMETHODIMP GetFileSize(UINT64* fileSize) override;
75 SK_STDMETHODIMP GetLastWriteTime(UINT64* lastWriteTime) override;
76
77 static HRESULT Create(SkStreamAsset* stream,
78 SkDWriteFontFileStreamWrapper** streamFontFileStream);
79
80private:
83
84 ULONG fRefCount;
85 std::unique_ptr<SkStreamAsset> fStream;
86 SkMutex fStreamMutex;
87};
88#endif
#define SK_STDMETHODIMP
Definition SkObjBase.h:22
static HRESULT Create(SkStreamAsset *stream, SkDWriteFontFileStreamWrapper **streamFontFileStream)
SK_STDMETHODIMP_(ULONG) AddRef() override
SK_STDMETHODIMP GetFileSize(UINT64 *fileSize) override
SK_STDMETHODIMP_(ULONG) Release() override
SK_STDMETHODIMP ReadFileFragment(void const **fragmentStart, UINT64 fileOffset, UINT64 fragmentSize, void **fragmentContext) override
SK_STDMETHODIMP QueryInterface(REFIID iid, void **ppvObject) override
SK_STDMETHODIMP GetLastWriteTime(UINT64 *lastWriteTime) override
SK_STDMETHODIMP_(void) ReleaseFileFragment(void *fragmentContext) override
SkDWriteFontFileStream * onDuplicate() const override
bool isAtEnd() const override
bool rewind() override
size_t read(void *buffer, size_t size) override
bool move(long offset) override
SkDWriteFontFileStream(IDWriteFontFileStream *fontFileStream)
size_t getLength() const override
SkDWriteFontFileStream * onFork() const override
bool seek(size_t position) override
const void * getMemoryBase() override
std::unique_ptr< SkDWriteFontFileStream > fork() const
~SkDWriteFontFileStream() override
size_t getPosition() const override
std::unique_ptr< SkDWriteFontFileStream > duplicate() const
static const uint8_t buffer[]
Point offset
DWORD ULONG