근거, 커닝 및 간격
Windows 8 DirectWrite 문자 간격, 쌍 커닝 및 근거와 같은 기본 입력, 레이아웃 및 간격 기능을 제어할 수 있는 다양한 기능을 제공합니다.
문자 간격
문자 간격("추적")은 텍스트 실행에서 문자 사이의 간격입니다.
다음은 추적의 예입니다. 첫 번째 줄은 텍스트에 추적을 적용하지 않습니다. 두 번째 줄은 문자 간격을 늘리고 세 번째 줄은 문자 간격을 줄입니다.
Windows 8 DirectWrite 여기에 이러한 메서드를 추가하여 텍스트의 문자 간격을 제어합니다.
DirectWrite 레이아웃을 사용하는 경우 이 용도로 IDWriteTextLayout1::GetCharacterSpacing 및 IDWriteTextLayout1::SetCharacterSpacing 메서드를 사용할 수 있습니다.
GetCharacterSpacing 메서드를 사용하여 현재 문자 간격을 확인하고 현재 문자, 문자 앞/뒤 간격, 최소 진행 너비 및 나머지 텍스트의 시작 위치와 길이에 대한 정보를 포함하는 DWRITE_TEXT_RANGE 구조를 반환합니다.
DWriteTextLayout1 인터페이스에서 SetCharacterSpacing을 사용하여 레이아웃의 텍스트에 고유한 문자 간격을 적용합니다. SetCharacterSpacing 메서드는 문자 앞과 뒤에 원하는 공간, 허용되는 최소 진행 시간 및 간격을 적용할 범위를 정의하는 DWRITE_TEXT_RANGE 사용합니다.
사용자 지정 레이아웃을 사용하는 경우 DirectWriteIDWriteTextAnalyzer1::ApplyCharacterSpacing을 사용하여 문자 간격을 설정할 수 있습니다. 레이아웃을 고급으로 제어하기 위해 사용자 지정 텍스트 레이아웃이 필요한 경우 이 메서드를 사용합니다. 이 메서드를 사용하면 사용자 지정 레이아웃을 사용하는 경우 선행 및 후행 간격, 최소 사전 너비, 클러스터 맵의 길이, 문자 모양 수, 문자 범위에서 문자 모양으로 매핑, 각 문자 모양의 앞 너비를 ApplyCharacterSpacing 에 제공할 수 있습니다. 메서드는 수정된 문자 모양 어드밴스와 각 문자 모양 원본에 대한 새 오프셋이 있는 DWRITE_GLYPH_OFFSET 열거형을 반환합니다.
커닝
커닝은 문자 쌍 또는 세 개 사이의 상황에 맞는 간격 조정입니다. 문자 집합 간의 특정 간격은 가독성을 높이고 텍스트를 더 잘 보이게 할 수 있습니다. 커닝과 문자 간격의 중요한 차이점은 문자 간격이 공백 텍스트와 무관하다는 사실이며, 커닝은 글꼴에 정의된 특정 문자 쌍 간의 특정 상황에서 사용된다는 점입니다.
그녀의 이미지는 커닝의 예입니다. 위쪽 줄의 AVATAR라는 단어는 단어를 더 자연스럽게 보이게 하기 위해 커닝됩니다. 문자 주위의 빨간색 상자에서 볼 수 있듯이 처음 네 글자 사이에 더 많은 간격이 적용되고 끝에 있는 R은 앞에 더 많은 공간이 있습니다. 커닝이 없는 원본 텍스트가 두 번째 줄에 있습니다. 이 예제의 커닝을 사용하면 단어를 더 쉽게 읽을 수 있고 자연스럽게 만들 수 있습니다.
문자는 글꼴 커널이 커널 테이블에 저장되는 문자 쌍 사이를 이동하고 DirectWrite 해당 테이블을 구문 분석하고 커닝 API를 통해 정보를 반환합니다.
글꼴이 쌍 커닝을 지원하는지 여부를 확인하려면 IDWriteFontFace1::HasKerningPairs 메서드를 사용할 수 있습니다. 글꼴이 커닝 쌍을 지원하는 경우 이 메서드는 부울 값 1을 반환합니다.
IDWriteFontFace1에는 문자 모양 인덱스에 대한 커닝 쌍 조정에 액세스할 수 있는 메서드도 있습니다. GetKerningPairAdjustments를 사용하면 문자 모양 인덱스 배열을 입력하고 DirectWrite 문자 모양 사전 조정 배열을 반환할 수 있습니다. 글꼴이 커널 테이블을 지원하지 않는 경우 메서드는 문자 모양 사전 조정에 대해 0을 반환합니다.
DirectWrite 레이아웃을 사용하는 경우 IDWriteTextLayout1 인터페이스에는 쌍 커닝을 설정하고 레이아웃의 쌍 커닝에 대해 자세히 알아볼 수 있는 두 가지 메서드가 있습니다. SetPairKerning 메서드는 쌍 커닝을 사용할지 여부에 대한 부울 표현과 이를 적용할 텍스트 범위를 정의하는 DWRITE_TEXT_RANGE 사용합니다. 텍스트 범위에서 쌍 커닝을 사용할지 여부를 알아보려면 GetPairKerning 메서드를 사용할 수 있습니다. 이 메서드는 현재 위치를 사용하고 쌍 커닝을 사용할지 여부에 해당하는 부울과 커닝 설정이 적용되는 텍스트 범위를 반환합니다.
근거
Justification은 문자 또는 문자 모양 클러스터 간의 진행을 늘리거나 동일한 효과를 얻기 위해 근거 문자를 추가하여 열 내의 모든 공간을 채우도록 텍스트를 정렬하는 프로세스입니다. 일반적으로 이 작업은 텍스트 줄에 공백을 추가해야 하는 위치를 결정하고 이러한 중단 기회에 간격 문자를 삽입하여 수행됩니다. 이러한 간격 요소도 다를 수 있습니다. 라틴어 스크립트에서 텍스트는 요소 간의 사전 너비를 증가시켜 정당화되지만 아랍어에서는 텍스트가 kashida로 정당화됩니다. 다음은 양쪽 맞춤 및 정당화되지 않은 아랍어 및 라틴어 스크립트의 예입니다.
Windows 8 DirectWrite 앱에서 텍스트를 정당화 할 수 있는 여러 가지 메서드가 있습니다.
DWRITE_TEXT_ALIGNMENT 열거형에는 추가 값이 있습니다. SetTextAlignment 메서드를 사용하고 DWRITE_TEXT_ALIGNMENT_JUSTIFIED 상수를 전달하고 DirectWrite 텍스트를 정당화하고 스크립트에 대한 적절한 근거 문자를 삽입할 수 있습니다.
사용자 지정 레이아웃을 사용하는 경우 근거를 활용할 수 있도록 여러 가지 메서드를 사용할 수 있습니다. DirectWriteIDWriteTextAnalyzer1 인터페이스에 사용자 지정 레이아웃에 근거를 추가하는 데 사용할 수 있는 세 가지 메서드가 있습니다.
첫 번째 메서드는 GetJustificationOpportunities로, 양쪽 맞춤하려는 텍스트를 사용하고 텍스트를 정당화하기 위해 근거 문자를 추가할 수 있는 위치를 간략하게 설명하는 DWRITE_JUSTIFICATION_OPPORTUNITY 구조를 반환합니다.
두 번째 함수는 선 너비에 맞도록 문자 모양 어드밴스 배열을 정당화하는 JustifyGlyphAdvances입니다. 이 메서드는 GetJustificationOpportunities에서 생성하는 DWRITE_JUSTIFICATION_OPPORTUNITY 구조체, 문자 모양 진행 및 문자 모양 오프셋을 사용합니다. 그런 다음 양쪽 문자 모양 어드밴스와 양쪽 문자 모양 오프셋을 포함하는 DWRITE_GLYPH_OFFSET 열거형을 생성합니다.
세 번째 함수는 GetJustifiedGlyphs로, 복합 스크립트에 대한 새 문자 모양을 채웁니다. 이 경우 문자 모양에 대한 발전이 증가했습니다. GetJustifiedGlyphs 는 스크립트에 GetScriptProperties에서 반환된 특정 근거 문자가 있는 경우에만 호출해야 합니다. 이 메서드는 글꼴, 텍스트 길이, 문자 모양 크기 포함, 텍스트 스크립트, 문자 모양 수, 클러스터 맵, 원래 문자 모양 어드밴스/오프셋, 양쪽 맞춤 문자 모양 어드밴스/오프셋 및 문자 모양 속성에 대한 정보를 가져옵니다. 메서드는 실제 문자 모양 수, 업데이트된 클러스터 맵, 삽입된 맞춤 문자 모양이 있는 업데이트된 문자 모양 인덱스, 업데이트된 문자 모양 오프셋 및 업데이트된 문자 모양 어드밴스를 반환합니다.