summaryrefslogtreecommitdiff
path: root/frontends/cocoa/HistoryView.m
diff options
context:
space:
mode:
Diffstat (limited to 'frontends/cocoa/HistoryView.m')
-rw-r--r--frontends/cocoa/HistoryView.m136
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