summaryrefslogtreecommitdiff
path: root/cocoa/gui.m
diff options
context:
space:
mode:
Diffstat (limited to 'cocoa/gui.m')
-rw-r--r--cocoa/gui.m391
1 files changed, 391 insertions, 0 deletions
diff --git a/cocoa/gui.m b/cocoa/gui.m
new file mode 100644
index 000000000..d7e5b8f79
--- /dev/null
+++ b/cocoa/gui.m
@@ -0,0 +1,391 @@
+/*
+ * 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/Cocoa.h>
+
+#import "BrowserWindow.h"
+#import "BrowserView.h"
+
+#import "desktop/gui.h"
+#import "desktop/netsurf.h"
+#import "desktop/browser.h"
+
+char *default_stylesheet_url;
+char *adblock_stylesheet_url;
+char *quirks_stylesheet_url;
+
+#define UNIMPL() NSLog( @"Function '%s' unimplemented", __func__ )
+
+void gui_multitask(void)
+{
+ // nothing to do
+}
+
+static NSAutoreleasePool *gui_pool = nil;
+void gui_poll(bool active)
+{
+ [gui_pool release];
+ gui_pool = [[NSAutoreleasePool alloc] init];
+
+ NSEvent *event = [NSApp nextEventMatchingMask: NSAnyEventMask untilDate: active ? nil : [NSDate distantFuture]
+ inMode: NSDefaultRunLoopMode dequeue: YES];
+
+ if (nil != event) [NSApp sendEvent: event];
+
+ [NSApp updateWindows];
+}
+
+void gui_quit(void)
+{
+ // nothing to do
+}
+
+struct browser_window;
+
+struct gui_window *gui_create_browser_window(struct browser_window *bw,
+ struct browser_window *clone, bool new_tab)
+{
+ return (struct gui_window *)[[BrowserWindow alloc] initWithBrowser: bw];
+}
+
+struct browser_window *gui_window_get_browser_window(struct gui_window *g)
+{
+ return [(BrowserWindow *)g browser];
+}
+
+void gui_window_destroy(struct gui_window *g)
+{
+ [(BrowserWindow *)g release];
+}
+
+void gui_window_set_title(struct gui_window *g, const char *title)
+{
+ [[(BrowserWindow *)g window] setTitle: [NSString stringWithUTF8String: title]];
+}
+
+void gui_window_redraw(struct gui_window *g, int x0, int y0, int x1, int y1)
+{
+ NSRect rect = NSMakeRect( x0, y0, x1 - x0, y1 - y0 );
+ [[(BrowserWindow *)g view] setNeedsDisplayInRect: rect];
+}
+
+void gui_window_redraw_window(struct gui_window *g)
+{
+ [[(BrowserWindow *)g view] setNeedsDisplay: YES];
+}
+
+void gui_window_update_box(struct gui_window *g,
+ const union content_msg_data *data)
+{
+ gui_window_redraw( g, data->redraw.x, data->redraw.y,
+ data->redraw.x + data->redraw.width,
+ data->redraw.y + data->redraw.height );
+}
+
+bool gui_window_get_scroll(struct gui_window *g, int *sx, int *sy)
+{
+ NSCParameterAssert( g != NULL && sx != NULL && sy != NULL );
+
+ NSRect visible = [[(BrowserWindow *)g view] visibleRect];
+ *sx = NSMinX( visible );
+ *sy = NSMinY( visible );
+ return true;
+}
+
+void gui_window_set_scroll(struct gui_window *g, int sx, int sy)
+{
+ [[(BrowserWindow *)g view] scrollPoint: NSMakePoint( sx, sy )];
+}
+
+void gui_window_scroll_visible(struct gui_window *g, int x0, int y0,
+ int x1, int y1)
+{
+ gui_window_set_scroll( g, x0, y0 );
+}
+
+void gui_window_position_frame(struct gui_window *g, int x0, int y0,
+ int x1, int y1)
+{
+ UNIMPL();
+}
+
+void gui_window_get_dimensions(struct gui_window *g, int *width, int *height,
+ bool scaled)
+{
+ NSCParameterAssert( width != NULL && height != NULL );
+
+ NSRect frame = [[(BrowserWindow *)g view] frame];
+ *width = NSWidth( frame );
+ *height = NSHeight( frame );
+}
+
+void gui_window_update_extent(struct gui_window *g)
+{
+ BrowserWindow * const window = (BrowserWindow *)g;
+ struct browser_window *browser = [window browser];
+ int width = content_get_width( browser->current_content ) * browser->scale;
+ int height = content_get_height( browser->current_content ) * browser->scale;
+
+ [[window view] setFrameSize: NSMakeSize( width, height )];
+}
+
+void gui_window_set_status(struct gui_window *g, const char *text)
+{
+ [[(BrowserWindow *)g view] setStatus: [NSString stringWithUTF8String: text]];
+}
+
+void gui_window_set_pointer(struct gui_window *g, gui_pointer_shape shape)
+{
+ switch (shape) {
+ case GUI_POINTER_DEFAULT:
+ case GUI_POINTER_WAIT:
+ case GUI_POINTER_PROGRESS:
+ [[NSCursor arrowCursor] set];
+ break;
+
+ case GUI_POINTER_CROSS:
+ [[NSCursor crosshairCursor] set];
+ break;
+
+ case GUI_POINTER_POINT:
+ [[NSCursor pointingHandCursor] set];
+ break;
+
+ case GUI_POINTER_CARET:
+ [[NSCursor IBeamCursor] set];
+ break;
+
+ default:
+ NSLog( @"Other cursor %d requested", shape );
+ [[NSCursor arrowCursor] set];
+ break;
+ }
+}
+
+void gui_window_hide_pointer(struct gui_window *g)
+{
+}
+
+void gui_window_set_url(struct gui_window *g, const char *url)
+{
+ [(BrowserWindow *)g setUrl: [NSString stringWithUTF8String: url]];
+}
+
+void gui_window_start_throbber(struct gui_window *g)
+{
+ [[(BrowserWindow *)g view] setSpinning: YES];
+}
+
+void gui_window_stop_throbber(struct gui_window *g)
+{
+ [[(BrowserWindow *)g view] setSpinning: NO];
+}
+
+void gui_window_set_icon(struct gui_window *g, hlcache_handle *icon)
+{
+ // ignore
+}
+
+void gui_window_set_search_ico(hlcache_handle *ico)
+{
+ UNIMPL();
+}
+
+void gui_window_place_caret(struct gui_window *g, int x, int y, int height)
+{
+ [[(BrowserWindow *)g view] addCaretAt: NSMakePoint( x, y ) height: height];
+}
+
+void gui_window_remove_caret(struct gui_window *g)
+{
+ [[(BrowserWindow *)g view] removeCaret];
+}
+
+void gui_window_new_content(struct gui_window *g)
+{
+}
+
+bool gui_window_scroll_start(struct gui_window *g)
+{
+ return true;
+}
+
+bool gui_window_box_scroll_start(struct gui_window *g,
+ int x0, int y0, int x1, int y1)
+{
+ return true;
+}
+
+bool gui_window_frame_resize_start(struct gui_window *g)
+{
+ UNIMPL();
+ return false;
+}
+
+void gui_window_save_link(struct gui_window *g, const char *url,
+ const char *title)
+{
+ UNIMPL();
+}
+
+void gui_window_set_scale(struct gui_window *g, float scale)
+{
+ UNIMPL();
+}
+
+
+struct gui_download_window *gui_download_window_create(download_context *ctx,
+ struct gui_window *parent)
+{
+ UNIMPL();
+ return NULL;
+}
+
+nserror gui_download_window_data(struct gui_download_window *dw,
+ const char *data, unsigned int size)
+{
+ UNIMPL();
+ return 0;
+}
+
+void gui_download_window_error(struct gui_download_window *dw,
+ const char *error_msg)
+{
+ UNIMPL();
+}
+
+void gui_download_window_done(struct gui_download_window *dw)
+{
+ UNIMPL();
+}
+
+
+void gui_drag_save_object(gui_save_type type, hlcache_handle *c,
+ struct gui_window *g)
+{
+}
+
+void gui_drag_save_selection(struct selection *s, struct gui_window *g)
+{
+}
+
+void gui_start_selection(struct gui_window *g)
+{
+}
+
+void gui_clear_selection(struct gui_window *g)
+{
+}
+
+
+void gui_paste_from_clipboard(struct gui_window *g, int x, int y)
+{
+ UNIMPL();
+}
+
+bool gui_empty_clipboard(void)
+{
+ return false;
+}
+
+bool gui_add_to_clipboard(const char *text, size_t length, bool space)
+{
+ UNIMPL();
+ return false;
+}
+
+bool gui_commit_clipboard(void)
+{
+ UNIMPL();
+ return false;
+}
+
+bool gui_copy_to_clipboard(struct selection *s)
+{
+ UNIMPL();
+ return false;
+}
+
+
+void gui_create_form_select_menu(struct browser_window *bw,
+ struct form_control *control)
+{
+ UNIMPL();
+}
+
+
+void gui_launch_url(const char *url)
+{
+ UNIMPL();
+}
+
+
+
+struct ssl_cert_info;
+
+void gui_cert_verify(const char *url, const struct ssl_cert_info *certs,
+ unsigned long num, nserror (*cb)(bool proceed, void *pw),
+ void *cbpw)
+{
+ cb( false, cbpw );
+}
+
+
+void gui_401login_open(const char *url, const char *realm,
+ nserror (*cb)(bool proceed, void *pw), void *cbpw)
+{
+ cb( false, cbpw );
+}
+
+static char *gui_get_resource_url( NSString *name, NSString *type )
+{
+ NSString *path = [[NSBundle mainBundle] pathForResource: name ofType: type];
+ return strdup( [[[NSURL fileURLWithPath: path] absoluteString] UTF8String] );
+}
+
+int main( int argc, char **argv )
+{
+ char options[PATH_MAX];
+
+ gui_pool = [[NSAutoreleasePool alloc] init];
+
+ const char * const messages = [[[NSBundle mainBundle] pathForResource: @"messages" ofType: nil] UTF8String];
+ default_stylesheet_url = gui_get_resource_url( @"default", @"css" );
+ quirks_stylesheet_url = gui_get_resource_url( @"quirks", @"css" );
+ adblock_stylesheet_url = gui_get_resource_url( @"adblock", @"css" );
+
+ /* initialise netsurf */
+ netsurf_init(&argc, &argv, options, messages);
+
+ NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
+ Class principalClass = NSClassFromString([infoDictionary objectForKey:@"NSPrincipalClass"]);
+ NSCAssert([principalClass respondsToSelector:@selector(sharedApplication)], @"Principal class must implement sharedApplication.");
+ [principalClass sharedApplication];
+
+ NSString *mainNibName = [infoDictionary objectForKey:@"NSMainNibFile"];
+ NSNib *mainNib = [[NSNib alloc] initWithNibNamed:mainNibName bundle:[NSBundle mainBundle]];
+ [mainNib instantiateNibWithOwner:NSApp topLevelObjects:nil];
+ [mainNib release];
+
+ [NSApp performSelectorOnMainThread:@selector(run) withObject:nil waitUntilDone:YES];
+
+ netsurf_exit();
+
+ return 0;
+}
+