void DWriteContext::SetRenderingParams( const DWriteRenderingParams *params) { if (mDWriteFactory == NULL) return; IDWriteRenderingParams *renderingParams = NULL; D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode = D2D1_TEXT_ANTIALIAS_MODE_DEFAULT; HRESULT hr; if (params != NULL) { hr = mDWriteFactory->CreateCustomRenderingParams(params->gamma, params->enhancedContrast, params->clearTypeLevel, ToPixelGeometry(params->pixelGeometry), ToRenderingMode(params->renderingMode), &renderingParams); textAntialiasMode = ToTextAntialiasMode(params->textAntialiasMode); } else hr = mDWriteFactory->CreateRenderingParams(&renderingParams); if (SUCCEEDED(hr) && renderingParams != NULL) { SafeRelease(&mRenderingParams); mRenderingParams = renderingParams; mTextAntialiasMode = textAntialiasMode; } }
virtual HRESULT STDMETHODCALLTYPE CreateCustomRenderingParams( FLOAT gamma, FLOAT enhancedContrast, FLOAT clearTypeLevel, DWRITE_PIXEL_GEOMETRY pixelGeometry, DWRITE_RENDERING_MODE renderingMode, IDWriteRenderingParams** renderingParams ) { return orig_this->CreateCustomRenderingParams(gamma, enhancedContrast, clearTypeLevel, pixelGeometry, renderingMode, renderingParams); }
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 = FX_NEW CDwGdiTextRenderer(pBitmap, pBitmapRenderTarget, pRenderingParams); if (*(CDwGdiTextRenderer**)renderTarget == NULL) { goto failed; } SafeRelease(&pGdiInterop); SafeRelease(&pBitmapRenderTarget); SafeRelease(&pRenderingParams); return TRUE; failed: SafeRelease(&pGdiInterop); SafeRelease(&pBitmapRenderTarget); SafeRelease(&pRenderingParams); return FALSE; }
bool CDirectWriteRenderer::UpdateRenderingParams() { if (m_pRenderTarget == nullptr) return false; bool fUpdated = false; IDWriteFactory *pFactory = m_System.GetDWriteFactory(); if (pFactory != nullptr) { IDWriteRenderingParams *pRenderingParams; HRESULT hr = pFactory->CreateMonitorRenderingParams(m_hMonitor, &pRenderingParams); if (SUCCEEDED(hr)) { if (m_RenderingParams.Mask != 0) { IDWriteRenderingParams *pCustomRenderingParams; hr = pFactory->CreateCustomRenderingParams( (m_RenderingParams.Mask & RenderingParams::PARAM_GAMMA) != 0 ? m_RenderingParams.Gamma : pRenderingParams->GetGamma(), (m_RenderingParams.Mask & RenderingParams::PARAM_ENHANCED_CONTRAST) != 0 ? m_RenderingParams.EnhancedContrast : pRenderingParams->GetEnhancedContrast(), (m_RenderingParams.Mask & RenderingParams::PARAM_CLEARTYPE_LEVEL) != 0 ? m_RenderingParams.ClearTypeLevel : pRenderingParams->GetClearTypeLevel(), (m_RenderingParams.Mask & RenderingParams::PARAM_PIXEL_GEOMETRY) != 0 ? m_RenderingParams.PixelGeometry : pRenderingParams->GetPixelGeometry(), (m_RenderingParams.Mask & RenderingParams::PARAM_RENDERING_MODE) != 0 ? m_RenderingParams.RenderingMode : pRenderingParams->GetRenderingMode(), &pCustomRenderingParams); if (SUCCEEDED(hr)) { m_pRenderTarget->SetTextRenderingParams(pCustomRenderingParams); pCustomRenderingParams->Release(); } } else { m_pRenderTarget->SetTextRenderingParams(pRenderingParams); } if (SUCCEEDED(hr)) fUpdated = true; pRenderingParams->Release(); } pFactory->Release(); } return fUpdated; }