summaryrefslogtreecommitdiff
path: root/cocoa/HistoryView.m
diff options
context:
space:
mode:
authorSven Weidauer <sven.weidauer@gmail.com>2011-01-24 15:01:34 +0000
committerSven Weidauer <sven.weidauer@gmail.com>2011-01-24 15:01:34 +0000
commite21cab6a7fc68b311a79a067b408da23173fb255 (patch)
treeea7fbdbb891ad19248d8106b3d0edc3dddcc0cf1 /cocoa/HistoryView.m
parent840fb0b9aab4b3d3bd4603a945f0d8ca02f5e473 (diff)
downloadnetsurf-e21cab6a7fc68b311a79a067b408da23173fb255.tar.gz
netsurf-e21cab6a7fc68b311a79a067b408da23173fb255.tar.bz2
Added local history overlay
svn path=/trunk/netsurf/; revision=11479
Diffstat (limited to 'cocoa/HistoryView.m')
-rw-r--r--cocoa/HistoryView.m109
1 files changed, 109 insertions, 0 deletions
diff --git a/cocoa/HistoryView.m b/cocoa/HistoryView.m
new file mode 100644
index 000000000..390256efe
--- /dev/null
+++ b/cocoa/HistoryView.m
@@ -0,0 +1,109 @@
+/*
+ * 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 "HistoryView.h"
+
+#import "desktop/browser.h"
+#import "desktop/history_core.h"
+#import "desktop/plotters.h"
+#import "cocoa/font.h"
+
+static NSRect cocoa_history_rect( struct browser_window *bw )
+{
+ int width, height;
+ history_size( bw->history, &width, &height );
+ return NSMakeRect( 0, 0, width + 10, height + 10 );
+}
+
+@implementation HistoryView
+
+@synthesize browser;
+@synthesize delegate;
+
+- (id)initWithBrowser: (struct browser_window *)bw;
+{
+ NSParameterAssert( NULL != bw );
+ if ((self = [super initWithFrame: cocoa_history_rect( bw )]) == nil) return nil;
+
+ browser = bw;
+
+ return self;
+}
+
+- (void) updateHistory;
+{
+ [self setFrameSize: cocoa_history_rect( browser ).size];
+
+ [self setNeedsDisplay: YES];
+}
+
+- (void) recenter;
+{
+ NSView *superView = [self superview];
+ NSRect visibleRect = [superView visibleRect];
+ NSRect rect = [self frame];
+ NSRect frame = [superView frame];
+
+ rect.origin.x = visibleRect.origin.x + (NSWidth( visibleRect ) - NSWidth( rect )) / 2.0;
+ rect.origin.x = MAX( rect.origin.x, frame.origin.x );
+
+ rect.origin.y = visibleRect.origin.y + (NSHeight( visibleRect ) - NSHeight( rect )) / 2.0;
+ rect.origin.y = MAX( rect.origin.y, frame.origin.y );
+
+ [self setFrameOrigin: rect.origin];
+}
+
+- (void) viewDidMoveToSuperview;
+{
+ [self updateHistory];
+ [self recenter];
+}
+
+- (void) drawRect: (NSRect)rect;
+{
+ NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect: NSInsetRect( [self bounds], 5, 5 )
+ xRadius: 10 yRadius: 10];
+
+ [[NSColor colorWithDeviceWhite: 0 alpha: 0.8] setFill];
+ [path fill];
+
+ [path setLineWidth: 2.0];
+ [[NSColor whiteColor] set];
+ [path stroke];
+
+ cocoa_set_font_scale_factor( 1.0 );
+ plot.clip( NSMinX( rect ), NSMinY( rect ), NSMaxX( rect ), NSMaxY( rect ) );
+ history_redraw( browser->history );
+}
+
+- (void) mouseUp: (NSEvent *)theEvent;
+{
+ const NSPoint location = [self convertPoint: [theEvent locationInWindow] fromView: nil];
+ const bool newWindow = [theEvent modifierFlags] & NSCommandKeyMask;
+ if (history_click( browser, browser->history, location.x, location.y, newWindow )) {
+ [delegate historyViewDidSelectItem: self];
+ }
+}
+
+- (BOOL) isFlipped;
+{
+ return YES;
+}
+
+
+@end