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;
}
Пример #2
0
    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;
    }
Пример #3
0
 IFACEMETHODIMP CanvasTextFormat::get_FontFamily(HSTRING* value)
 {
     return PropertyGet(
         value,
         m_fontFamilyName,
         [&]
         {
             return GetFontFamilyName(m_format.Get());
         });
 }