Bug #: 4157
[WebKit-https.git] / WebKitTools / DrawTest / DrawTestDocument.m
1 /*
2  * Copyright (C) 2005 Apple Computer, Inc.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #import "DrawTestDocument.h"
27 #import "DrawTestView.h"
28 #import "DrawTestToolbarController.h"
29
30 #import <WebCore+SVG/DrawDocumentPrivate.h>
31
32 @implementation DrawTestDocument
33
34 - (id)initWithType:(NSString *)typeName error:(NSError **)outError
35 {
36     if (outError) {
37         NSDictionary *errorInfo = [NSDictionary dictionaryWithObjectsAndKeys:
38             @"No document could be created.", NSLocalizedDescriptionKey,
39             @"New document creation not yet supported.", NSLocalizedFailureReasonErrorKey,
40             nil];
41         *outError = [NSError errorWithDomain:NSCocoaErrorDomain code:0 userInfo:errorInfo];
42     }
43     [self release];
44     return nil;
45 }
46
47 - (void)dealloc
48 {
49     [toolbarController release];
50     [document release];
51     [super dealloc];
52 }
53
54 - (NSString *)windowNibName
55 {
56     return @"DrawTestDocument";
57 }
58
59 - (IBAction)dumpSVGToConsole:(id)sender
60 {
61     NSLog(@"SVG: %@", [document svgText]);
62 }
63
64 - (void)sizeWindowToFitCanvas
65 {
66     NSSize canvasSize = [document canvasSize];
67     if ((canvasSize.width > 10) && (canvasSize.height > 10)) {
68         NSWindow *window = [drawView window];
69         //canvasSize.height += [drawView frame].origin.y; // to accomidate the tool pallette
70         NSRect newFrame = [window frameRectForContentRect:NSMakeRect(0,0,canvasSize.width, canvasSize.height)];
71         newFrame = [window constrainFrameRect:newFrame toScreen:[window screen]];
72         // we really should not show margins here.
73         [window setFrame:newFrame display:YES];
74     }
75 }
76
77 - (void)windowControllerDidLoadNib:(NSWindowController *)aController
78 {
79     [super windowControllerDidLoadNib:aController];
80     toolbarController = [[DrawTestToolbarController alloc] initWithDrawView:drawView];
81     [drawView setDocument:[self drawDocument]];
82     [self sizeWindowToFitCanvas];
83 }
84
85 - (IBAction)openSourceForSelection:(id)sender
86 {
87     [[NSWorkspace sharedWorkspace] openFile:[self fileName] withApplication:@"TextEdit"];
88 }
89
90 - (IBAction)zoomToContent:(id)sender
91 {
92     [document sizeCanvasToFitContent];
93     [drawView setNeedsDisplay:YES];
94     [self sizeWindowToFitCanvas];
95 }
96
97 - (NSData *)dataRepresentationOfType:(NSString *)aType
98 {
99     return [[document svgText] dataUsingEncoding:NSUTF8StringEncoding];
100 }
101
102 - (BOOL)loadDataRepresentation:(NSData *)data ofType:(NSString *)aType
103 {
104     [self setDrawDocument:[DrawDocument documentWithSVGData:data]];
105     return YES;
106 }
107
108 - (void)setDrawDocument:(DrawDocument *)drawDocument
109 {
110     id oldDoc = document;
111     document = [drawDocument retain];
112     [oldDoc release];
113 }
114
115 - (DrawDocument *)drawDocument
116 {
117     //if (!document) document = [[DrawDocument alloc] init];
118     return document;
119 }
120
121 #pragma mark -
122 #pragma mark Debug Methods
123
124 - (IBAction)toggleDebugDrawer:(id)sender
125 {
126     [debugDrawer toggle:sender];
127 }
128
129 - (id)outlineView:(NSOutlineView *)outlineView child:(int)index ofItem:(id)item
130 {
131     return nil;
132 }
133
134 - (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item
135 {
136     return NO;
137 }
138
139 - (int)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item
140 {
141     return 0;
142 }
143
144 - (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item
145 {
146     return nil;
147 }
148
149 - (IBAction)runWindowResizeTest:(id)sender
150 {
151     NSWindow *window = [drawView window];
152     NSScreen *screen = [window screen];
153     float screenHeight = [screen visibleFrame].size.height;
154     NSRect originalFrame = [window frame];
155     // initial setup
156     BOOL toolbarVisible = [[window toolbar] isVisible];
157     if (toolbarVisible) [window toggleToolbarShown:self];
158     [window setFrame:NSMakeRect(0,screenHeight-100,100,100) display:YES];
159     
160     // grab time.
161     CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();
162     
163     // run test
164     for (int x = 0; x < 3; x++) {
165         for (float size = 100; size < 500.f; size += 20.f) {
166             [window setFrame:NSMakeRect(0, screenHeight-size, size, size) display:YES];
167         }
168     }
169     
170     double elapsed = CFAbsoluteTimeGetCurrent() - start;
171     
172     // log
173     NSLog(@"Window resize test: %fs", elapsed);
174     
175     // restore
176     if (toolbarVisible) [window toggleToolbarShown:self];
177     [window setFrame:originalFrame display:YES];
178 }
179
180 @end