| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef UI_GFX_WIN_TEXT_ANALYSIS_SOURCE_H_ |
| #define UI_GFX_WIN_TEXT_ANALYSIS_SOURCE_H_ |
| |
| #include <dwrite.h> |
| #include <wrl.h> |
| |
| #include <string> |
| |
| #include "base/macros.h" |
| #include "ui/gfx/gfx_export.h" |
| |
| namespace gfx { |
| namespace win { |
| |
| // Implements an IDWriteTextAnalysisSource, describing a single pre-defined |
| // chunk of text with a uniform locale, reading direction, and number |
| // substitution. |
| class TextAnalysisSource |
| : public Microsoft::WRL::RuntimeClass< |
| Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::ClassicCom>, |
| IDWriteTextAnalysisSource> { |
| public: |
| // Factory method to avoid exporting the class and all it derives from. |
| static GFX_EXPORT HRESULT |
| Create(IDWriteTextAnalysisSource** text_analysis_out, |
| const std::wstring& text, |
| const std::wstring& locale_name, |
| IDWriteNumberSubstitution* number_substitution, |
| DWRITE_READING_DIRECTION reading_direction); |
| |
| // Use Create() to construct these objects. Direct calls to the constructor |
| // are an error - it is only public because a WRL helper function creates the |
| // objects. |
| TextAnalysisSource(); |
| |
| TextAnalysisSource& operator=(const TextAnalysisSource&) = delete; |
| |
| // IDWriteTextAnalysisSource: |
| HRESULT STDMETHODCALLTYPE GetLocaleName(UINT32 text_position, |
| UINT32* text_length, |
| const WCHAR** locale_name) override; |
| HRESULT STDMETHODCALLTYPE GetNumberSubstitution( |
| UINT32 text_position, |
| UINT32* text_length, |
| IDWriteNumberSubstitution** number_substitution) override; |
| DWRITE_READING_DIRECTION STDMETHODCALLTYPE |
| GetParagraphReadingDirection() override; |
| HRESULT STDMETHODCALLTYPE GetTextAtPosition(UINT32 text_position, |
| const WCHAR** text_string, |
| UINT32* text_length) override; |
| HRESULT STDMETHODCALLTYPE GetTextBeforePosition(UINT32 text_position, |
| const WCHAR** text_string, |
| UINT32* text_length) override; |
| |
| HRESULT STDMETHODCALLTYPE |
| RuntimeClassInitialize(const std::wstring& text, |
| const std::wstring& locale_name, |
| IDWriteNumberSubstitution* number_substitution, |
| DWRITE_READING_DIRECTION reading_direction); |
| |
| protected: |
| ~TextAnalysisSource() override; |
| |
| private: |
| std::wstring text_; |
| std::wstring locale_name_; |
| Microsoft::WRL::ComPtr<IDWriteNumberSubstitution> number_substitution_; |
| DWRITE_READING_DIRECTION reading_direction_; |
| }; |
| |
| } // namespace win |
| } // namespace gfx |
| |
| #endif // UI_GFX_WIN_TEXT_ANALYSIS_SOURCE_H_ |