Re: Vertically Centered Colon
Re: Vertically Centered Colon
- Subject: Re: Vertically Centered Colon
- From: "Gerriet M. Denkmann" <email@hidden>
- Date: Tue, 29 Nov 2016 02:12:14 +0700
> On 28 Nov 2016, at 23:42, Alastair Houghton <email@hidden> wrote:
>
> On 28 Nov 2016, at 16:18, Gerriet M. Denkmann <email@hidden> wrote:
>>
>>
>>> On 28 Nov 2016, at 22:13, Eric E. Dolecki <email@hidden> wrote:
>>>
>>> You could probably use an attributed string and add an attribute for the last colon: NSBaselineOffsetAttributeName
>>
>> Yes; but this would be some rather desperate work-around.
>>
>> I was rather thinking of UIFontDescriptorFeatureSettingsAttribute with some Feature type from SFNTLayoutTypes.h (in CoreText).
>> I tried a few types, but no success so far.
>
> The problem you’ve got is that unless the font has a feature that specifically allows you to change *any* colon (as opposed to a colon between two numerals), you aren’t going to be able to do it by turning on an OpenType feature. Even if you can, there doesn’t appear to be a standard feature code for this, so you’d be reliant on Apple not changing it in the future.
The WWDC 2015 talk seemed to suggest that there is a standard feature for this.
But there are about 40 feature types in SFNTLayoutTypes.h - no idea what to use.
> What you *could* do instead is get Core Text (or Cocoa Text) to lay out a string e.g. “12:00”, then grab the glyph for the centred colon directly from that string and use it explicitly, e.g. by attaching a kCTGlyphInfoAttributeName attribute to your string with the value set to an appropriately constructed CTGlyphInfoRef.
done once:
CGRect frame = { {0,0},{99,99}};
UITextView *dummyTextView = [ [UITextView alloc] initWithFrame: frame textContainer: nil ];
dummyTextView.text = @“23:21”;
dummyTextView.font = thinFont;
NSLayoutManager *layoutManager = dummyTextView.layoutManager;
[ layoutManager ensureGlyphsForCharacterRange: range ];
[ layoutManager ensureLayoutForCharacterRange: range ];
NSUInteger glyphIndex = [ layoutManager glyphIndexForCharacterAtIndex: 2 ];
centeredColonGlyph = [ layoutManager CGGlyphAtIndex: glyphIndex ];;
and then:
CFMutableAttributedStringRef aStr = (__bridge CFMutableAttributedStringRef)attributedString;
CTFontRef fontRiff = (__bridge CTFontRef)thinFont;
CTGlyphInfoRef glyInfRef = CTGlyphInfoCreateWithGlyph( centeredColonGlyph, fontRiff, (CFStringRef)@":" );
CFRange range = { (CFIndex)colonIndex, 1 };
CFAttributedStringSetAttribute( aStr, range, kCTGlyphInfoAttributeName, glyInfRef );
CFRelease(glyInfRef);
This seems to be working. Nut sure whether there is a more elegant way.
Thanks a lot for your help!
Kind regards,
Gerriet.
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden