From c94de1d24148ed104eb1f89e872718edd61a9610 Mon Sep 17 00:00:00 2001 From: Curtis Hard Date: Tue, 2 Jul 2019 22:27:51 +0100 Subject: [PATCH] Fixes URL parsing and scaling for gradients --- .../UserInterfaceState.xcuserstate | Bin 51069 -> 52907 bytes source/IJSVG.m | 6 +++++- source/IJSVGGradientLayer.m | 4 ++-- source/IJSVGUtils.m | 20 ++++++++++++++---- 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/IJSVGExample/IJSVGExample.xcodeproj/project.xcworkspace/xcuserdata/curtishard.xcuserdatad/UserInterfaceState.xcuserstate b/IJSVGExample/IJSVGExample.xcodeproj/project.xcworkspace/xcuserdata/curtishard.xcuserdatad/UserInterfaceState.xcuserstate index 72d6c5564dbab74e6079fd9d32806408f2ece0b2..fc6bfa7cc086eabaec8ff23c1023888695d502ca 100644 GIT binary patch delta 26226 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 delta 24409 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�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 diff --git a/source/IJSVG.m b/source/IJSVG.m index 337750b..f35b245 100644 --- a/source/IJSVG.m +++ b/source/IJSVG.m @@ -339,7 +339,7 @@ - (void)_setupBasicsFromAnyInitializer { self.clipToViewport = YES; - self.renderQuality = IJSVGRenderQualityOptimized; + self.renderQuality = IJSVGRenderQualityFullResolution; // setup low level backing scale _lastProposedBackingScale = 0.f; @@ -719,6 +719,10 @@ scale = 1.f; } + // make sure we multiple the scale by the scale of the rendered clip + // or it will be blurry for gradients and other bitmap drawing + scale = (_scale * scale); + // dont do anything, nothing has changed, no point of iterating over // every layer for no reason! if(scale == _lastProposedBackingScale && renderQuality == _lastProposedRenderQuality) { diff --git a/source/IJSVGGradientLayer.m b/source/IJSVGGradientLayer.m index 9d42c76..3a030ab 100644 --- a/source/IJSVGGradientLayer.m +++ b/source/IJSVGGradientLayer.m @@ -65,11 +65,11 @@ { switch (self.renderQuality) { case IJSVGRenderQualityOptimized: { - backingScaleFactor = .35f; + backingScaleFactor = (backingScaleFactor * .35f); break; } case IJSVGRenderQualityLow: { - backingScaleFactor = .05f; + backingScaleFactor = (backingScaleFactor * .05f); break; } default: { diff --git a/source/IJSVGUtils.m b/source/IJSVGUtils.m index 455064b..d7ca977 100644 --- a/source/IJSVGUtils.m +++ b/source/IJSVGUtils.m @@ -235,10 +235,18 @@ CGFloat degrees_to_radians( CGFloat degrees ) + (NSString *)defURL:(NSString *)string { + // insta check for URL + NSCharacterSet * set = NSCharacterSet.whitespaceCharacterSet; + string = [string stringByTrimmingCharactersInSet:set]; + NSString * check = [string substringToIndex:3].lowercaseString; + if([check isEqualToString:@"url"] == NO) { + return nil; + } + static NSRegularExpression * _reg = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - _reg = [[NSRegularExpression alloc] initWithPattern:@"url\\s?\\(\\s?#(.*?)\\)\\;?" + _reg = [[NSRegularExpression alloc] initWithPattern:@"url\\(['\"]?([^)]+?)['\"]?\\)" options:0 error:nil]; }); @@ -246,11 +254,15 @@ CGFloat degrees_to_radians( CGFloat degrees ) [_reg enumerateMatchesInString:string options:0 range:NSMakeRange( 0, string.length ) - usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) - { - if( ( foundID = [string substringWithRange:[result rangeAtIndex:1]] ) != nil ) + usingBlock:^(NSTextCheckingResult *result, + NSMatchingFlags flags, BOOL *stop) { + if((foundID = [string substringWithRange:[result rangeAtIndex:1]]) != nil) { *stop = YES; + } }]; + if([foundID hasPrefix:@"#"] == YES) { + foundID = [foundID substringFromIndex:1]; + } return foundID; }