// // Copyright (c) 2018 Open Whisper Systems. All rights reserved. // #import "UIFont+OWS.h" NS_ASSUME_NONNULL_BEGIN @implementation UIFont (OWS) + (UIFont *)ows_thinFontWithSize:(CGFloat)size { return [UIFont systemFontOfSize:size weight:UIFontWeightThin]; } + (UIFont *)ows_lightFontWithSize:(CGFloat)size { return [UIFont systemFontOfSize:size weight:UIFontWeightLight]; } + (UIFont *)ows_regularFontWithSize:(CGFloat)size { return [UIFont systemFontOfSize:size weight:UIFontWeightRegular]; } + (UIFont *)ows_mediumFontWithSize:(CGFloat)size { return [UIFont systemFontOfSize:size weight:UIFontWeightMedium]; } + (UIFont *)ows_boldFontWithSize:(CGFloat)size { return [UIFont boldSystemFontOfSize:size]; } #pragma mark - Icon Fonts + (UIFont *)ows_fontAwesomeFont:(CGFloat)size { return [UIFont fontWithName:@"FontAwesome" size:size]; } + (UIFont *)ows_dripIconsFont:(CGFloat)size { return [UIFont fontWithName:@"dripicons-v2" size:size]; } + (UIFont *)ows_elegantIconsFont:(CGFloat)size { return [UIFont fontWithName:@"ElegantIcons" size:size]; } #pragma mark - Dynamic Type + (UIFont *)ows_dynamicTypeTitle1Font { return [UIFont preferredFontForTextStyle:UIFontTextStyleTitle1]; } + (UIFont *)ows_dynamicTypeTitle2Font { return [UIFont preferredFontForTextStyle:UIFontTextStyleTitle2]; } + (UIFont *)ows_dynamicTypeTitle3Font { return [UIFont preferredFontForTextStyle:UIFontTextStyleTitle3]; } + (UIFont *)ows_dynamicTypeHeadlineFont { return [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline]; } + (UIFont *)ows_dynamicTypeBodyFont { return [UIFont preferredFontForTextStyle:UIFontTextStyleBody]; } + (UIFont *)ows_dynamicTypeSubheadlineFont { return [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline]; } + (UIFont *)ows_dynamicTypeFootnoteFont { return [UIFont preferredFontForTextStyle:UIFontTextStyleFootnote]; } + (UIFont *)ows_dynamicTypeCaption1Font { return [UIFont preferredFontForTextStyle:UIFontTextStyleCaption1]; } + (UIFont *)ows_dynamicTypeCaption2Font { return [UIFont preferredFontForTextStyle:UIFontTextStyleCaption2]; } #pragma mark - Styles - (UIFont *)ows_italic { return [self styleWithSymbolicTraits:UIFontDescriptorTraitItalic]; } - (UIFont *)ows_bold { return [self styleWithSymbolicTraits:UIFontDescriptorTraitBold]; } - (UIFont *)styleWithSymbolicTraits:(UIFontDescriptorSymbolicTraits)symbolicTraits { UIFontDescriptor *fontDescriptor = [self.fontDescriptor fontDescriptorWithSymbolicTraits:symbolicTraits]; UIFont *font = [UIFont fontWithDescriptor:fontDescriptor size:0]; OWSAssertDebug(font); return font ?: self; } - (UIFont *)ows_mediumWeight { // The recommended approach of deriving "medium" weight fonts for dynamic // type fonts is: // // [UIFontDescriptor fontDescriptorByAddingAttributes:...] // // But this doesn't seem to work in practice on iOS 11 using UIFontWeightMedium. UIFont *derivedFont = [UIFont systemFontOfSize:self.pointSize weight:UIFontWeightMedium]; return derivedFont; } @end NS_ASSUME_NONNULL_END