HRESULT GetFontFamilyNames(IDWriteFontCollection* fontCollection, const WCHAR* localeName, IN OUT std::vector< std::wstring >& fontFamilyNames) { HRESULT hr = S_OK; std::wstring familyName; UINT32 familyCount = fontCollection->GetFontFamilyCount(); try { for (UINT32 i = 0; i != familyCount; ++i) { IDWriteFontFamily* fontFamily = NULL; hr = fontCollection->GetFontFamily(i, &fontFamily); if (SUCCEEDED(hr)) { hr = GetFontFamilyName(fontFamily, localeName, familyName); } SafeRelease(&fontFamily); if (FAILED(hr)) break; fontFamilyNames.push_back(familyName); } } catch (...) { hr = ExceptionToHResult(); } return hr; }
void CanvasTextFormat::SetShadowPropertiesFromDWrite() { assert(m_format); ThrowIfFailed(m_format->GetFontCollection(&m_fontCollection)); m_flowDirection = ToCanvasTextDirection(m_format->GetFlowDirection()); m_fontFamilyName = GetFontFamilyName(m_format.Get()); m_fontSize = m_format->GetFontSize(); m_fontStretch = ToWindowsFontStretch(m_format->GetFontStretch()); m_fontStyle = ToWindowsFontStyle(m_format->GetFontStyle()); m_fontWeight = ToWindowsFontWeight(m_format->GetFontWeight()); m_incrementalTabStop = m_format->GetIncrementalTabStop(); m_localeName = GetLocaleName(m_format.Get()); m_verticalAlignment = ToCanvasVerticalAlignment(m_format->GetParagraphAlignment()); m_paragraphAlignment = ToWindowsParagraphAlignment(m_format->GetTextAlignment()); m_readingDirection = ToCanvasTextDirection(m_format->GetReadingDirection()); m_wordWrapping = ToCanvasWordWrapping(m_format->GetWordWrapping()); m_drawTextOptions = CanvasDrawTextOptions::Default; DWRITE_LINE_SPACING_METHOD method{}; ThrowIfFailed(m_format->GetLineSpacing(&method, &m_lineSpacing, &m_lineSpacingBaseline)); m_lineSpacingMethod = ToCanvasLineSpacingMethod(method); DWRITE_TRIMMING trimmingOptions{}; ComPtr<IDWriteInlineObject> inlineObject; ThrowIfFailed(m_format->GetTrimming( &trimmingOptions, &inlineObject)); m_trimmingGranularity = ToCanvasTextTrimmingGranularity(trimmingOptions.granularity); m_trimmingDelimiter = ToCanvasTrimmingDelimiter(trimmingOptions.delimiter); m_trimmingDelimiterCount = trimmingOptions.delimiterCount; }
IFACEMETHODIMP CanvasTextFormat::get_FontFamily(HSTRING* value) { return PropertyGet( value, m_fontFamilyName, [&] { return GetFontFamilyName(m_format.Get()); }); }