/* * 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/HistoryView.h" #import "cocoa/font.h" #import "cocoa/coordinates.h" #import "cocoa/plotter.h" #import "cocoa/LocalHistoryController.h" #import "cocoa/BrowserView.h" #import "utils/errors.h" #import "netsurf/core_window.h" #import "desktop/browser_history.h" #import "desktop/local_history.h" #import "netsurf/plotters.h" @interface HistoryView () { struct local_history_session *_session; } @property (nonatomic) NSMutableArray *toolTips; @property (readwrite, nonatomic) NSSize size; @end static nserror invalidate(struct core_window *cw, const struct rect *rect) { return NSERROR_NOT_IMPLEMENTED; } static void update_size(struct core_window *cw, int width, int height) { HistoryView *view = (__bridge HistoryView *)cw; NSSize size = cocoa_size(width, height); view.size = size; } static void scroll_visible(struct core_window *cw, const struct rect *r) { } static void get_window_dimensions(struct core_window *cw, int *width, int *height) { } static void drag_status(struct core_window *cw, core_window_drag_status ds) { } static struct core_window_callback_table history_view_table = { .invalidate = invalidate, .update_size = update_size, .scroll_visible = scroll_visible, .get_window_dimensions = get_window_dimensions, .drag_status = drag_status }; @implementation HistoryView - (void)updateHistory { if (_session) { local_history_set(_session, self.browser.browser); } else { local_history_init(&history_view_table, (__bridge void *)self, self.browser.browser, &_session); } self.frameSize = self.size; } - (void)dealloc { if (_session) { local_history_fini(_session); } } - (void)drawRect:(NSRect)rect { if (!_session) return; struct redraw_context context = { .interactive = true, .background_images = false, .plot = &cocoa_plotters, }; cocoa_set_clip(rect); struct rect clipRect = { .x0 = cocoa_pt_to_px(CGRectGetMinX(rect)), .y0 = cocoa_pt_to_px(CGRectGetMinY(rect)), .x1 = cocoa_pt_to_px(CGRectGetMaxX(rect)), .y1 = cocoa_pt_to_px(CGRectGetMaxY(rect)) }; local_history_redraw(_session, 0, 0, &clipRect, &context); } - (void)mouseUp:(NSEvent *)theEvent { if (!_session) return; CGPoint location = [self convertPoint: theEvent.locationInWindow fromView: nil]; browser_mouse_state state = BROWSER_MOUSE_PRESS_1; if (theEvent.modifierFlags & NSEventModifierFlagCommand) { state = BROWSER_MOUSE_PRESS_2; } nserror res = local_history_mouse_action(_session, state, cocoa_pt_to_px(location.x), cocoa_pt_to_px(location.y)); if (res == NSERROR_OK) { self.browser.historyVisible = NO; } } - (BOOL)isFlipped { return YES; } @end