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 72d6c55..fc6bfa7 100644 Binary files a/IJSVGExample/IJSVGExample.xcodeproj/project.xcworkspace/xcuserdata/curtishard.xcuserdatad/UserInterfaceState.xcuserstate and b/IJSVGExample/IJSVGExample.xcodeproj/project.xcworkspace/xcuserdata/curtishard.xcuserdatad/UserInterfaceState.xcuserstate differ 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; }