2011-07-26 3 views
0

일반적인 Adobe Myriad Pro 글꼴이 설치되어 있습니다. 여기에는 Myriad Pro Regular, Myriad Pro Bold 및 Myriad Pro Semibold가 포함됩니다. Myriad Pro Regular를 가리키는 CTFontRef baseFont이 있고 원하는 글꼴 크기가 size이라고 가정합니다. 다음 코드를 실행합니다.Myriad Pro의 굵게 버전을 요청할 때 Core Text가 Myriad Pro Semibold를 반환하는 이유

CTFontRef boldFont = CTFontCreateCopyWithSymbolicTraits(baseFont, size, NULL, kCTFontBoldTrait, kCTFontBoldTrait); 

반환되는 글꼴은 Myriad Pro Bold가 아닌 Myriad Pro Semibold입니다.

명명 된 스타일 'Bold'을 요청하는 대신 Myriad Pro Bold를 반환하도록 강제하는 방법이 있습니까? 하드 - 배선 스타일 이름을 사용하지 않고이 코드를 완전히 일반화하고 싶었습니다.

나는 처음에 폰트를 만들 때 굵은 체형을 속성 사전의 일부로 전달하는 것을 포함하여 여러 순열로 이것을 시도했지만 여기에 설명 된 2 단계 프로세스를 피했지만 여전히 세미 볼드 글꼴을 보통 굵게. 나는 또한 폰트 그 자체를 조금 찔렀다. 전체 굵은 글꼴은 <OS/2> 테이블에 700의 가중치를 가지고 있으며 세미 볼드 글꼴의 가중치는 600입니다. PANOSE 가중치는 이에 해당합니다. 그러나 macStyle<head> 세미 글꼴 및 굵은 글꼴 테이블의 필드는 모두 굵은 글씨로 설정되어 있으므로 아마도 코어 텍스트가 사용하고있는 것입니다. 그러나 더 차별화 할 수있는 방법이 있습니까?

+0

태그 추가 "ctfont" –

답변

0

일반적으로 글꼴 처리에 대한 약간의 지식으로 뒷받침되는 설명서의 내용을 바탕으로 구체적으로 핵심 텍스트는 아니지만 가능할 수도 있지만 간단하지는 않습니다.

symTraitValuesymTraitMask 매개 변수의 유형이 CTFontSymbolicTraits 인 것으로 지정되어 있습니다. CTFontDescriptor() documentation

kCTFontBoldTrait = (1 << 1) 

그래서이 명확 부울 특성이므로 사용되는 "굵게"값을 정의합니다. 그러나 보셨다시피, 글꼴 가중치는 부울 특성이 아니라 스펙트럼입니다. 워드 프로세서 UI의 수십 가지 "대담한"버튼이이를 부울 특성으로 나타 냈습니다. CTFontCreateCopyWithSymbolicTraits()에는 필요한 강력한 표현력이 없습니다.

다른 방법으로는 CTFontDescriptorCreateMatchingFontDescriptors()을 호출 해보십시오. 이 함수는 CTFontDescriptorRef을 초기 글꼴에 전달하고 속성이 있어야하는 CFSetRef을 전달합니다. 이 함수는 사용자가 요청한 속성과 일치하는 글꼴 설명 자의 배열을 반환합니다.

그래서 Myriad Pro Regular에 CTFontDescriptorRef을 전달할 수 있으며, 굵게 표시하려는 CFSetRef 일 수도 있습니다. 반환 된 배열의 모든 글꼴 설명자를 살펴보고 가장 무거운 것을 찾으십시오.

본인은이 코드를 작성하지 않았으며, 핵심 텍스트에 대한 나의 무지는 내가 누락되었을 수 있음을 의미하지만 그럴듯한 접근 방법 인 것 같습니다. 용

0

CTFontDescriptor 당신에게 가장 굵은를 되 가중치 스펙트럼 1주는, -1과 1 사이의 부동 소수점을 나타내는 CFNumberRef 걸리는 kCTFontWeightTrait를 지정할 수있는 당신은 CFDictionaryRef되어야 속성 kCTFontTraitsAttribute을 지정할 수 변형이며, 0은 보통/중간입니다.