Index: core/src/fxge/win32/fx_win32_dwrite.cpp |
diff --git a/core/src/fxge/win32/fx_win32_dwrite.cpp b/core/src/fxge/win32/fx_win32_dwrite.cpp |
index 65a35d86a17bcf3d98365e476bd2814ff87649cd..5a3c16c2aff47a3ded9724f5bc609871850b0409 100644 |
--- a/core/src/fxge/win32/fx_win32_dwrite.cpp |
+++ b/core/src/fxge/win32/fx_win32_dwrite.cpp |
@@ -9,396 +9,362 @@ |
#include "../../../include/fxge/fx_ge_win32.h" |
#include "dwrite_int.h" |
#include <dwrite.h> |
-typedef HRESULT (__stdcall *FuncType_DWriteCreateFactory)(__in DWRITE_FACTORY_TYPE, __in REFIID, __out IUnknown **); |
+typedef HRESULT(__stdcall* FuncType_DWriteCreateFactory)( |
+ __in DWRITE_FACTORY_TYPE, |
+ __in REFIID, |
+ __out IUnknown**); |
template <typename InterfaceType> |
-inline void SafeRelease(InterfaceType** currentObject) |
-{ |
- if (*currentObject != NULL) { |
- (*currentObject)->Release(); |
- *currentObject = NULL; |
- } |
+inline void SafeRelease(InterfaceType** currentObject) { |
+ if (*currentObject != NULL) { |
+ (*currentObject)->Release(); |
+ *currentObject = NULL; |
+ } |
} |
template <typename InterfaceType> |
-inline InterfaceType* SafeAcquire(InterfaceType* newObject) |
-{ |
- if (newObject != NULL) { |
- newObject->AddRef(); |
- } |
- return newObject; |
+inline InterfaceType* SafeAcquire(InterfaceType* newObject) { |
+ if (newObject != NULL) { |
+ newObject->AddRef(); |
+ } |
+ return newObject; |
} |
-class CDwFontFileStream final : public IDWriteFontFileStream |
-{ |
-public: |
- explicit CDwFontFileStream(void const* fontFileReferenceKey, UINT32 fontFileReferenceKeySize); |
- virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void** ppvObject); |
- virtual ULONG STDMETHODCALLTYPE AddRef(); |
- virtual ULONG STDMETHODCALLTYPE Release(); |
- virtual HRESULT STDMETHODCALLTYPE ReadFileFragment(void const** fragmentStart, UINT64 fileOffset, UINT64 fragmentSize, OUT void** fragmentContext); |
- virtual void STDMETHODCALLTYPE ReleaseFileFragment(void* fragmentContext); |
- virtual HRESULT STDMETHODCALLTYPE GetFileSize(OUT UINT64* fileSize); |
- virtual HRESULT STDMETHODCALLTYPE GetLastWriteTime(OUT UINT64* lastWriteTime); |
- bool IsInitialized() |
- { |
- return resourcePtr_ != NULL; |
- } |
-private: |
- ULONG refCount_; |
- void const* resourcePtr_; |
- DWORD resourceSize_; |
+class CDwFontFileStream final : public IDWriteFontFileStream { |
+ public: |
+ explicit CDwFontFileStream(void const* fontFileReferenceKey, |
+ UINT32 fontFileReferenceKeySize); |
+ virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, |
+ void** ppvObject); |
+ virtual ULONG STDMETHODCALLTYPE AddRef(); |
+ virtual ULONG STDMETHODCALLTYPE Release(); |
+ virtual HRESULT STDMETHODCALLTYPE |
+ ReadFileFragment(void const** fragmentStart, |
+ UINT64 fileOffset, |
+ UINT64 fragmentSize, |
+ OUT void** fragmentContext); |
+ virtual void STDMETHODCALLTYPE ReleaseFileFragment(void* fragmentContext); |
+ virtual HRESULT STDMETHODCALLTYPE GetFileSize(OUT UINT64* fileSize); |
+ virtual HRESULT STDMETHODCALLTYPE GetLastWriteTime(OUT UINT64* lastWriteTime); |
+ bool IsInitialized() { return resourcePtr_ != NULL; } |
+ |
+ private: |
+ ULONG refCount_; |
+ void const* resourcePtr_; |
+ DWORD resourceSize_; |
}; |
-class CDwFontFileLoader final : public IDWriteFontFileLoader |
-{ |
-public: |
- virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void** ppvObject); |
- virtual ULONG STDMETHODCALLTYPE AddRef(); |
- virtual ULONG STDMETHODCALLTYPE Release(); |
- virtual HRESULT STDMETHODCALLTYPE CreateStreamFromKey(void const* fontFileReferenceKey, UINT32 fontFileReferenceKeySize, OUT IDWriteFontFileStream** fontFileStream); |
+class CDwFontFileLoader final : public IDWriteFontFileLoader { |
+ public: |
+ virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, |
+ void** ppvObject); |
+ virtual ULONG STDMETHODCALLTYPE AddRef(); |
+ virtual ULONG STDMETHODCALLTYPE Release(); |
+ virtual HRESULT STDMETHODCALLTYPE |
+ CreateStreamFromKey(void const* fontFileReferenceKey, |
+ UINT32 fontFileReferenceKeySize, |
+ OUT IDWriteFontFileStream** fontFileStream); |
- static IDWriteFontFileLoader* GetLoader() |
- { |
- if (instance_ == NULL) { |
- instance_ = new CDwFontFileLoader(); |
- } |
- return instance_; |
+ static IDWriteFontFileLoader* GetLoader() { |
+ if (instance_ == NULL) { |
+ instance_ = new CDwFontFileLoader(); |
} |
- static bool IsLoaderInitialized() |
- { |
- return instance_ != NULL; |
- } |
-private: |
- CDwFontFileLoader(); |
- ULONG refCount_; |
- static IDWriteFontFileLoader* instance_; |
+ return instance_; |
+ } |
+ static bool IsLoaderInitialized() { return instance_ != NULL; } |
+ |
+ private: |
+ CDwFontFileLoader(); |
+ ULONG refCount_; |
+ static IDWriteFontFileLoader* instance_; |
}; |
-class CDwFontContext |
-{ |
-public: |
- CDwFontContext(IDWriteFactory* dwriteFactory); |
- ~CDwFontContext(); |
- HRESULT Initialize(); |
-private: |
- CDwFontContext(CDwFontContext const&); |
- void operator=(CDwFontContext const&); |
- HRESULT hr_; |
- IDWriteFactory* dwriteFactory_; |
+class CDwFontContext { |
+ public: |
+ CDwFontContext(IDWriteFactory* dwriteFactory); |
+ ~CDwFontContext(); |
+ HRESULT Initialize(); |
+ |
+ private: |
+ CDwFontContext(CDwFontContext const&); |
+ void operator=(CDwFontContext const&); |
+ HRESULT hr_; |
+ IDWriteFactory* dwriteFactory_; |
}; |
-class CDwGdiTextRenderer |
-{ |
-public: |
- CDwGdiTextRenderer( |
- CFX_DIBitmap* pBitmap, |
- IDWriteBitmapRenderTarget* bitmapRenderTarget, |
- IDWriteRenderingParams* renderingParams |
- ); |
- ~CDwGdiTextRenderer(); |
- HRESULT STDMETHODCALLTYPE DrawGlyphRun( |
- const FX_RECT& text_bbox, |
- __in_opt CFX_ClipRgn* pClipRgn, |
- __in_opt DWRITE_MATRIX const* pMatrix, |
- FLOAT baselineOriginX, |
- FLOAT baselineOriginY, |
- DWRITE_MEASURING_MODE measuringMode, |
- __in DWRITE_GLYPH_RUN const* glyphRun, |
- const COLORREF& textColor |
- ); |
-private: |
- CFX_DIBitmap* pBitmap_; |
- IDWriteBitmapRenderTarget* pRenderTarget_; |
- IDWriteRenderingParams* pRenderingParams_; |
+class CDwGdiTextRenderer { |
+ public: |
+ CDwGdiTextRenderer(CFX_DIBitmap* pBitmap, |
+ IDWriteBitmapRenderTarget* bitmapRenderTarget, |
+ IDWriteRenderingParams* renderingParams); |
+ ~CDwGdiTextRenderer(); |
+ HRESULT STDMETHODCALLTYPE DrawGlyphRun(const FX_RECT& text_bbox, |
+ __in_opt CFX_ClipRgn* pClipRgn, |
+ __in_opt DWRITE_MATRIX const* pMatrix, |
+ FLOAT baselineOriginX, |
+ FLOAT baselineOriginY, |
+ DWRITE_MEASURING_MODE measuringMode, |
+ __in DWRITE_GLYPH_RUN const* glyphRun, |
+ const COLORREF& textColor); |
+ |
+ private: |
+ CFX_DIBitmap* pBitmap_; |
+ IDWriteBitmapRenderTarget* pRenderTarget_; |
+ IDWriteRenderingParams* pRenderingParams_; |
}; |
-CDWriteExt::CDWriteExt() |
-{ |
- m_hModule = NULL; |
- m_pDWriteFactory = NULL; |
- m_pDwFontContext = NULL; |
- m_pDwTextRenderer = NULL; |
+CDWriteExt::CDWriteExt() { |
+ m_hModule = NULL; |
+ m_pDWriteFactory = NULL; |
+ m_pDwFontContext = NULL; |
+ m_pDwTextRenderer = NULL; |
} |
-void CDWriteExt::Load() |
-{ |
-} |
-void CDWriteExt::Unload() |
-{ |
- if (m_pDwFontContext) { |
- delete (CDwFontContext*)m_pDwFontContext; |
- m_pDwFontContext = NULL; |
- } |
- SafeRelease((IDWriteFactory**)&m_pDWriteFactory); |
+void CDWriteExt::Load() {} |
+void CDWriteExt::Unload() { |
+ if (m_pDwFontContext) { |
+ delete (CDwFontContext*)m_pDwFontContext; |
+ m_pDwFontContext = NULL; |
+ } |
+ SafeRelease((IDWriteFactory**)&m_pDWriteFactory); |
} |
-CDWriteExt::~CDWriteExt() |
-{ |
- Unload(); |
+CDWriteExt::~CDWriteExt() { |
+ Unload(); |
} |
-LPVOID CDWriteExt::DwCreateFontFaceFromStream(uint8_t* pData, FX_DWORD size, int simulation_style) |
-{ |
- IDWriteFactory* pDwFactory = (IDWriteFactory*)m_pDWriteFactory; |
- IDWriteFontFile* pDwFontFile = NULL; |
- IDWriteFontFace* pDwFontFace = NULL; |
- BOOL isSupportedFontType = FALSE; |
- DWRITE_FONT_FILE_TYPE fontFileType; |
- DWRITE_FONT_FACE_TYPE fontFaceType; |
- UINT32 numberOfFaces; |
- DWRITE_FONT_SIMULATIONS fontStyle = (DWRITE_FONT_SIMULATIONS)(simulation_style & 3); |
- HRESULT hr = S_OK; |
- hr = pDwFactory->CreateCustomFontFileReference( |
- (void const*)pData, |
- (UINT32)size, |
- CDwFontFileLoader::GetLoader(), |
- &pDwFontFile |
- ); |
- if (FAILED(hr)) { |
- goto failed; |
- } |
- hr = pDwFontFile->Analyze( |
- &isSupportedFontType, |
- &fontFileType, |
- &fontFaceType, |
- &numberOfFaces |
- ); |
- if (FAILED(hr) || !isSupportedFontType || fontFaceType == DWRITE_FONT_FACE_TYPE_UNKNOWN) { |
- goto failed; |
- } |
- hr = pDwFactory->CreateFontFace( |
- fontFaceType, |
- 1, |
- &pDwFontFile, |
- 0, |
- fontStyle, |
- &pDwFontFace |
- ); |
- if (FAILED(hr)) { |
- goto failed; |
- } |
- SafeRelease(&pDwFontFile); |
- return pDwFontFace; |
+LPVOID CDWriteExt::DwCreateFontFaceFromStream(uint8_t* pData, |
+ FX_DWORD size, |
+ int simulation_style) { |
+ IDWriteFactory* pDwFactory = (IDWriteFactory*)m_pDWriteFactory; |
+ IDWriteFontFile* pDwFontFile = NULL; |
+ IDWriteFontFace* pDwFontFace = NULL; |
+ BOOL isSupportedFontType = FALSE; |
+ DWRITE_FONT_FILE_TYPE fontFileType; |
+ DWRITE_FONT_FACE_TYPE fontFaceType; |
+ UINT32 numberOfFaces; |
+ DWRITE_FONT_SIMULATIONS fontStyle = |
+ (DWRITE_FONT_SIMULATIONS)(simulation_style & 3); |
+ HRESULT hr = S_OK; |
+ hr = pDwFactory->CreateCustomFontFileReference( |
+ (void const*)pData, (UINT32)size, CDwFontFileLoader::GetLoader(), |
+ &pDwFontFile); |
+ if (FAILED(hr)) { |
+ goto failed; |
+ } |
+ hr = pDwFontFile->Analyze(&isSupportedFontType, &fontFileType, &fontFaceType, |
+ &numberOfFaces); |
+ if (FAILED(hr) || !isSupportedFontType || |
+ fontFaceType == DWRITE_FONT_FACE_TYPE_UNKNOWN) { |
+ goto failed; |
+ } |
+ hr = pDwFactory->CreateFontFace(fontFaceType, 1, &pDwFontFile, 0, fontStyle, |
+ &pDwFontFace); |
+ if (FAILED(hr)) { |
+ goto failed; |
+ } |
+ SafeRelease(&pDwFontFile); |
+ return pDwFontFace; |
failed: |
- SafeRelease(&pDwFontFile); |
- return NULL; |
+ SafeRelease(&pDwFontFile); |
+ return NULL; |
} |
-FX_BOOL CDWriteExt::DwCreateRenderingTarget(CFX_DIBitmap* pBitmap, void** renderTarget) |
-{ |
- if (pBitmap->GetFormat() > FXDIB_Argb) { |
- return FALSE; |
- } |
- IDWriteFactory* pDwFactory = (IDWriteFactory*)m_pDWriteFactory; |
- IDWriteGdiInterop* pGdiInterop = NULL; |
- IDWriteBitmapRenderTarget* pBitmapRenderTarget = NULL; |
- IDWriteRenderingParams* pRenderingParams = NULL; |
- HRESULT hr = S_OK; |
- hr = pDwFactory->GetGdiInterop(&pGdiInterop); |
- if (FAILED(hr)) { |
- goto failed; |
- } |
- hr = pGdiInterop->CreateBitmapRenderTarget(NULL, pBitmap->GetWidth(), pBitmap->GetHeight(), |
- &pBitmapRenderTarget); |
- if (FAILED(hr)) { |
- goto failed; |
- } |
- hr = pDwFactory->CreateCustomRenderingParams( |
- 1.0f, |
- 0.0f, |
- 1.0f, |
- DWRITE_PIXEL_GEOMETRY_RGB, |
- DWRITE_RENDERING_MODE_DEFAULT, |
- &pRenderingParams |
- ); |
- if (FAILED(hr)) { |
- goto failed; |
- } |
- hr = pBitmapRenderTarget->SetPixelsPerDip(1.0f); |
- if (FAILED(hr)) { |
- goto failed; |
- } |
- *(CDwGdiTextRenderer**)renderTarget = new CDwGdiTextRenderer(pBitmap, pBitmapRenderTarget, pRenderingParams); |
- SafeRelease(&pGdiInterop); |
- SafeRelease(&pBitmapRenderTarget); |
- SafeRelease(&pRenderingParams); |
- return TRUE; |
-failed: |
- SafeRelease(&pGdiInterop); |
- SafeRelease(&pBitmapRenderTarget); |
- SafeRelease(&pRenderingParams); |
+FX_BOOL CDWriteExt::DwCreateRenderingTarget(CFX_DIBitmap* pBitmap, |
+ void** renderTarget) { |
+ if (pBitmap->GetFormat() > FXDIB_Argb) { |
return FALSE; |
+ } |
+ IDWriteFactory* pDwFactory = (IDWriteFactory*)m_pDWriteFactory; |
+ IDWriteGdiInterop* pGdiInterop = NULL; |
+ IDWriteBitmapRenderTarget* pBitmapRenderTarget = NULL; |
+ IDWriteRenderingParams* pRenderingParams = NULL; |
+ HRESULT hr = S_OK; |
+ hr = pDwFactory->GetGdiInterop(&pGdiInterop); |
+ if (FAILED(hr)) { |
+ goto failed; |
+ } |
+ hr = pGdiInterop->CreateBitmapRenderTarget( |
+ NULL, pBitmap->GetWidth(), pBitmap->GetHeight(), &pBitmapRenderTarget); |
+ if (FAILED(hr)) { |
+ goto failed; |
+ } |
+ hr = pDwFactory->CreateCustomRenderingParams( |
+ 1.0f, 0.0f, 1.0f, DWRITE_PIXEL_GEOMETRY_RGB, |
+ DWRITE_RENDERING_MODE_DEFAULT, &pRenderingParams); |
+ if (FAILED(hr)) { |
+ goto failed; |
+ } |
+ hr = pBitmapRenderTarget->SetPixelsPerDip(1.0f); |
+ if (FAILED(hr)) { |
+ goto failed; |
+ } |
+ *(CDwGdiTextRenderer**)renderTarget = |
+ new CDwGdiTextRenderer(pBitmap, pBitmapRenderTarget, pRenderingParams); |
+ SafeRelease(&pGdiInterop); |
+ SafeRelease(&pBitmapRenderTarget); |
+ SafeRelease(&pRenderingParams); |
+ return TRUE; |
+failed: |
+ SafeRelease(&pGdiInterop); |
+ SafeRelease(&pBitmapRenderTarget); |
+ SafeRelease(&pRenderingParams); |
+ return FALSE; |
} |
-FX_BOOL CDWriteExt::DwRendingString(void* renderTarget, CFX_ClipRgn* pClipRgn, FX_RECT& stringRect, CFX_AffineMatrix* pMatrix, |
- void *font, FX_FLOAT font_size, FX_ARGB text_color, |
- int glyph_count, unsigned short* glyph_indices, |
- FX_FLOAT baselineOriginX, FX_FLOAT baselineOriginY, |
+FX_BOOL CDWriteExt::DwRendingString(void* renderTarget, |
+ CFX_ClipRgn* pClipRgn, |
+ FX_RECT& stringRect, |
+ CFX_AffineMatrix* pMatrix, |
+ void* font, |
+ FX_FLOAT font_size, |
+ FX_ARGB text_color, |
+ int glyph_count, |
+ unsigned short* glyph_indices, |
+ FX_FLOAT baselineOriginX, |
+ FX_FLOAT baselineOriginY, |
void* glyph_offsets, |
- FX_FLOAT* glyph_advances) |
-{ |
- if (renderTarget == NULL) { |
- return TRUE; |
- } |
- CDwGdiTextRenderer* pTextRenderer = (CDwGdiTextRenderer*)renderTarget; |
- DWRITE_MATRIX transform; |
- DWRITE_GLYPH_RUN glyphRun; |
- HRESULT hr = S_OK; |
- if (pMatrix) { |
- transform.m11 = pMatrix->a; |
- transform.m12 = pMatrix->b; |
- transform.m21 = pMatrix->c; |
- transform.m22 = pMatrix->d; |
- transform.dx = pMatrix->e; |
- transform.dy = pMatrix->f; |
- } |
- glyphRun.fontFace = (IDWriteFontFace*)font; |
- glyphRun.fontEmSize = font_size; |
- glyphRun.glyphCount = glyph_count; |
- glyphRun.glyphIndices = glyph_indices; |
- glyphRun.glyphAdvances = glyph_advances; |
- glyphRun.glyphOffsets = (DWRITE_GLYPH_OFFSET*)glyph_offsets; |
- glyphRun.isSideways = FALSE; |
- glyphRun.bidiLevel = 0; |
- hr = pTextRenderer->DrawGlyphRun( |
- stringRect, |
- pClipRgn, |
- pMatrix ? &transform : NULL, |
- baselineOriginX, baselineOriginY, |
- DWRITE_MEASURING_MODE_NATURAL, |
- &glyphRun, |
- RGB(FXARGB_R(text_color), FXARGB_G(text_color), FXARGB_B(text_color)) |
- ); |
- return SUCCEEDED(hr) ? TRUE : FALSE; |
+ FX_FLOAT* glyph_advances) { |
+ if (renderTarget == NULL) { |
+ return TRUE; |
+ } |
+ CDwGdiTextRenderer* pTextRenderer = (CDwGdiTextRenderer*)renderTarget; |
+ DWRITE_MATRIX transform; |
+ DWRITE_GLYPH_RUN glyphRun; |
+ HRESULT hr = S_OK; |
+ if (pMatrix) { |
+ transform.m11 = pMatrix->a; |
+ transform.m12 = pMatrix->b; |
+ transform.m21 = pMatrix->c; |
+ transform.m22 = pMatrix->d; |
+ transform.dx = pMatrix->e; |
+ transform.dy = pMatrix->f; |
+ } |
+ glyphRun.fontFace = (IDWriteFontFace*)font; |
+ glyphRun.fontEmSize = font_size; |
+ glyphRun.glyphCount = glyph_count; |
+ glyphRun.glyphIndices = glyph_indices; |
+ glyphRun.glyphAdvances = glyph_advances; |
+ glyphRun.glyphOffsets = (DWRITE_GLYPH_OFFSET*)glyph_offsets; |
+ glyphRun.isSideways = FALSE; |
+ glyphRun.bidiLevel = 0; |
+ hr = pTextRenderer->DrawGlyphRun( |
+ stringRect, pClipRgn, pMatrix ? &transform : NULL, baselineOriginX, |
+ baselineOriginY, DWRITE_MEASURING_MODE_NATURAL, &glyphRun, |
+ RGB(FXARGB_R(text_color), FXARGB_G(text_color), FXARGB_B(text_color))); |
+ return SUCCEEDED(hr) ? TRUE : FALSE; |
} |
-void CDWriteExt::DwDeleteRenderingTarget(void* renderTarget) |
-{ |
- delete (CDwGdiTextRenderer*)renderTarget; |
+void CDWriteExt::DwDeleteRenderingTarget(void* renderTarget) { |
+ delete (CDwGdiTextRenderer*)renderTarget; |
} |
-void CDWriteExt::DwDeleteFont(void* pFont) |
-{ |
- if (pFont) { |
- SafeRelease((IDWriteFontFace**)&pFont); |
- } |
+void CDWriteExt::DwDeleteFont(void* pFont) { |
+ if (pFont) { |
+ SafeRelease((IDWriteFontFace**)&pFont); |
+ } |
} |
-CDwFontFileStream::CDwFontFileStream(void const* fontFileReferenceKey, UINT32 fontFileReferenceKeySize) |
-{ |
- refCount_ = 0; |
- resourcePtr_ = fontFileReferenceKey; |
- resourceSize_ = fontFileReferenceKeySize; |
+CDwFontFileStream::CDwFontFileStream(void const* fontFileReferenceKey, |
+ UINT32 fontFileReferenceKeySize) { |
+ refCount_ = 0; |
+ resourcePtr_ = fontFileReferenceKey; |
+ resourceSize_ = fontFileReferenceKeySize; |
} |
-HRESULT STDMETHODCALLTYPE CDwFontFileStream::QueryInterface(REFIID iid, void** ppvObject) |
-{ |
- if (iid == IID_IUnknown || iid == __uuidof(IDWriteFontFileStream)) { |
- *ppvObject = this; |
- AddRef(); |
- return S_OK; |
- } |
- *ppvObject = NULL; |
- return E_NOINTERFACE; |
+HRESULT STDMETHODCALLTYPE CDwFontFileStream::QueryInterface(REFIID iid, |
+ void** ppvObject) { |
+ if (iid == IID_IUnknown || iid == __uuidof(IDWriteFontFileStream)) { |
+ *ppvObject = this; |
+ AddRef(); |
+ return S_OK; |
+ } |
+ *ppvObject = NULL; |
+ return E_NOINTERFACE; |
} |
-ULONG STDMETHODCALLTYPE CDwFontFileStream::AddRef() |
-{ |
- return InterlockedIncrement((long*)(&refCount_)); |
+ULONG STDMETHODCALLTYPE CDwFontFileStream::AddRef() { |
+ return InterlockedIncrement((long*)(&refCount_)); |
} |
-ULONG STDMETHODCALLTYPE CDwFontFileStream::Release() |
-{ |
- ULONG newCount = InterlockedDecrement((long*)(&refCount_)); |
- if (newCount == 0) { |
- delete this; |
- } |
- return newCount; |
+ULONG STDMETHODCALLTYPE CDwFontFileStream::Release() { |
+ ULONG newCount = InterlockedDecrement((long*)(&refCount_)); |
+ if (newCount == 0) { |
+ delete this; |
+ } |
+ return newCount; |
} |
-HRESULT STDMETHODCALLTYPE CDwFontFileStream::ReadFileFragment( |
- void const** fragmentStart, |
- UINT64 fileOffset, |
- UINT64 fragmentSize, |
- OUT void** fragmentContext |
-) |
-{ |
- if (fileOffset <= resourceSize_ && fragmentSize <= resourceSize_ - fileOffset) { |
- *fragmentStart = static_cast<uint8_t const*>(resourcePtr_) + static_cast<size_t>(fileOffset); |
- *fragmentContext = NULL; |
- return S_OK; |
- } |
- *fragmentStart = NULL; |
+HRESULT STDMETHODCALLTYPE |
+CDwFontFileStream::ReadFileFragment(void const** fragmentStart, |
+ UINT64 fileOffset, |
+ UINT64 fragmentSize, |
+ OUT void** fragmentContext) { |
+ if (fileOffset <= resourceSize_ && |
+ fragmentSize <= resourceSize_ - fileOffset) { |
+ *fragmentStart = static_cast<uint8_t const*>(resourcePtr_) + |
+ static_cast<size_t>(fileOffset); |
*fragmentContext = NULL; |
- return E_FAIL; |
-} |
-void STDMETHODCALLTYPE CDwFontFileStream::ReleaseFileFragment(void* fragmentContext) |
-{ |
-} |
-HRESULT STDMETHODCALLTYPE CDwFontFileStream::GetFileSize(OUT UINT64* fileSize) |
-{ |
- *fileSize = resourceSize_; |
return S_OK; |
+ } |
+ *fragmentStart = NULL; |
+ *fragmentContext = NULL; |
+ return E_FAIL; |
} |
-HRESULT STDMETHODCALLTYPE CDwFontFileStream::GetLastWriteTime(OUT UINT64* lastWriteTime) |
-{ |
- *lastWriteTime = 0; |
- return E_NOTIMPL; |
+void STDMETHODCALLTYPE |
+CDwFontFileStream::ReleaseFileFragment(void* fragmentContext) {} |
+HRESULT STDMETHODCALLTYPE CDwFontFileStream::GetFileSize(OUT UINT64* fileSize) { |
+ *fileSize = resourceSize_; |
+ return S_OK; |
+} |
+HRESULT STDMETHODCALLTYPE |
+CDwFontFileStream::GetLastWriteTime(OUT UINT64* lastWriteTime) { |
+ *lastWriteTime = 0; |
+ return E_NOTIMPL; |
} |
IDWriteFontFileLoader* CDwFontFileLoader::instance_ = NULL; |
-CDwFontFileLoader::CDwFontFileLoader() : |
- refCount_(0) |
-{ |
+CDwFontFileLoader::CDwFontFileLoader() : refCount_(0) {} |
+HRESULT STDMETHODCALLTYPE CDwFontFileLoader::QueryInterface(REFIID iid, |
+ void** ppvObject) { |
+ if (iid == IID_IUnknown || iid == __uuidof(IDWriteFontFileLoader)) { |
+ *ppvObject = this; |
+ AddRef(); |
+ return S_OK; |
+ } |
+ *ppvObject = NULL; |
+ return E_NOINTERFACE; |
} |
-HRESULT STDMETHODCALLTYPE CDwFontFileLoader::QueryInterface(REFIID iid, void** ppvObject) |
-{ |
- if (iid == IID_IUnknown || iid == __uuidof(IDWriteFontFileLoader)) { |
- *ppvObject = this; |
- AddRef(); |
- return S_OK; |
- } |
- *ppvObject = NULL; |
- return E_NOINTERFACE; |
+ULONG STDMETHODCALLTYPE CDwFontFileLoader::AddRef() { |
+ return InterlockedIncrement((long*)(&refCount_)); |
} |
-ULONG STDMETHODCALLTYPE CDwFontFileLoader::AddRef() |
-{ |
- return InterlockedIncrement((long*)(&refCount_)); |
-} |
-ULONG STDMETHODCALLTYPE CDwFontFileLoader::Release() |
-{ |
- ULONG newCount = InterlockedDecrement((long*)(&refCount_)); |
- if (newCount == 0) { |
- instance_ = NULL; |
- delete this; |
- } |
- return newCount; |
+ULONG STDMETHODCALLTYPE CDwFontFileLoader::Release() { |
+ ULONG newCount = InterlockedDecrement((long*)(&refCount_)); |
+ if (newCount == 0) { |
+ instance_ = NULL; |
+ delete this; |
+ } |
+ return newCount; |
} |
HRESULT STDMETHODCALLTYPE CDwFontFileLoader::CreateStreamFromKey( |
void const* fontFileReferenceKey, |
UINT32 fontFileReferenceKeySize, |
- OUT IDWriteFontFileStream** fontFileStream |
-) |
-{ |
- *fontFileStream = NULL; |
- CDwFontFileStream* stream = new CDwFontFileStream(fontFileReferenceKey, fontFileReferenceKeySize); |
- if (!stream->IsInitialized()) { |
- delete stream; |
- return E_FAIL; |
- } |
- *fontFileStream = SafeAcquire(stream); |
- return S_OK; |
-} |
-CDwFontContext::CDwFontContext(IDWriteFactory* dwriteFactory) : |
- hr_(S_FALSE), |
- dwriteFactory_(SafeAcquire(dwriteFactory)) |
-{ |
-} |
-CDwFontContext::~CDwFontContext() |
-{ |
- if(dwriteFactory_ && hr_ == S_OK) { |
- dwriteFactory_->UnregisterFontFileLoader(CDwFontFileLoader::GetLoader()); |
- } |
- SafeRelease(&dwriteFactory_); |
+ OUT IDWriteFontFileStream** fontFileStream) { |
+ *fontFileStream = NULL; |
+ CDwFontFileStream* stream = |
+ new CDwFontFileStream(fontFileReferenceKey, fontFileReferenceKeySize); |
+ if (!stream->IsInitialized()) { |
+ delete stream; |
+ return E_FAIL; |
+ } |
+ *fontFileStream = SafeAcquire(stream); |
+ return S_OK; |
} |
-HRESULT CDwFontContext::Initialize() |
-{ |
- if (hr_ == S_FALSE) { |
- return hr_ = dwriteFactory_->RegisterFontFileLoader(CDwFontFileLoader::GetLoader()); |
- } |
- return hr_; |
+CDwFontContext::CDwFontContext(IDWriteFactory* dwriteFactory) |
+ : hr_(S_FALSE), dwriteFactory_(SafeAcquire(dwriteFactory)) {} |
+CDwFontContext::~CDwFontContext() { |
+ if (dwriteFactory_ && hr_ == S_OK) { |
+ dwriteFactory_->UnregisterFontFileLoader(CDwFontFileLoader::GetLoader()); |
+ } |
+ SafeRelease(&dwriteFactory_); |
} |
-CDwGdiTextRenderer::CDwGdiTextRenderer(CFX_DIBitmap* pBitmap, IDWriteBitmapRenderTarget* bitmapRenderTarget, IDWriteRenderingParams* renderingParams): |
- pBitmap_(pBitmap), |
- pRenderTarget_(SafeAcquire(bitmapRenderTarget)), |
- pRenderingParams_(SafeAcquire(renderingParams)) |
-{ |
+HRESULT CDwFontContext::Initialize() { |
+ if (hr_ == S_FALSE) { |
+ return hr_ = dwriteFactory_->RegisterFontFileLoader( |
+ CDwFontFileLoader::GetLoader()); |
+ } |
+ return hr_; |
} |
-CDwGdiTextRenderer::~CDwGdiTextRenderer() |
-{ |
- SafeRelease(&pRenderTarget_); |
- SafeRelease(&pRenderingParams_); |
+CDwGdiTextRenderer::CDwGdiTextRenderer( |
+ CFX_DIBitmap* pBitmap, |
+ IDWriteBitmapRenderTarget* bitmapRenderTarget, |
+ IDWriteRenderingParams* renderingParams) |
+ : pBitmap_(pBitmap), |
+ pRenderTarget_(SafeAcquire(bitmapRenderTarget)), |
+ pRenderingParams_(SafeAcquire(renderingParams)) {} |
+CDwGdiTextRenderer::~CDwGdiTextRenderer() { |
+ SafeRelease(&pRenderTarget_); |
+ SafeRelease(&pRenderingParams_); |
} |
STDMETHODIMP CDwGdiTextRenderer::DrawGlyphRun( |
const FX_RECT& text_bbox, |
@@ -408,60 +374,34 @@ STDMETHODIMP CDwGdiTextRenderer::DrawGlyphRun( |
FLOAT baselineOriginY, |
DWRITE_MEASURING_MODE measuringMode, |
__in DWRITE_GLYPH_RUN const* glyphRun, |
- const COLORREF& textColor |
-) |
-{ |
- HRESULT hr = S_OK; |
- if (pMatrix) { |
- hr = pRenderTarget_->SetCurrentTransform(pMatrix); |
- if (FAILED(hr)) { |
- return hr; |
- } |
- } |
- HDC hDC = pRenderTarget_->GetMemoryDC(); |
- HBITMAP hBitmap = (HBITMAP)::GetCurrentObject(hDC, OBJ_BITMAP); |
- BITMAP bitmap; |
- GetObject(hBitmap, sizeof bitmap, &bitmap); |
- CFX_DIBitmap dib; |
- dib.Create( |
- bitmap.bmWidth, |
- bitmap.bmHeight, |
- bitmap.bmBitsPixel == 24 ? FXDIB_Rgb : FXDIB_Rgb32, |
- (uint8_t*)bitmap.bmBits |
- ); |
- dib.CompositeBitmap( |
- text_bbox.left, |
- text_bbox.top, |
- text_bbox.Width(), |
- text_bbox.Height(), |
- pBitmap_, |
- text_bbox.left, |
- text_bbox.top, |
- FXDIB_BLEND_NORMAL, |
- NULL |
- ); |
- hr = pRenderTarget_->DrawGlyphRun( |
- baselineOriginX, |
- baselineOriginY, |
- measuringMode, |
- glyphRun, |
- pRenderingParams_, |
- textColor |
- ); |
+ const COLORREF& textColor) { |
+ HRESULT hr = S_OK; |
+ if (pMatrix) { |
+ hr = pRenderTarget_->SetCurrentTransform(pMatrix); |
if (FAILED(hr)) { |
- return hr; |
+ return hr; |
} |
- pBitmap_->CompositeBitmap( |
- text_bbox.left, |
- text_bbox.top, |
- text_bbox.Width(), |
- text_bbox.Height(), |
- &dib, |
- text_bbox.left, |
- text_bbox.top, |
- FXDIB_BLEND_NORMAL, |
- pClipRgn |
- ); |
+ } |
+ HDC hDC = pRenderTarget_->GetMemoryDC(); |
+ HBITMAP hBitmap = (HBITMAP)::GetCurrentObject(hDC, OBJ_BITMAP); |
+ BITMAP bitmap; |
+ GetObject(hBitmap, sizeof bitmap, &bitmap); |
+ CFX_DIBitmap dib; |
+ dib.Create(bitmap.bmWidth, bitmap.bmHeight, |
+ bitmap.bmBitsPixel == 24 ? FXDIB_Rgb : FXDIB_Rgb32, |
+ (uint8_t*)bitmap.bmBits); |
+ dib.CompositeBitmap(text_bbox.left, text_bbox.top, text_bbox.Width(), |
+ text_bbox.Height(), pBitmap_, text_bbox.left, |
+ text_bbox.top, FXDIB_BLEND_NORMAL, NULL); |
+ hr = pRenderTarget_->DrawGlyphRun(baselineOriginX, baselineOriginY, |
+ measuringMode, glyphRun, pRenderingParams_, |
+ textColor); |
+ if (FAILED(hr)) { |
return hr; |
+ } |
+ pBitmap_->CompositeBitmap(text_bbox.left, text_bbox.top, text_bbox.Width(), |
+ text_bbox.Height(), &dib, text_bbox.left, |
+ text_bbox.top, FXDIB_BLEND_NORMAL, pClipRgn); |
+ return hr; |
} |
#endif |