blob: 0e90b92c0ca5401b3bf9be7357f8883306b700f4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
/*
* Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
*
* This file is part of NetSurf, http://www.netsurf-browser.org/
*
* NetSurf is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* NetSurf is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import "cocoa/LocalHistoryController.h"
#import "cocoa/HistoryView.h"
#import "cocoa/ArrowWindow.h"
@implementation LocalHistoryController
@synthesize browser;
@synthesize history;
- initWithBrowser: (struct browser_window *) bw;
{
if ((self = [super initWithWindowNibName: @"LocalHistoryPanel"]) == nil) return nil;
browser = bw;
return self;
}
- (void) attachToView: (NSView *) view;
{
const CGFloat ScrollerSpace = [NSScroller scrollerWidthForControlSize: NSSmallControlSize];;
NSDisableScreenUpdates();
ArrowWindow *box = (ArrowWindow *)[self window];
NSSize newSize = [history size];
newSize.width += ScrollerSpace;
newSize.height += ScrollerSpace;
[box setContentSize: newSize];
[box setArrowPosition: 50];
[history updateHistory];
[box attachToView: view];
NSRect frame = [box frame];
NSRect screenFrame = [[box screen] visibleFrame];
const CGFloat arrowSize = [box arrowSize];
frame.origin.x += arrowSize;
frame.origin.y += arrowSize;
frame.size.width -= 2 * arrowSize;
frame.size.height -= 2 * arrowSize;
if (NSMinY( frame ) < NSMinY( screenFrame )) {
const CGFloat delta = NSMinY( screenFrame ) - NSMinY( frame );
frame.size.height -= delta;
frame.origin.y += delta;
}
CGFloat arrowPositionChange = 50;
if (NSMaxX( frame ) > NSMaxX( screenFrame )) {
const CGFloat delta = NSMaxX( frame ) - NSMaxX( screenFrame );
arrowPositionChange += delta;
frame.origin.x -= delta;
}
if (NSMinX( frame ) < NSMinX( screenFrame )) {
const CGFloat delta = NSMinX( screenFrame ) - NSMinX( frame );
arrowPositionChange -= delta;
frame.origin.x += delta;
frame.size.width -= delta;
}
frame.origin.x -= arrowSize;
frame.origin.y -= arrowSize;
frame.size.width += 2 * arrowSize;
frame.size.height += 2 * arrowSize;
[box setArrowPosition: arrowPositionChange];
[box setFrame: frame display: YES];
NSEnableScreenUpdates();
}
- (void) detach;
{
[(ArrowWindow *)[self window] detach];
}
- (void) windowDidLoad;
{
[history setBrowser: browser];
}
@end
|