~ubuntu-branches/ubuntu/maverick/webkit/maverick

« back to all changes in this revision

Viewing changes to WebKitTools/DrawTest/SVGTest.m

  • Committer: Bazaar Package Importer
  • Author(s): Mike Hommey
  • Date: 2007-08-19 15:54:12 UTC
  • Revision ID: james.westby@ubuntu.com-20070819155412-uxxg1h9plpghmtbi
Tags: upstream-0~svn25144
ImportĀ upstreamĀ versionĀ 0~svn25144

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
 
 
39
static 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