/* * Copyright 2011 Sven Weidauer * * 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 . */ #import "cocoa/LocalHistoryController.h" #import "cocoa/BrowserView.h" #import "cocoa/HistoryView.h" #import "cocoa/ArrowWindow.h" @implementation LocalHistoryController - (instancetype)initWithBrowser:(BrowserView *)bw { if ((self = [super initWithWindowNibName:@"LocalHistoryPanel"]) == nil) return nil; _browser = bw; return self; } - (void)attachToView:(NSView *)view { NSDisableScreenUpdates(); ArrowWindow *box = (ArrowWindow *)[self window]; [self.history updateHistory]; box.contentSize = self.history.size; [box setArrowPosition:50]; [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 { [super windowDidLoad]; self.history.browser = self.browser; } - (void)redraw { [self.history setNeedsDisplay:YES]; } - (void)keyDown:(NSEvent *)theEvent { unichar key = [[theEvent characters] characterAtIndex:0]; switch (key) { case 27: [self.browser setHistoryVisible:NO]; break; default: NSBeep(); break; }; } @end