1/* 2 * Copyright (C) 2005 Apple Computer, Inc. All rights reserved. 3 * Copyright (C) 2006 Nefaur Khandker <nefaurk@gmail.com> All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27#import "SVGTest.h" 28 29#import <WebKit/WebView.h> 30 31@implementation SVGTest 32 33+ (id)testWithSVGPath:(NSString *)svgPath imagePath:(NSString *)imagePath 34{ 35 SVGTest *test = [[self alloc] initWithSVGPath:svgPath imagePath:imagePath]; 36 return [test autorelease]; 37} 38 39static WebView *__sharedDrawView = nil; 40+ (WebView *)sharedDrawView 41{ 42 if (!__sharedDrawView) { 43 __sharedDrawView = [[WebView alloc] initWithFrame:NSMakeRect(0,0,0,0)]; 44 } 45 return __sharedDrawView; 46} 47 48- (id)initWithSVGPath:(NSString *)svgPath imagePath:(NSString *)imagePath 49{ 50 if (self = [super init]) { 51 _svgPath = [svgPath copy]; 52 _imagePath = [imagePath copy]; 53 } 54 return self; 55} 56 57- (NSString *)imagePath 58{ 59 return _imagePath; 60} 61 62- (NSString *)svgPath 63{ 64 return _svgPath; 65} 66 67- (NSImage *)image 68{ 69 if (!_image && _imagePath) { 70 _image = [[NSImage alloc] initByReferencingFile:_imagePath]; 71 } 72 return _image; 73} 74 75- (NSString *)name 76{ 77 NSMutableString *name = [[[[_svgPath lastPathComponent] stringByDeletingPathExtension] mutableCopy] autorelease]; 78 [name replaceOccurrencesOfString:@"_" withString:@" " options:0 range:NSMakeRange(0, [name length])]; 79 return [name capitalizedString]; 80} 81 82- (void)generateCompositeIfNecessary 83{ 84 if (!_compositeImage) { 85 WebView *view = [SVGTest sharedDrawView]; 86 NSSize svgSize = [view bounds].size; 87 88 NSImage *image = [self image]; 89 NSSize imageSize = [image size]; 90 91 NSBitmapImageRep *svgImage = [view bitmapImageRepForCachingDisplayInRect:[view bounds]]; 92 [view cacheDisplayInRect:[view bounds] toBitmapImageRep:svgImage]; 93 94 NSSize unionSize = NSMakeSize(MAX(svgSize.width, imageSize.width), MAX(svgSize.height, imageSize.height)); 95 _compositeImage = [[NSImage alloc] initWithSize:unionSize]; 96 97 [_compositeImage lockFocus]; 98 [svgImage drawInRect:NSMakeRect(0,0,svgSize.width,svgSize.height)]; 99 [image drawInRect:NSMakeRect(0,0,imageSize.width,imageSize.height) 100 fromRect:NSMakeRect(0,0,imageSize.width,imageSize.height) 101 operation:NSCompositeXOR fraction:1.0]; 102 [_compositeImage unlockFocus]; 103 } 104} 105 106- (NSImage *)compositeImage 107{ 108 [self generateCompositeIfNecessary]; 109 return _compositeImage; 110} 111 112 113@end 114