2

少なくとも私が使用しているフォント (つまり、Calibri) では、デフォルトで有効になっているように見える合字を無効にしたいと考えています。これを行う方法は、 を使用して、さまざまな合字関連のフォント機能を含むレイアウトにオブジェクトをIDWriteTextLayout::SetTypography設定し、値をゼロにしてそれらを無効にすることです。IDWriteTypographyこれは合字を無効にするために機能しますが、カーニングなど、私が台無しにしたくない他のタイポグラフィ設定にも影響します (無効にします)。

いくつかの実験の後、空のIDWriteTypographyオブジェクトを設定するだけで合字を無効にできることがわかりました (単に によって作成され、IDWriteFactory変更せずにレイアウトに適用されたもの)。空のタイポグラフィは、可能なすべてのフォント機能をゼロ/無効に設定する効果があるようです。したがって、実際にやりたいことは、デフォルトのタイポグラフィ設定を取得し、合字に関連するものをオーバーライドしてから、それをレイアウトに設定することです。

残念ながら、デフォルト設定を取得する場所が見つかりません。何も設定されていない場合はnullをIDWriteTextLayout::GetTypography返すだけですが、その場合は合字などのさまざまなタイポグラフィ設定が明らかに有効になっています。また、インスタンスIDWriteFactoryを作成するための他の方法 (またはその新しいバージョンのいずれか) またはフォント関連のインターフェイスも見つかりません。no が設定されている場合、どのタイポグラフィ設定を使用するかをIDWriteTypographyどのように決定しますか? デフォルト設定はフォント固有ですか? これらの設定を何らかの方法で取得して、いくつかを微調整し、残りのデフォルト値を継承することはできますか?IDWriteTextLayoutIDWriteTypography

4

2 に答える 2

3

IDWriteTextLayout または IDWriteTextAnalyzer から既定の機能セットを取得する方法はなく、フォント固有ではなく、スクリプト固有です。

一般的な仕組みに興味がある場合は、HarfBuzz などのオープンソースの実装を使用できます。シェーピング中に適用されるスクリプト固有の機能の配列を見つけることができます。

これに対する Microsoft のアプローチは、アラビア語の例である OpenType ドキュメントに記載されています - https://www.microsoft.com/typography/OpenTypeDev/arabic/intro.htm

于 2016-01-07T17:06:12.870 に答える