| // Copyright 2018 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. |
| |
| module blink.mojom; |
| |
| import "mojo/public/mojom/base/file_path.mojom"; |
| import "mojo/public/mojom/base/read_only_file.mojom"; |
| import "mojo/public/mojom/base/shared_memory.mojom"; |
| import "mojo/public/mojom/base/string16.mojom"; |
| |
| struct DWriteStringPair { |
| mojo_base.mojom.String16 first; |
| mojo_base.mojom.String16 second; |
| }; |
| |
| struct DWriteFontStyle { |
| uint16 font_weight; |
| uint8 font_slant; |
| uint8 font_stretch; |
| }; |
| |
| struct FallbackFamilyAndStyle { |
| string fallback_family_name; |
| uint16 weight; |
| uint8 width; |
| uint8 slant; |
| }; |
| |
| struct MapCharactersResult { |
| uint32 family_index; |
| mojo_base.mojom.String16 family_name; |
| uint32 mapped_length; |
| float scale; |
| DWriteFontStyle font_style; |
| }; |
| |
| enum UniqueFontLookupMode { |
| kRetrieveTable, |
| kSingleLookups |
| }; |
| |
| interface DWriteFontProxy { |
| // Locates the index of the specified font family within the system |
| // collection. |
| [Sync] |
| FindFamily(mojo_base.mojom.String16 family_name) => (uint32 out_index); |
| |
| // Returns the number of font families in the system collection. |
| [Sync] |
| GetFamilyCount() => (uint32 out_count); |
| |
| // Returns the list of locale and family name pairs for the font family at the |
| // specified index. |
| [Sync] |
| GetFamilyNames(uint32 family_index) |
| => (array<DWriteStringPair> out_family_names); |
| |
| // Returns the list of font file paths in the system font directory that |
| // contain font data for the font family at the specified index. |
| [Sync] |
| GetFontFiles(uint32 family_index) |
| => (array<mojo_base.mojom.FilePath> file_paths, |
| array<mojo_base.mojom.ReadOnlyFile> file_handles); |
| |
| // Returns which font unique name matching lookup mode is to be used on the |
| // current machine. On DirectWrite 10 and above, single lookups can be |
| // performed directly against DirectWrite API. On older DirectWrite (Windows |
| // 7-8.1), unique font lookups need to be performed against a shared memory |
| // region which contains the lookup table. Compare GetUniqueFontLookupTable() |
| // for lookup mode kRetrieveTable and MatchUniqueFont for |
| // lookup mode kSingleLookups. |
| [Sync] |
| GetUniqueFontLookupMode() => (UniqueFontLookupMode lookup_mode); |
| |
| // On supported Windows versions, matches a unique PostScript or full font |
| // name against the installed fonts using DirectWrite API. Returns a file path |
| // and ttc_index from which the unique font can be instantiated. Check which |
| // mode is supported using GetFontUniqueNameLookupMode(). Returns empty path |
| // and 0 ttc index if no font is found. Must not be called if |
| // GetUniqueFontLookupMode() returned kRetrieveTable. |
| [Sync] |
| MatchUniqueFont(mojo_base.mojom.String16 font_unique_name) |
| => (mojo_base.mojom.FilePath file_path, uint32 ttc_index); |
| |
| // Synchronously returns a protobuf structured lookup list of |
| // (full_font_name|postscript_name) => (font_file + ttc_index) to the |
| // renderer process as a ReadOnlySharedMemoryRegion if it is available |
| // immediately without any blocking operations. Use FontTableMatcher to |
| // perform searches in it. If it is not available without blocking operations, |
| // sync_available is false and no shared memory region is provided. |
| [Sync] |
| GetUniqueNameLookupTableIfAvailable() |
| => (bool sync_available, |
| mojo_base.mojom.ReadOnlySharedMemoryRegion? font_lookup_table); |
| |
| // Asynchronously returns a protobuf structured lookup list of |
| // (full_font_name|postscript_name) => (font_file + ttc_index) to the |
| // renderer process as a ReadOnlySharedMemoryRegion. The lookup list is built |
| // on the first renderer call to retrieving this list. Use FontTableMatcher |
| // to perform searches in it. Retrieval may take up to several seconds if the |
| // table needs rebuilding on browser side. |
| GetUniqueNameLookupTable() => |
| (mojo_base.mojom.ReadOnlySharedMemoryRegion? font_lookup_table); |
| |
| // Locates a font family that is able to render the specified text using the |
| // specified style. If successful, the family_index and family_name will |
| // indicate which family in the system font collection can render the |
| // requested text and the mapped_length will indicate how many characters can |
| // be rendered. If no font exists that can render the text, family_index will |
| // be UINT32_MAX and mapped_length will indicate how many characters cannot be |
| // rendered by any installed font. |
| [Sync] |
| MapCharacters(mojo_base.mojom.String16 text, |
| DWriteFontStyle font_style, |
| mojo_base.mojom.String16 locale_name, |
| uint32 reading_direction, |
| mojo_base.mojom.String16 base_family_name) |
| => (MapCharactersResult out); |
| |
| // For a given base family name, bcp47 language tag, and codepoint to look up, |
| // return a font family name that is available on the system to display the |
| // given codepoint. This internally calls Skia's |
| // SkFontMgr_DirectWrite::matchFamilyStyleCharacter which executes |
| // IDWriteTextLayout based fallback code, which cannot be run in the renderer |
| // due triggering loading the DWrite system font collection. |
| // Use only on Windows 8.0 and earlier - otherwise better fallback API is |
| // available through using a proxies IDWriteFontFallback. |
| [Sync] |
| FallbackFamilyAndStyleForCodepoint(string base_family_name, |
| string bcp47_language_tag, |
| uint32 codepoint) |
| => (FallbackFamilyAndStyle fallback_result); |
| }; |