diff options
Diffstat (limited to 'frontends/cocoa/HistoryView.m')
-rw-r--r-- | frontends/cocoa/HistoryView.m | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/frontends/cocoa/HistoryView.m b/frontends/cocoa/HistoryView.m new file mode 100644 index 000000000..f935f9fd1 --- /dev/null +++ b/frontends/cocoa/HistoryView.m @@ -0,0 +1,136 @@ +/* + * 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/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 |