mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
feat(core): support css font-variation-settings (#9995)
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
|
||||
@interface NativeScriptUtils : NSObject
|
||||
|
||||
+(UIFont*) getSystemFont:(CGFloat)size weight:(UIFontWeight)weight italic:(BOOL)italic symbolicTraits:(CGFloat)symbolicTraits;
|
||||
+(UIFont*) getSystemFont:(CGFloat)size weight:(UIFontWeight)weight italic:(BOOL)italic symbolicTraits:(UIFontDescriptorSymbolicTraits)symbolicTraits;
|
||||
+(UIFont*) createUIFont:(NSDictionary*)font;
|
||||
+(NSMutableAttributedString*)createMutableStringWithDetails:(NSDictionary*)details;
|
||||
+(NSMutableAttributedString*)createMutableStringForSpan:(NSString*)text font:(UIFont*)font color:(UIColor*)color backgroundColor:(UIColor*)backgroundColor textDecoration:(NSString*)textDecoration baselineOffset:(CGFloat)baselineOffset;
|
||||
|
||||
@@ -2,19 +2,19 @@
|
||||
|
||||
@implementation NativeScriptUtils
|
||||
|
||||
+(UIFont*) getSystemFont:(CGFloat)size weight:(UIFontWeight)weight italic:(BOOL)italic symbolicTraits:(CGFloat)symbolicTraits {
|
||||
+(UIFont*) getSystemFont:(CGFloat)size weight:(UIFontWeight)weight italic:(BOOL)italic symbolicTraits:(UIFontDescriptorSymbolicTraits)symbolicTraits {
|
||||
UIFont *result = [UIFont systemFontOfSize:size weight:weight];
|
||||
if (italic) {
|
||||
result = [UIFont fontWithDescriptor:[result.fontDescriptor fontDescriptorWithSymbolicTraits:symbolicTraits] size:size];
|
||||
}
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
+(UIFont*) createUIFont:(NSDictionary*)font {
|
||||
UIFont *result;
|
||||
|
||||
|
||||
CGFloat size = [[font valueForKey:@"fontSize"] floatValue];
|
||||
|
||||
|
||||
UIFontDescriptorSymbolicTraits symbolicTraits = 0;
|
||||
if ([[font valueForKey:@"isBold"] boolValue]) {
|
||||
symbolicTraits = symbolicTraits | UIFontDescriptorTraitBold;
|
||||
@@ -22,12 +22,12 @@
|
||||
if ([[font valueForKey:@"isItalic"] boolValue]) {
|
||||
symbolicTraits = symbolicTraits | UIFontDescriptorTraitItalic;
|
||||
}
|
||||
|
||||
|
||||
NSDictionary *fontDescriptorTraits = @{
|
||||
UIFontSymbolicTrait : @(symbolicTraits),
|
||||
UIFontWeightTrait : [font valueForKey:@"fontWeight"]
|
||||
};
|
||||
|
||||
|
||||
for (NSString *family in [NSArray arrayWithArray:[font valueForKey:@"fontFamily"]]) {
|
||||
NSString *fontFamily = family;
|
||||
if ([family.lowercaseString isEqualToString:@"serif"]) {
|
||||
@@ -35,24 +35,24 @@
|
||||
} else if ([family.lowercaseString isEqualToString:@"monospace"]) {
|
||||
fontFamily = @"Courier New";
|
||||
}
|
||||
|
||||
if (!fontFamily || [fontFamily isEqualToString:@"sans-serif"] || [fontFamily isEqualToString:@"system"]) {
|
||||
result = [NativeScriptUtils getSystemFont:size weight:(UIFontWeight)[[font valueForKey:@"fontWeight"] floatValue] italic:[[font valueForKey:@"isItalic"] boolValue] symbolicTraits:symbolicTraits];
|
||||
break;
|
||||
} else {
|
||||
|
||||
UIFontDescriptor *descriptor = [UIFontDescriptor fontDescriptorWithFontAttributes:@{
|
||||
UIFontDescriptorFamilyAttribute: fontFamily,
|
||||
UIFontDescriptorTraitsAttribute: fontDescriptorTraits
|
||||
}];
|
||||
|
||||
|
||||
result = [UIFont fontWithDescriptor:descriptor size:size];
|
||||
|
||||
|
||||
BOOL actualItalic = result.fontDescriptor.symbolicTraits & UIFontDescriptorTraitItalic;
|
||||
if ([[font valueForKey:@"isItalic"] boolValue] && !actualItalic) {
|
||||
// The font we got is not actually italic so emulate that with a matrix
|
||||
result = [UIFont fontWithDescriptor:[descriptor fontDescriptorWithMatrix:CGAffineTransformMake(1, 0, 0.2, 1, 0, 0)] size:size];
|
||||
}
|
||||
|
||||
|
||||
// Check if the resolved font has the correct font-family
|
||||
// If not - fallback to the next font-family
|
||||
if ([result.familyName isEqualToString:fontFamily]) {
|
||||
@@ -62,12 +62,12 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Couldn't resolve font - fallback to the system font
|
||||
if (result == nil) {
|
||||
result = [NativeScriptUtils getSystemFont:size weight:(UIFontWeight)[[font valueForKey:@"fontWeight"] floatValue] italic:[[font valueForKey:@"isItalic"] boolValue] symbolicTraits:symbolicTraits];
|
||||
}
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -83,29 +83,29 @@
|
||||
+(NSMutableAttributedString*)createMutableStringForSpan:(NSString*)text font:(UIFont*)font color:(UIColor*)color backgroundColor:(UIColor*)backgroundColor textDecoration:(NSString*)textDecoration baselineOffset:(CGFloat)baselineOffset {
|
||||
NSMutableDictionary *attrDict = [[NSMutableDictionary alloc] init];
|
||||
attrDict[NSFontAttributeName] = font;
|
||||
|
||||
|
||||
if (color != nil) {
|
||||
attrDict[NSForegroundColorAttributeName] = color;
|
||||
}
|
||||
|
||||
|
||||
if (backgroundColor != nil) {
|
||||
attrDict[NSBackgroundColorAttributeName] = backgroundColor;
|
||||
}
|
||||
|
||||
|
||||
if (textDecoration != nil) {
|
||||
if ([textDecoration rangeOfString:@"underline"].location != NSNotFound) {
|
||||
attrDict[NSUnderlineStyleAttributeName] = [NSNumber numberWithInt:NSUnderlineStyleSingle];
|
||||
}
|
||||
|
||||
|
||||
if ([textDecoration rangeOfString:@"line-through"].location != NSNotFound) {
|
||||
attrDict[NSStrikethroughStyleAttributeName] = [NSNumber numberWithInt:NSUnderlineStyleSingle];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
attrDict[NSBaselineOffsetAttributeName] = [NSNumber numberWithInt:baselineOffset];
|
||||
|
||||
|
||||
return [[NSMutableAttributedString alloc] initWithString:text attributes:attrDict];
|
||||
|
||||
|
||||
}
|
||||
|
||||
+(UIImage*)scaleImage:(UIImage*)image width:(CGFloat)width height:(CGFloat)height scaleFactor:(CGFloat)scaleFactor {
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
declare const enum MDCAnimationTimingFunction {
|
||||
|
||||
Standard = 0,
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
declare class NativeScriptUtils extends NSObject {
|
||||
|
||||
static alloc(): NativeScriptUtils; // inherited from NSObject
|
||||
@@ -11,7 +10,7 @@ declare class NativeScriptUtils extends NSObject {
|
||||
|
||||
static getImageDataFormatQuality(image: UIImage, format: string, quality: number): NSData;
|
||||
|
||||
static getSystemFontWeightItalicSymbolicTraits(size: number, weight: number, italic: boolean, symbolicTraits: number): UIFont;
|
||||
static getSystemFontWeightItalicSymbolicTraits(size: number, weight: number, italic: boolean, symbolicTraits: UIFontDescriptorSymbolicTraits): UIFont;
|
||||
|
||||
static new(): NativeScriptUtils; // inherited from NSObject
|
||||
|
||||
|
||||
Reference in New Issue
Block a user