[vtk-developers] Using system fonts on Windows (fontconfig equivalent?)

Elvis Stansvik elvis.stansvik at orexplore.com
Fri Apr 14 03:07:08 EDT 2017


2017-04-14 4:08 GMT+02:00 Sean McBride <sean at rogue-research.com>:
> On Tue, 11 Apr 2017 21:54:20 +0200, Elvis Stansvik said:
>
>>How are people dealing with this in VTK applications today? Do they
>>just accept that fonts in VTK will look out of place compared to
>>surrounding UI elements and other programs (and not respecting the
>>user's font settings)? What's the situation on macOS? We're planning a
>>port to macOS as well, and would of course like to respect the user's
>>font choice there as well.
>
> Elvis,
>
> I finally recently updated our app to use the macOS system font.  I really feel it should be VTK's default behaviour, because otherwise most non-English characters are not going to render, and in this day and age, Unicode should "just work".
>
> I guess such a change would complicate VTK's test suite, at least the tests that compare images, because the system font is often tweaked from OS release to release.
>
> Perhaps VTK should at the very least provide an API that does the platform-specific work to return the path to the system font (for a given string at a given size).
>
> Here's our Mac code if you want to copy it:
>
>         vtkTextProperty* property = textActor->GetTextProperty();
>         const char* fontPath = [[self fontPathForString:inString size:14] fileSystemRepresentation];
>         property->SetFontFile(fontPath);
>
> and
>
> - (nullable NSURL*)fontPathForString:(nullable NSString*)inString
>                                 size:(CGFloat)inSize
> {
>         NSURL* fontUrl = nil;
>
>         if (inString)
>         {
>                 NSFont* startFont = [NSFont systemFontOfSize:inSize];
>                 CTFontRef font = CTFontCreateForString((__bridge CTFontRef)startFont,
>                                                                                            (__bridge CFStringRef)inString,
>                                                                                            CFRangeMake(0, [inString length]));
>                 if (font)
>                 {
>                         NSFontDescriptor* fontDesc = [(__bridge NSFont*)font fontDescriptor];
>                         fontUrl = [fontDesc objectForKey:(__bridge NSString*)kCTFontURLAttribute];
>
>                         CFRelease(font);
>                 }
>         }
>
>         return fontUrl;
> }

Thanks a lot for this snippet Sean, it'll come handy when I turn my
attention to macOS.

A cross-platform helper like you mention would sure be a useful addition.

Elvis

>
> Sean
>
>


More information about the vtk-developers mailing list