From b58dcc351f3f7ec32ecb0553436ff9ee76e52551 Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Wed, 12 Jan 2011 20:21:17 +0000 Subject: [PATCH] Cocoa front end (credit: Sven Weidauer) svn path=/trunk/netsurf/; revision=11292 --- cocoa/BrowserView.h | 47 + cocoa/BrowserView.m | 289 +++++ cocoa/BrowserWindow.h | 39 + cocoa/BrowserWindow.m | 53 + cocoa/NetSurf.xcodeproj/project.pbxproj | 1011 +++++++++++++++ cocoa/NetsurfApp.h | 26 + cocoa/NetsurfApp.m | 59 + cocoa/bitmap.h | 24 + cocoa/bitmap.m | 223 ++++ cocoa/fetch.m | 57 + cocoa/font.h | 24 + cocoa/font.m | 177 +++ cocoa/gui.m | 391 ++++++ cocoa/history.m | 37 + cocoa/plotter.h | 24 + cocoa/plotter.m | 223 ++++ cocoa/res/Browser.xib | 989 ++++++++++++++ cocoa/res/MainMenu.xib | 1578 +++++++++++++++++++++++ cocoa/res/NetSurf-Info.plist | 32 + cocoa/res/adblock.css | 1 + cocoa/res/de.lproj/Messages | 1 + cocoa/res/default.css | 1 + cocoa/res/en.lproj/Messages | 1 + cocoa/res/fr.lproj/Messages | 1 + cocoa/res/it.lproj/Messages | 1 + cocoa/res/nl.lproj/Messages | 1 + cocoa/res/quirks.css | 1 + cocoa/save.m | 37 + cocoa/schedule.m | 91 ++ cocoa/thumbnail.m | 61 + cocoa/url.m | 37 + cocoa/utf8.m | 36 + cocoa/utils.m | 67 + 33 files changed, 5640 insertions(+) create mode 100644 cocoa/BrowserView.h create mode 100644 cocoa/BrowserView.m create mode 100644 cocoa/BrowserWindow.h create mode 100644 cocoa/BrowserWindow.m create mode 100644 cocoa/NetSurf.xcodeproj/project.pbxproj create mode 100644 cocoa/NetsurfApp.h create mode 100644 cocoa/NetsurfApp.m create mode 100644 cocoa/bitmap.h create mode 100644 cocoa/bitmap.m create mode 100644 cocoa/fetch.m create mode 100644 cocoa/font.h create mode 100644 cocoa/font.m create mode 100644 cocoa/gui.m create mode 100644 cocoa/history.m create mode 100644 cocoa/plotter.h create mode 100644 cocoa/plotter.m create mode 100644 cocoa/res/Browser.xib create mode 100644 cocoa/res/MainMenu.xib create mode 100644 cocoa/res/NetSurf-Info.plist create mode 120000 cocoa/res/adblock.css create mode 120000 cocoa/res/de.lproj/Messages create mode 120000 cocoa/res/default.css create mode 120000 cocoa/res/en.lproj/Messages create mode 120000 cocoa/res/fr.lproj/Messages create mode 120000 cocoa/res/it.lproj/Messages create mode 120000 cocoa/res/nl.lproj/Messages create mode 120000 cocoa/res/quirks.css create mode 100644 cocoa/save.m create mode 100644 cocoa/schedule.m create mode 100644 cocoa/thumbnail.m create mode 100644 cocoa/url.m create mode 100644 cocoa/utf8.m create mode 100644 cocoa/utils.m diff --git a/cocoa/BrowserView.h b/cocoa/BrowserView.h new file mode 100644 index 000000000..9598936c1 --- /dev/null +++ b/cocoa/BrowserView.h @@ -0,0 +1,47 @@ +/* + * 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 + + +@interface BrowserView : NSView { + struct browser_window *browser; + BOOL spinning; + NSString *status; + + NSPoint caretPoint; + CGFloat caretHeight; + BOOL caretVisible; + BOOL hasCaret; + NSTimer *caretTimer; +} + +@property (readwrite, assign, nonatomic) struct browser_window *browser; +@property (readwrite, assign, nonatomic) BOOL spinning; +@property (readwrite, copy, nonatomic) NSString *status; +@property (readwrite, retain, nonatomic) NSTimer *caretTimer; + +- (void) removeCaret; +- (void) addCaretAt: (NSPoint) point height: (CGFloat) height; + +- (IBAction) goBack: (id) sender; +- (IBAction) goForward: (id) sender; +- (IBAction) showHistory: (id) sender; +- (IBAction) reloadPage: (id) sender; + +@end diff --git a/cocoa/BrowserView.m b/cocoa/BrowserView.m new file mode 100644 index 000000000..96f12699a --- /dev/null +++ b/cocoa/BrowserView.m @@ -0,0 +1,289 @@ +/* + * 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 "BrowserView.h" + +#import "desktop/browser.h" +#import "desktop/history_core.h" +#import "desktop/plotters.h" +#import "desktop/textinput.h" + +@implementation BrowserView + +@synthesize browser; +@synthesize spinning; +@synthesize status; +@synthesize caretTimer; + +static const CGFloat CaretWidth = 1.0; +static const NSTimeInterval CaretBlinkTime = 0.8; + +static inline NSRect cocoa_get_caret_rect( BrowserView *view ) +{ + NSRect caretRect = { + .origin = view->caretPoint, + .size = NSMakeSize( CaretWidth, view->caretHeight ) + }; + + return caretRect; +} + +- (void) removeCaret; +{ + hasCaret = NO; + [self setNeedsDisplayInRect: cocoa_get_caret_rect( self )]; + + [caretTimer invalidate]; + [self setCaretTimer: nil]; +} + +- (void) addCaretAt: (NSPoint) point height: (CGFloat) height; +{ + if (hasCaret) { + [self setNeedsDisplayInRect: cocoa_get_caret_rect( self )]; + } + + caretPoint = point; + caretHeight = height; + hasCaret = YES; + caretVisible = YES; + + if (nil == caretTimer) { + [self setCaretTimer: [NSTimer scheduledTimerWithTimeInterval: CaretBlinkTime target: self selector: @selector(caretBlink:) userInfo: nil repeats: YES]]; + } else { + [caretTimer setFireDate: [NSDate dateWithTimeIntervalSinceNow: CaretBlinkTime]]; + } + + [self setNeedsDisplayInRect: cocoa_get_caret_rect( self )]; +} + + +- (void) caretBlink: (NSTimer *)timer; +{ + if (hasCaret) { + caretVisible = !caretVisible; + [self setNeedsDisplayInRect: cocoa_get_caret_rect( self )]; + } +} + +- (void)drawRect:(NSRect)dirtyRect; +{ + + if (NULL == browser->current_content) return; + + NSRect frame = [self bounds]; + + plot.clip(0, 0, frame.size.width, frame.size.height); + + content_redraw(browser->current_content, + 0, + 0, + NSWidth( frame ), + NSHeight( frame ), + NSMinX( dirtyRect ), + NSMinY( dirtyRect ), + NSMaxX( dirtyRect ), + NSMaxY( dirtyRect ), + browser->scale, + 0xFFFFFF); + + + NSRect caretRect = cocoa_get_caret_rect( self ); + if (hasCaret && caretVisible && [self needsToDrawRect: caretRect]) { + [[NSColor blackColor] set]; + [NSBezierPath fillRect: caretRect]; + } + +} + +- (BOOL) isFlipped; +{ + return YES; +} + +- (void) mouseDown: (NSEvent *)theEvent; +{ + NSPoint location = [self convertPoint: [theEvent locationInWindow] fromView: nil]; + + browser_window_mouse_click( browser, BROWSER_MOUSE_PRESS_1, location.x, location.y ); +} + +- (void) mouseUp: (NSEvent *)theEvent; +{ + NSPoint location = [self convertPoint: [theEvent locationInWindow] fromView: nil]; + + browser_window_mouse_click( browser, BROWSER_MOUSE_CLICK_1, location.x, location.y ); +} + +- (void) mouseDragged: (NSEvent *)theEvent; +{ +} + +- (void) mouseMoved: (NSEvent *)theEvent; +{ + NSPoint location = [self convertPoint: [theEvent locationInWindow] fromView: nil]; + browser_window_mouse_click( browser, 0, location.x, location.y ); +} + +- (void) keyDown: (NSEvent *)theEvent; +{ + [self interpretKeyEvents: [NSArray arrayWithObject: theEvent]]; +} + +- (void) insertText: (id)string; +{ + for (NSUInteger i = 0, length = [string length]; i < length; i++) { + unichar ch = [string characterAtIndex: i]; + browser_window_key_press( browser, ch ); + } +} + +- (void) moveLeft: (id)sender; +{ + browser_window_key_press( browser, KEY_LEFT ); +} + +- (void) moveRight: (id)sender; +{ + browser_window_key_press( browser, KEY_RIGHT ); +} + +- (void) moveUp: (id)sender; +{ + browser_window_key_press( browser, KEY_UP ); +} + +- (void) moveDown: (id)sender; +{ + browser_window_key_press( browser, KEY_DOWN ); +} + +- (void) deleteBackward: (id)sender; +{ + browser_window_key_press( browser, KEY_DELETE_LEFT ); +} + +- (void) deleteForward: (id)sender; +{ + browser_window_key_press( browser, KEY_DELETE_RIGHT ); +} + +- (void) cancelOperation: (id)sender; +{ + browser_window_key_press( browser, KEY_ESCAPE ); +} + +- (void) scrollPageUp: (id)sender; +{ + browser_window_key_press( browser, KEY_PAGE_UP ); +} + +- (void) scrollPageDown: (id)sender; +{ + browser_window_key_press( browser, KEY_PAGE_DOWN ); +} + +- (void) insertTab: (id)sender; +{ + browser_window_key_press( browser, KEY_TAB ); +} + +- (void) insertBacktab: (id)sender; +{ + browser_window_key_press( browser, KEY_SHIFT_TAB ); +} + +- (void) moveToBeginningOfLine: (id)sender; +{ + browser_window_key_press( browser, KEY_LINE_START ); +} + +- (void) moveToEndOfLine: (id)sender; +{ + browser_window_key_press( browser, KEY_LINE_END ); +} + +- (void) moveToBeginningOfDocument: (id)sender; +{ + browser_window_key_press( browser, KEY_TEXT_START ); +} + +- (void) moveToEndOfDocument: (id)sender; +{ + browser_window_key_press( browser, KEY_TEXT_END ); +} + +- (void) insertNewline: (id)sender; +{ + browser_window_key_press( browser, KEY_NL ); +} + +- (void) setFrame: (NSRect)frameRect; +{ + [super setFrame: frameRect]; + browser_window_reformat( browser, [self bounds].size.width, [self bounds].size.height ); +} + + +- (IBAction) goBack: (id) sender; +{ + if (browser && history_back_available( browser->history )) { + history_back(browser, browser->history); + } +} + +- (IBAction) goForward: (id) sender; +{ + if (browser && history_forward_available( browser->history )) { + history_forward(browser, browser->history); + } +} + +- (IBAction) showHistory: (id) sender; +{ +} + +- (IBAction) reloadPage: (id) sender; +{ + browser_window_reload( browser, true ); +} + +- (BOOL) validateToolbarItem: (NSToolbarItem *)theItem; +{ + SEL action = [theItem action]; + + if (action == @selector( goBack: )) { + return browser != NULL && history_back_available( browser->history ); + } + + if (action == @selector( goForward: )) { + return browser != NULL && history_forward_available( browser->history ); + } + + if (action == @selector( reloadPage: )) { + return browser_window_reload_available( browser ); + } + + return YES; +} +- (BOOL) acceptsFirstResponder; +{ + return YES; +} + +@end diff --git a/cocoa/BrowserWindow.h b/cocoa/BrowserWindow.h new file mode 100644 index 000000000..02d6c6ca9 --- /dev/null +++ b/cocoa/BrowserWindow.h @@ -0,0 +1,39 @@ +/* + * 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 + +struct browser_window; + +@class BrowserView; + +@interface BrowserWindow : NSWindowController { + struct browser_window *browser; + NSString *url; + BrowserView *view; +} + +@property (readwrite, assign, nonatomic) struct browser_window *browser; +@property (readwrite, copy, nonatomic) NSString *url; +@property (readwrite, retain, nonatomic) IBOutlet BrowserView *view; + +- initWithBrowser: (struct browser_window *) bw; + +- (IBAction) navigate: (id) sender; + +@end diff --git a/cocoa/BrowserWindow.m b/cocoa/BrowserWindow.m new file mode 100644 index 000000000..727eba765 --- /dev/null +++ b/cocoa/BrowserWindow.m @@ -0,0 +1,53 @@ +/* + * 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 "BrowserWindow.h" +#import "BrowserView.h" + +#import "desktop/browser.h" + +@implementation BrowserWindow + +@synthesize browser; +@synthesize url; +@synthesize view; + +- initWithBrowser: (struct browser_window *) bw; +{ + if ((self = [super initWithWindowNibName: @"Browser"]) == nil) return nil; + + browser = bw; + + NSWindow *win = [self window]; + [win setAcceptsMouseMovedEvents: YES]; + [win makeKeyAndOrderFront: self]; + + return self; +} + +- (IBAction) navigate: (id) sender; +{ + browser_window_go( browser, [url UTF8String], NULL, true ); +} + +- (void) awakeFromNib; +{ + [view setBrowser: browser]; +} + +@end diff --git a/cocoa/NetSurf.xcodeproj/project.pbxproj b/cocoa/NetSurf.xcodeproj/project.pbxproj new file mode 100644 index 000000000..9e85fa744 --- /dev/null +++ b/cocoa/NetSurf.xcodeproj/project.pbxproj @@ -0,0 +1,1011 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 44; + objects = { + +/* Begin PBXBuildFile section */ + 260F200A12D620E800D9B07F /* content.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F6312D620E800D9B07F /* content.c */; }; + 260F200B12D620E800D9B07F /* dirlist.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F6712D620E800D9B07F /* dirlist.c */; }; + 260F200C12D620E800D9B07F /* fetch.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F6912D620E800D9B07F /* fetch.c */; }; + 260F200D12D620E800D9B07F /* fetch_curl.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F6C12D620E800D9B07F /* fetch_curl.c */; }; + 260F200E12D620E800D9B07F /* fetch_data.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F6E12D620E800D9B07F /* fetch_data.c */; }; + 260F200F12D620E800D9B07F /* fetch_file.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F7012D620E800D9B07F /* fetch_file.c */; }; + 260F201012D620E800D9B07F /* hlcache.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F7212D620E800D9B07F /* hlcache.c */; }; + 260F201112D620E800D9B07F /* llcache.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F7412D620E800D9B07F /* llcache.c */; }; + 260F201212D620E800D9B07F /* urldb.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F7612D620E800D9B07F /* urldb.c */; }; + 260F201312D620E800D9B07F /* css.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F7912D620E800D9B07F /* css.c */; }; + 260F201412D620E800D9B07F /* dump.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F7B12D620E800D9B07F /* dump.c */; }; + 260F201512D620E800D9B07F /* internal.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F7D12D620E800D9B07F /* internal.c */; }; + 260F201612D620E800D9B07F /* select.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F7F12D620E800D9B07F /* select.c */; }; + 260F201712D620E800D9B07F /* utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F8112D620E800D9B07F /* utils.c */; }; + 260F201812D620E800D9B07F /* browser.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F8512D620E800D9B07F /* browser.c */; }; + 260F201912D620E800D9B07F /* cookies.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F8712D620E800D9B07F /* cookies.c */; }; + 260F201A12D620E800D9B07F /* download.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F8912D620E800D9B07F /* download.c */; }; + 260F201B12D620E800D9B07F /* frames.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F8B12D620E800D9B07F /* frames.c */; }; + 260F201C12D620E800D9B07F /* history_core.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F8E12D620E800D9B07F /* history_core.c */; }; + 260F201D12D620E800D9B07F /* history_global_core.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F9012D620E800D9B07F /* history_global_core.c */; }; + 260F201E12D620E800D9B07F /* hotlist.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F9212D620E800D9B07F /* hotlist.c */; }; + 260F201F12D620E800D9B07F /* knockout.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F9412D620E800D9B07F /* knockout.c */; }; + 260F202012D620E800D9B07F /* mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F9612D620E800D9B07F /* mouse.c */; }; + 260F202112D620E800D9B07F /* netsurf.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F9812D620E800D9B07F /* netsurf.c */; }; + 260F202212D620E800D9B07F /* options.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F9A12D620E800D9B07F /* options.c */; }; + 260F202312D620E800D9B07F /* plot_style.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F9C12D620E800D9B07F /* plot_style.c */; }; + 260F202412D620E800D9B07F /* print.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1F9F12D620E800D9B07F /* print.c */; }; + 260F202512D620E800D9B07F /* save_complete.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FA212D620E800D9B07F /* save_complete.c */; }; + 260F202612D620E800D9B07F /* font_haru.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FA512D620E800D9B07F /* font_haru.c */; }; + 260F202712D620E800D9B07F /* pdf_plotters.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FA712D620E800D9B07F /* pdf_plotters.c */; }; + 260F202912D620E800D9B07F /* save_text.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FAA12D620E800D9B07F /* save_text.c */; }; + 260F202A12D620E800D9B07F /* scroll.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FAC12D620E800D9B07F /* scroll.c */; }; + 260F202B12D620E800D9B07F /* search.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FAE12D620E800D9B07F /* search.c */; }; + 260F202C12D620E800D9B07F /* searchweb.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FB012D620E800D9B07F /* searchweb.c */; }; + 260F202D12D620E800D9B07F /* selection.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FB212D620E800D9B07F /* selection.c */; }; + 260F202E12D620E800D9B07F /* sslcert.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FB412D620E800D9B07F /* sslcert.c */; }; + 260F202F12D620E800D9B07F /* textarea.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FB612D620E800D9B07F /* textarea.c */; }; + 260F203012D620E800D9B07F /* textinput.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FB812D620E800D9B07F /* textinput.c */; }; + 260F203112D620E800D9B07F /* tree.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FBA12D620E800D9B07F /* tree.c */; }; + 260F203212D620E800D9B07F /* tree_url_node.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FBC12D620E800D9B07F /* tree_url_node.c */; }; + 260F203312D620E800D9B07F /* version.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FBE12D620E800D9B07F /* version.c */; }; + 260F203A12D620E800D9B07F /* box.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FC712D620E800D9B07F /* box.c */; }; + 260F203B12D620E800D9B07F /* box_construct.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FC912D620E800D9B07F /* box_construct.c */; }; + 260F203C12D620E800D9B07F /* box_normalise.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FCA12D620E800D9B07F /* box_normalise.c */; }; + 260F203D12D620E800D9B07F /* favicon.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FCB12D620E800D9B07F /* favicon.c */; }; + 260F203E12D620E800D9B07F /* font.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FCD12D620E800D9B07F /* font.c */; }; + 260F203F12D620E800D9B07F /* form.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FCF12D620E800D9B07F /* form.c */; }; + 260F204012D620E800D9B07F /* html.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FD112D620E800D9B07F /* html.c */; }; + 260F204112D620E800D9B07F /* html_interaction.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FD312D620E800D9B07F /* html_interaction.c */; }; + 260F204212D620E800D9B07F /* html_redraw.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FD412D620E800D9B07F /* html_redraw.c */; }; + 260F204312D620E800D9B07F /* hubbub_binding.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FD512D620E800D9B07F /* hubbub_binding.c */; }; + 260F204412D620E800D9B07F /* imagemap.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FD612D620E800D9B07F /* imagemap.c */; }; + 260F204512D620E800D9B07F /* layout.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FD812D620E800D9B07F /* layout.c */; }; + 260F204612D620E800D9B07F /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FDA12D620E800D9B07F /* list.c */; }; + 260F204712D620E800D9B07F /* table.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FDD12D620E800D9B07F /* table.c */; }; + 260F204812D620E800D9B07F /* textplain.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FE012D620E800D9B07F /* textplain.c */; }; + 260F204912D620E800D9B07F /* base64.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FE312D620E800D9B07F /* base64.c */; }; + 260F204A12D620E800D9B07F /* container.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FE612D620E800D9B07F /* container.c */; }; + 260F204B12D620E800D9B07F /* filename.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FE912D620E800D9B07F /* filename.c */; }; + 260F204C12D620E800D9B07F /* findresource.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FEB12D620E800D9B07F /* findresource.c */; }; + 260F204D12D620E800D9B07F /* hashtable.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FED12D620E800D9B07F /* hashtable.c */; }; + 260F204E12D620E800D9B07F /* http.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FEF12D620E800D9B07F /* http.c */; }; + 260F204F12D620E800D9B07F /* locale.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FF112D620E800D9B07F /* locale.c */; }; + 260F205012D620E800D9B07F /* log.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FF312D620E800D9B07F /* log.c */; }; + 260F205212D620E800D9B07F /* memdebug.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FF612D620E800D9B07F /* memdebug.c */; }; + 260F205312D620E800D9B07F /* messages.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FF812D620E800D9B07F /* messages.c */; }; + 260F205412D620E800D9B07F /* talloc.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FFB12D620E800D9B07F /* talloc.c */; }; + 260F205712D620E800D9B07F /* url.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F1FFF12D620E800D9B07F /* url.c */; }; + 260F205812D620E800D9B07F /* useragent.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F200112D620E800D9B07F /* useragent.c */; }; + 260F205912D620E800D9B07F /* utf8.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F200312D620E800D9B07F /* utf8.c */; }; + 260F205A12D620E800D9B07F /* utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 260F200512D620E800D9B07F /* utils.c */; }; + 260F20AF12D6228C00D9B07F /* libssl.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 260F20AE12D6228C00D9B07F /* libssl.dylib */; }; + 260F20B112D6229900D9B07F /* libxml2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 260F20B012D6229900D9B07F /* libxml2.dylib */; }; + 260F20B512D622AA00D9B07F /* libcurl.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 260F20B412D622AA00D9B07F /* libcurl.dylib */; }; + 260F20B912D622C600D9B07F /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 260F20B812D622C600D9B07F /* libcrypto.dylib */; }; + 260F20BD12D622F500D9B07F /* libnsbmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 260F20BC12D622F500D9B07F /* libnsbmp.a */; }; + 260F20BF12D622F500D9B07F /* libnsgif.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 260F20BE12D622F500D9B07F /* libnsgif.a */; }; + 260F20C612D6230B00D9B07F /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 260F20C512D6230B00D9B07F /* libz.dylib */; }; + 260F20CB12D6231E00D9B07F /* libhubbub.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 260F20CA12D6231E00D9B07F /* libhubbub.a */; }; + 260F20CD12D6232D00D9B07F /* libcss.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 260F20CC12D6232D00D9B07F /* libcss.a */; }; + 260F20D212D6235200D9B07F /* libparserutils.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 260F20D112D6235200D9B07F /* libparserutils.a */; }; + 260F20D712D6237E00D9B07F /* libwapcaplet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 260F20D612D6237E00D9B07F /* libwapcaplet.a */; }; + 260F20DB12D623D000D9B07F /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 260F20DA12D623D000D9B07F /* libiconv.dylib */; }; + 26121DA912D700B800E10F91 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 26121DA812D700B800E10F91 /* MainMenu.xib */; }; + 26121DD912D703F400E10F91 /* NetSurfApp.m in Sources */ = {isa = PBXBuildFile; fileRef = 26121DD812D703F400E10F91 /* NetSurfApp.m */; }; + 26121E3F12D70A1A00E10F91 /* BrowserWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 26121E3E12D70A1A00E10F91 /* BrowserWindow.m */; }; + 26121EAC12D70E0A00E10F91 /* Browser.xib in Resources */ = {isa = PBXBuildFile; fileRef = 26121EAB12D70E0A00E10F91 /* Browser.xib */; }; + 26121EFD12D7132100E10F91 /* BrowserView.m in Sources */ = {isa = PBXBuildFile; fileRef = 26121EFC12D7132100E10F91 /* BrowserView.m */; }; + 2612205612D7247900E10F91 /* libjpeg.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2612205512D7247900E10F91 /* libjpeg.dylib */; }; + 2612265A12D7ACB500E10F91 /* default.css in Resources */ = {isa = PBXBuildFile; fileRef = 2612265712D7ACB500E10F91 /* default.css */; }; + 2612265C12D7ACB500E10F91 /* quirks.css in Resources */ = {isa = PBXBuildFile; fileRef = 2612265912D7ACB500E10F91 /* quirks.css */; }; + 2612266D12D7AD6800E10F91 /* adblock.css in Resources */ = {isa = PBXBuildFile; fileRef = 2612265D12D7AD6800E10F91 /* adblock.css */; }; + 2612269112D7AE4100E10F91 /* Messages in Resources */ = {isa = PBXBuildFile; fileRef = 2612268F12D7AE4100E10F91 /* Messages */; }; + 265F311A12D663F50048B600 /* gui.m in Sources */ = {isa = PBXBuildFile; fileRef = 265F311912D663F50048B600 /* gui.m */; }; + 265F314812D666660048B600 /* plotter.m in Sources */ = {isa = PBXBuildFile; fileRef = 265F314712D666660048B600 /* plotter.m */; }; + 265F315212D667060048B600 /* history.m in Sources */ = {isa = PBXBuildFile; fileRef = 265F315112D667060048B600 /* history.m */; }; + 265F316212D667E10048B600 /* schedule.m in Sources */ = {isa = PBXBuildFile; fileRef = 265F316112D667E10048B600 /* schedule.m */; }; + 265F316712D668130048B600 /* thumbnail.m in Sources */ = {isa = PBXBuildFile; fileRef = 265F316612D668130048B600 /* thumbnail.m */; }; + 265F317012D668790048B600 /* fetch.m in Sources */ = {isa = PBXBuildFile; fileRef = 265F316F12D668790048B600 /* fetch.m */; }; + 265F319112D668DB0048B600 /* url.m in Sources */ = {isa = PBXBuildFile; fileRef = 265F319012D668DB0048B600 /* url.m */; }; + 265F31C512D66A0D0048B600 /* save.m in Sources */ = {isa = PBXBuildFile; fileRef = 265F31C412D66A0D0048B600 /* save.m */; }; + 265F31DF12D66A890048B600 /* bmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 265F31CB12D66A890048B600 /* bmp.c */; }; + 265F31E012D66A890048B600 /* gif.c in Sources */ = {isa = PBXBuildFile; fileRef = 265F31CD12D66A890048B600 /* gif.c */; }; + 265F31E112D66A890048B600 /* ico.c in Sources */ = {isa = PBXBuildFile; fileRef = 265F31CF12D66A890048B600 /* ico.c */; }; + 265F31E212D66A890048B600 /* jpeg.c in Sources */ = {isa = PBXBuildFile; fileRef = 265F31D112D66A890048B600 /* jpeg.c */; }; + 265F31E312D66A890048B600 /* mng.c in Sources */ = {isa = PBXBuildFile; fileRef = 265F31D312D66A890048B600 /* mng.c */; }; + 265F31E412D66A890048B600 /* nssprite.c in Sources */ = {isa = PBXBuildFile; fileRef = 265F31D512D66A890048B600 /* nssprite.c */; }; + 265F31E512D66A890048B600 /* png.c in Sources */ = {isa = PBXBuildFile; fileRef = 265F31D712D66A890048B600 /* png.c */; }; + 265F31E612D66A890048B600 /* rsvg.c in Sources */ = {isa = PBXBuildFile; fileRef = 265F31D912D66A890048B600 /* rsvg.c */; }; + 265F31E712D66A890048B600 /* svg.c in Sources */ = {isa = PBXBuildFile; fileRef = 265F31DB12D66A890048B600 /* svg.c */; }; + 265F31E812D66A890048B600 /* webp.c in Sources */ = {isa = PBXBuildFile; fileRef = 265F31DD12D66A890048B600 /* webp.c */; }; + 265F31EC12D66B190048B600 /* bitmap.m in Sources */ = {isa = PBXBuildFile; fileRef = 265F31EB12D66B190048B600 /* bitmap.m */; }; + 265F320612D66C200048B600 /* utf8.m in Sources */ = {isa = PBXBuildFile; fileRef = 265F320512D66C200048B600 /* utf8.m */; }; + 265F321412D66CD90048B600 /* utils.m in Sources */ = {isa = PBXBuildFile; fileRef = 265F321312D66CD90048B600 /* utils.m */; }; + 265F321F12D66D510048B600 /* font.m in Sources */ = {isa = PBXBuildFile; fileRef = 265F321E12D66D510048B600 /* font.m */; }; + 2671AA2112D8D32300B8A46A /* libpng.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2671AA2012D8D32300B8A46A /* libpng.dylib */; }; + 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 260F1F6312D620E800D9B07F /* content.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = content.c; sourceTree = ""; }; + 260F1F6412D620E800D9B07F /* content.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = content.h; sourceTree = ""; }; + 260F1F6512D620E800D9B07F /* content_protected.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = content_protected.h; sourceTree = ""; }; + 260F1F6612D620E800D9B07F /* content_type.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = content_type.h; sourceTree = ""; }; + 260F1F6712D620E800D9B07F /* dirlist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dirlist.c; sourceTree = ""; }; + 260F1F6812D620E800D9B07F /* dirlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dirlist.h; sourceTree = ""; }; + 260F1F6912D620E800D9B07F /* fetch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fetch.c; sourceTree = ""; }; + 260F1F6A12D620E800D9B07F /* fetch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fetch.h; sourceTree = ""; }; + 260F1F6C12D620E800D9B07F /* fetch_curl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fetch_curl.c; sourceTree = ""; }; + 260F1F6D12D620E800D9B07F /* fetch_curl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fetch_curl.h; sourceTree = ""; }; + 260F1F6E12D620E800D9B07F /* fetch_data.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fetch_data.c; sourceTree = ""; }; + 260F1F6F12D620E800D9B07F /* fetch_data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fetch_data.h; sourceTree = ""; }; + 260F1F7012D620E800D9B07F /* fetch_file.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fetch_file.c; sourceTree = ""; }; + 260F1F7112D620E800D9B07F /* fetch_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fetch_file.h; sourceTree = ""; }; + 260F1F7212D620E800D9B07F /* hlcache.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hlcache.c; sourceTree = ""; }; + 260F1F7312D620E800D9B07F /* hlcache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hlcache.h; sourceTree = ""; }; + 260F1F7412D620E800D9B07F /* llcache.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = llcache.c; sourceTree = ""; }; + 260F1F7512D620E800D9B07F /* llcache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llcache.h; sourceTree = ""; }; + 260F1F7612D620E800D9B07F /* urldb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = urldb.c; sourceTree = ""; }; + 260F1F7712D620E800D9B07F /* urldb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = urldb.h; sourceTree = ""; }; + 260F1F7912D620E800D9B07F /* css.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = css.c; sourceTree = ""; }; + 260F1F7A12D620E800D9B07F /* css.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = css.h; sourceTree = ""; }; + 260F1F7B12D620E800D9B07F /* dump.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dump.c; sourceTree = ""; }; + 260F1F7C12D620E800D9B07F /* dump.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dump.h; sourceTree = ""; }; + 260F1F7D12D620E800D9B07F /* internal.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = internal.c; sourceTree = ""; }; + 260F1F7E12D620E800D9B07F /* internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = internal.h; sourceTree = ""; }; + 260F1F7F12D620E800D9B07F /* select.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = select.c; sourceTree = ""; }; + 260F1F8012D620E800D9B07F /* select.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = select.h; sourceTree = ""; }; + 260F1F8112D620E800D9B07F /* utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = utils.c; sourceTree = ""; }; + 260F1F8212D620E800D9B07F /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utils.h; sourceTree = ""; }; + 260F1F8412D620E800D9B07F /* 401login.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 401login.h; sourceTree = ""; }; + 260F1F8512D620E800D9B07F /* browser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = browser.c; sourceTree = ""; }; + 260F1F8612D620E800D9B07F /* browser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = browser.h; sourceTree = ""; }; + 260F1F8712D620E800D9B07F /* cookies.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cookies.c; sourceTree = ""; }; + 260F1F8812D620E800D9B07F /* cookies.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cookies.h; sourceTree = ""; }; + 260F1F8912D620E800D9B07F /* download.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = download.c; sourceTree = ""; }; + 260F1F8A12D620E800D9B07F /* download.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = download.h; sourceTree = ""; }; + 260F1F8B12D620E800D9B07F /* frames.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = frames.c; sourceTree = ""; }; + 260F1F8C12D620E800D9B07F /* frames.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = frames.h; sourceTree = ""; }; + 260F1F8D12D620E800D9B07F /* gui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gui.h; sourceTree = ""; }; + 260F1F8E12D620E800D9B07F /* history_core.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = history_core.c; sourceTree = ""; }; + 260F1F8F12D620E800D9B07F /* history_core.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = history_core.h; sourceTree = ""; }; + 260F1F9012D620E800D9B07F /* history_global_core.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = history_global_core.c; sourceTree = ""; }; + 260F1F9112D620E800D9B07F /* history_global_core.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = history_global_core.h; sourceTree = ""; }; + 260F1F9212D620E800D9B07F /* hotlist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hotlist.c; sourceTree = ""; }; + 260F1F9312D620E800D9B07F /* hotlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hotlist.h; sourceTree = ""; }; + 260F1F9412D620E800D9B07F /* knockout.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = knockout.c; sourceTree = ""; }; + 260F1F9512D620E800D9B07F /* knockout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = knockout.h; sourceTree = ""; }; + 260F1F9612D620E800D9B07F /* mouse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mouse.c; sourceTree = ""; }; + 260F1F9712D620E800D9B07F /* mouse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mouse.h; sourceTree = ""; }; + 260F1F9812D620E800D9B07F /* netsurf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = netsurf.c; sourceTree = ""; }; + 260F1F9912D620E800D9B07F /* netsurf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = netsurf.h; sourceTree = ""; }; + 260F1F9A12D620E800D9B07F /* options.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = options.c; sourceTree = ""; }; + 260F1F9B12D620E800D9B07F /* options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = options.h; sourceTree = ""; }; + 260F1F9C12D620E800D9B07F /* plot_style.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = plot_style.c; sourceTree = ""; }; + 260F1F9D12D620E800D9B07F /* plot_style.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = plot_style.h; sourceTree = ""; }; + 260F1F9E12D620E800D9B07F /* plotters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = plotters.h; sourceTree = ""; }; + 260F1F9F12D620E800D9B07F /* print.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = print.c; sourceTree = ""; }; + 260F1FA012D620E800D9B07F /* print.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = print.h; sourceTree = ""; }; + 260F1FA112D620E800D9B07F /* printer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = printer.h; sourceTree = ""; }; + 260F1FA212D620E800D9B07F /* save_complete.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = save_complete.c; sourceTree = ""; }; + 260F1FA312D620E800D9B07F /* save_complete.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = save_complete.h; sourceTree = ""; }; + 260F1FA512D620E800D9B07F /* font_haru.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = font_haru.c; sourceTree = ""; }; + 260F1FA612D620E800D9B07F /* font_haru.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = font_haru.h; sourceTree = ""; }; + 260F1FA712D620E800D9B07F /* pdf_plotters.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pdf_plotters.c; sourceTree = ""; }; + 260F1FA812D620E800D9B07F /* pdf_plotters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pdf_plotters.h; sourceTree = ""; }; + 260F1FAA12D620E800D9B07F /* save_text.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = save_text.c; sourceTree = ""; }; + 260F1FAB12D620E800D9B07F /* save_text.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = save_text.h; sourceTree = ""; }; + 260F1FAC12D620E800D9B07F /* scroll.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = scroll.c; sourceTree = ""; }; + 260F1FAD12D620E800D9B07F /* scroll.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scroll.h; sourceTree = ""; }; + 260F1FAE12D620E800D9B07F /* search.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = search.c; sourceTree = ""; }; + 260F1FAF12D620E800D9B07F /* search.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = search.h; sourceTree = ""; }; + 260F1FB012D620E800D9B07F /* searchweb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = searchweb.c; sourceTree = ""; }; + 260F1FB112D620E800D9B07F /* searchweb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = searchweb.h; sourceTree = ""; }; + 260F1FB212D620E800D9B07F /* selection.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = selection.c; sourceTree = ""; }; + 260F1FB312D620E800D9B07F /* selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = selection.h; sourceTree = ""; }; + 260F1FB412D620E800D9B07F /* sslcert.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sslcert.c; sourceTree = ""; }; + 260F1FB512D620E800D9B07F /* sslcert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sslcert.h; sourceTree = ""; }; + 260F1FB612D620E800D9B07F /* textarea.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = textarea.c; sourceTree = ""; }; + 260F1FB712D620E800D9B07F /* textarea.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = textarea.h; sourceTree = ""; }; + 260F1FB812D620E800D9B07F /* textinput.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = textinput.c; sourceTree = ""; }; + 260F1FB912D620E800D9B07F /* textinput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = textinput.h; sourceTree = ""; }; + 260F1FBA12D620E800D9B07F /* tree.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tree.c; sourceTree = ""; }; + 260F1FBB12D620E800D9B07F /* tree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tree.h; sourceTree = ""; }; + 260F1FBC12D620E800D9B07F /* tree_url_node.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tree_url_node.c; sourceTree = ""; }; + 260F1FBD12D620E800D9B07F /* tree_url_node.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tree_url_node.h; sourceTree = ""; }; + 260F1FBE12D620E800D9B07F /* version.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = version.c; sourceTree = ""; }; + 260F1FC712D620E800D9B07F /* box.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = box.c; sourceTree = ""; }; + 260F1FC812D620E800D9B07F /* box.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = box.h; sourceTree = ""; }; + 260F1FC912D620E800D9B07F /* box_construct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = box_construct.c; sourceTree = ""; }; + 260F1FCA12D620E800D9B07F /* box_normalise.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = box_normalise.c; sourceTree = ""; }; + 260F1FCB12D620E800D9B07F /* favicon.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = favicon.c; sourceTree = ""; }; + 260F1FCC12D620E800D9B07F /* favicon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = favicon.h; sourceTree = ""; }; + 260F1FCD12D620E800D9B07F /* font.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = font.c; sourceTree = ""; }; + 260F1FCE12D620E800D9B07F /* font.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = font.h; sourceTree = ""; }; + 260F1FCF12D620E800D9B07F /* form.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = form.c; sourceTree = ""; }; + 260F1FD012D620E800D9B07F /* form.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = form.h; sourceTree = ""; }; + 260F1FD112D620E800D9B07F /* html.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = html.c; sourceTree = ""; }; + 260F1FD212D620E800D9B07F /* html.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = html.h; sourceTree = ""; }; + 260F1FD312D620E800D9B07F /* html_interaction.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = html_interaction.c; sourceTree = ""; }; + 260F1FD412D620E800D9B07F /* html_redraw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = html_redraw.c; sourceTree = ""; }; + 260F1FD512D620E800D9B07F /* hubbub_binding.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hubbub_binding.c; sourceTree = ""; }; + 260F1FD612D620E800D9B07F /* imagemap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = imagemap.c; sourceTree = ""; }; + 260F1FD712D620E800D9B07F /* imagemap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = imagemap.h; sourceTree = ""; }; + 260F1FD812D620E800D9B07F /* layout.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = layout.c; sourceTree = ""; }; + 260F1FD912D620E800D9B07F /* layout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = layout.h; sourceTree = ""; }; + 260F1FDA12D620E800D9B07F /* list.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = list.c; sourceTree = ""; }; + 260F1FDB12D620E800D9B07F /* list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = list.h; sourceTree = ""; }; + 260F1FDC12D620E800D9B07F /* parser_binding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parser_binding.h; sourceTree = ""; }; + 260F1FDD12D620E800D9B07F /* table.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = table.c; sourceTree = ""; }; + 260F1FDE12D620E800D9B07F /* table.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = table.h; sourceTree = ""; }; + 260F1FE012D620E800D9B07F /* textplain.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = textplain.c; sourceTree = ""; }; + 260F1FE112D620E800D9B07F /* textplain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = textplain.h; sourceTree = ""; }; + 260F1FE312D620E800D9B07F /* base64.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = base64.c; sourceTree = ""; }; + 260F1FE412D620E800D9B07F /* base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = base64.h; sourceTree = ""; }; + 260F1FE512D620E800D9B07F /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; + 260F1FE612D620E800D9B07F /* container.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = container.c; sourceTree = ""; }; + 260F1FE712D620E800D9B07F /* container.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = container.h; sourceTree = ""; }; + 260F1FE812D620E800D9B07F /* errors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = errors.h; sourceTree = ""; }; + 260F1FE912D620E800D9B07F /* filename.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = filename.c; sourceTree = ""; }; + 260F1FEA12D620E800D9B07F /* filename.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filename.h; sourceTree = ""; }; + 260F1FEB12D620E800D9B07F /* findresource.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = findresource.c; sourceTree = ""; }; + 260F1FEC12D620E800D9B07F /* findresource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = findresource.h; sourceTree = ""; }; + 260F1FED12D620E800D9B07F /* hashtable.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hashtable.c; sourceTree = ""; }; + 260F1FEE12D620E800D9B07F /* hashtable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hashtable.h; sourceTree = ""; }; + 260F1FEF12D620E800D9B07F /* http.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = http.c; sourceTree = ""; }; + 260F1FF012D620E800D9B07F /* http.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = http.h; sourceTree = ""; }; + 260F1FF112D620E800D9B07F /* locale.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = locale.c; sourceTree = ""; }; + 260F1FF212D620E800D9B07F /* locale.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = locale.h; sourceTree = ""; }; + 260F1FF312D620E800D9B07F /* log.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = log.c; sourceTree = ""; }; + 260F1FF412D620E800D9B07F /* log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = log.h; sourceTree = ""; }; + 260F1FF612D620E800D9B07F /* memdebug.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = memdebug.c; sourceTree = ""; }; + 260F1FF712D620E800D9B07F /* memdebug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memdebug.h; sourceTree = ""; }; + 260F1FF812D620E800D9B07F /* messages.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = messages.c; sourceTree = ""; }; + 260F1FF912D620E800D9B07F /* messages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = messages.h; sourceTree = ""; }; + 260F1FFA12D620E800D9B07F /* ring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ring.h; sourceTree = ""; }; + 260F1FFB12D620E800D9B07F /* talloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = talloc.c; sourceTree = ""; }; + 260F1FFC12D620E800D9B07F /* talloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = talloc.h; sourceTree = ""; }; + 260F1FFF12D620E800D9B07F /* url.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = url.c; sourceTree = ""; }; + 260F200012D620E800D9B07F /* url.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = url.h; sourceTree = ""; }; + 260F200112D620E800D9B07F /* useragent.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = useragent.c; sourceTree = ""; }; + 260F200212D620E800D9B07F /* useragent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = useragent.h; sourceTree = ""; }; + 260F200312D620E800D9B07F /* utf8.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = utf8.c; sourceTree = ""; }; + 260F200412D620E800D9B07F /* utf8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utf8.h; sourceTree = ""; }; + 260F200512D620E800D9B07F /* utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = utils.c; sourceTree = ""; }; + 260F200612D620E800D9B07F /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utils.h; sourceTree = ""; }; + 260F200712D620E800D9B07F /* utsname.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utsname.h; sourceTree = ""; }; + 260F20AE12D6228C00D9B07F /* libssl.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libssl.dylib; path = usr/lib/libssl.dylib; sourceTree = SDKROOT; }; + 260F20B012D6229900D9B07F /* libxml2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libxml2.dylib; path = usr/lib/libxml2.dylib; sourceTree = SDKROOT; }; + 260F20B412D622AA00D9B07F /* libcurl.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcurl.dylib; path = usr/lib/libcurl.dylib; sourceTree = SDKROOT; }; + 260F20B812D622C600D9B07F /* libcrypto.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcrypto.dylib; path = usr/lib/libcrypto.dylib; sourceTree = SDKROOT; }; + 260F20BC12D622F500D9B07F /* libnsbmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libnsbmp.a; path = /usr/local/lib/libnsbmp.a; sourceTree = ""; }; + 260F20BE12D622F500D9B07F /* libnsgif.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libnsgif.a; path = /usr/local/lib/libnsgif.a; sourceTree = ""; }; + 260F20C512D6230B00D9B07F /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; + 260F20CA12D6231E00D9B07F /* libhubbub.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libhubbub.a; path = /usr/local/lib/libhubbub.a; sourceTree = ""; }; + 260F20CC12D6232D00D9B07F /* libcss.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcss.a; path = /usr/local/lib/libcss.a; sourceTree = ""; }; + 260F20D112D6235200D9B07F /* libparserutils.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libparserutils.a; path = /usr/local/lib/libparserutils.a; sourceTree = ""; }; + 260F20D612D6237E00D9B07F /* libwapcaplet.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libwapcaplet.a; path = /usr/local/lib/libwapcaplet.a; sourceTree = ""; }; + 260F20DA12D623D000D9B07F /* libiconv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libiconv.dylib; path = usr/lib/libiconv.dylib; sourceTree = SDKROOT; }; + 260FC03112D85ACE00079C00 /* bitmap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitmap.h; sourceTree = ""; }; + 26121DA812D700B800E10F91 /* MainMenu.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainMenu.xib; sourceTree = ""; }; + 26121DD712D703F400E10F91 /* NetSurfApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetSurfApp.h; sourceTree = ""; }; + 26121DD812D703F400E10F91 /* NetSurfApp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NetSurfApp.m; sourceTree = ""; }; + 26121E3D12D70A1A00E10F91 /* BrowserWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrowserWindow.h; sourceTree = ""; }; + 26121E3E12D70A1A00E10F91 /* BrowserWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BrowserWindow.m; sourceTree = ""; }; + 26121EAB12D70E0A00E10F91 /* Browser.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = Browser.xib; sourceTree = ""; }; + 26121EFB12D7132100E10F91 /* BrowserView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrowserView.h; sourceTree = ""; }; + 26121EFC12D7132100E10F91 /* BrowserView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BrowserView.m; sourceTree = ""; }; + 2612205512D7247900E10F91 /* libjpeg.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libjpeg.dylib; path = usr/local/lib/libjpeg.dylib; sourceTree = SDKROOT; }; + 261223B712D77F9C00E10F91 /* font.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = font.h; sourceTree = ""; }; + 261223CB12D7805300E10F91 /* plotter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = plotter.h; sourceTree = ""; }; + 2612265712D7ACB500E10F91 /* default.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = default.css; sourceTree = ""; }; + 2612265912D7ACB500E10F91 /* quirks.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = quirks.css; sourceTree = ""; }; + 2612265D12D7AD6800E10F91 /* adblock.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = adblock.css; sourceTree = ""; }; + 2612269012D7AE4100E10F91 /* de */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = de; path = de.lproj/Messages; sourceTree = ""; }; + 2612269312D7AE9B00E10F91 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text; name = nl; path = nl.lproj/Messages; sourceTree = ""; }; + 2612269412D7AEA800E10F91 /* en */ = {isa = PBXFileReference; lastKnownFileType = text; name = en; path = en.lproj/Messages; sourceTree = ""; }; + 2612269512D7AEB500E10F91 /* it */ = {isa = PBXFileReference; lastKnownFileType = text; name = it; path = it.lproj/Messages; sourceTree = ""; }; + 2612269612D7AEBE00E10F91 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text; name = fr; path = fr.lproj/Messages; sourceTree = ""; }; + 265F30A712D6637E0048B600 /* NetSurf-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "NetSurf-Info.plist"; sourceTree = ""; }; + 265F30AB12D6637E0048B600 /* Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Prefix.pch; sourceTree = ""; }; + 265F311912D663F50048B600 /* gui.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = gui.m; sourceTree = ""; }; + 265F314712D666660048B600 /* plotter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = plotter.m; sourceTree = ""; }; + 265F315112D667060048B600 /* history.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = history.m; sourceTree = ""; }; + 265F316112D667E10048B600 /* schedule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = schedule.m; sourceTree = ""; }; + 265F316612D668130048B600 /* thumbnail.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = thumbnail.m; sourceTree = ""; }; + 265F316F12D668790048B600 /* fetch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = fetch.m; sourceTree = ""; }; + 265F319012D668DB0048B600 /* url.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = url.m; sourceTree = ""; }; + 265F31C412D66A0D0048B600 /* save.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = save.m; sourceTree = ""; }; + 265F31CA12D66A890048B600 /* bitmap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitmap.h; sourceTree = ""; }; + 265F31CB12D66A890048B600 /* bmp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bmp.c; sourceTree = ""; }; + 265F31CC12D66A890048B600 /* bmp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bmp.h; sourceTree = ""; }; + 265F31CD12D66A890048B600 /* gif.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = gif.c; sourceTree = ""; }; + 265F31CE12D66A890048B600 /* gif.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gif.h; sourceTree = ""; }; + 265F31CF12D66A890048B600 /* ico.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ico.c; sourceTree = ""; }; + 265F31D012D66A890048B600 /* ico.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ico.h; sourceTree = ""; }; + 265F31D112D66A890048B600 /* jpeg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jpeg.c; sourceTree = ""; }; + 265F31D212D66A890048B600 /* jpeg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jpeg.h; sourceTree = ""; }; + 265F31D312D66A890048B600 /* mng.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mng.c; sourceTree = ""; }; + 265F31D412D66A890048B600 /* mng.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mng.h; sourceTree = ""; }; + 265F31D512D66A890048B600 /* nssprite.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = nssprite.c; sourceTree = ""; }; + 265F31D612D66A890048B600 /* nssprite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nssprite.h; sourceTree = ""; }; + 265F31D712D66A890048B600 /* png.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = png.c; sourceTree = ""; }; + 265F31D812D66A890048B600 /* png.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = png.h; sourceTree = ""; }; + 265F31D912D66A890048B600 /* rsvg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rsvg.c; sourceTree = ""; }; + 265F31DA12D66A890048B600 /* rsvg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rsvg.h; sourceTree = ""; }; + 265F31DB12D66A890048B600 /* svg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = svg.c; sourceTree = ""; }; + 265F31DC12D66A890048B600 /* svg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = svg.h; sourceTree = ""; }; + 265F31DD12D66A890048B600 /* webp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = webp.c; sourceTree = ""; }; + 265F31DE12D66A890048B600 /* webp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = webp.h; sourceTree = ""; }; + 265F31EB12D66B190048B600 /* bitmap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = bitmap.m; sourceTree = ""; }; + 265F320512D66C200048B600 /* utf8.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = utf8.m; sourceTree = ""; }; + 265F321312D66CD90048B600 /* utils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = utils.m; sourceTree = ""; }; + 265F321E12D66D510048B600 /* font.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = font.m; sourceTree = ""; }; + 2671AA2012D8D32300B8A46A /* libpng.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libpng.dylib; path = usr/X11/lib/libpng.3.dylib; sourceTree = SDKROOT; }; + 8D1107320486CEB800E47090 /* NetSurf.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = NetSurf.app; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8D11072E0486CEB800E47090 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, + 260F20AF12D6228C00D9B07F /* libssl.dylib in Frameworks */, + 260F20B112D6229900D9B07F /* libxml2.dylib in Frameworks */, + 260F20B512D622AA00D9B07F /* libcurl.dylib in Frameworks */, + 260F20B912D622C600D9B07F /* libcrypto.dylib in Frameworks */, + 260F20BD12D622F500D9B07F /* libnsbmp.a in Frameworks */, + 260F20BF12D622F500D9B07F /* libnsgif.a in Frameworks */, + 260F20C612D6230B00D9B07F /* libz.dylib in Frameworks */, + 260F20CB12D6231E00D9B07F /* libhubbub.a in Frameworks */, + 260F20CD12D6232D00D9B07F /* libcss.a in Frameworks */, + 260F20D212D6235200D9B07F /* libparserutils.a in Frameworks */, + 260F20D712D6237E00D9B07F /* libwapcaplet.a in Frameworks */, + 260F20DB12D623D000D9B07F /* libiconv.dylib in Frameworks */, + 2612205612D7247900E10F91 /* libjpeg.dylib in Frameworks */, + 2671AA2112D8D32300B8A46A /* libpng.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 19C28FACFE9D520D11CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8D1107320486CEB800E47090 /* NetSurf.app */, + ); + name = Products; + sourceTree = ""; + }; + 260F1F6212D620E800D9B07F /* content */ = { + isa = PBXGroup; + children = ( + 260F1F6312D620E800D9B07F /* content.c */, + 260F1F6412D620E800D9B07F /* content.h */, + 260F1F6512D620E800D9B07F /* content_protected.h */, + 260F1F6612D620E800D9B07F /* content_type.h */, + 260F1F6712D620E800D9B07F /* dirlist.c */, + 260F1F6812D620E800D9B07F /* dirlist.h */, + 260F1F6912D620E800D9B07F /* fetch.c */, + 260F1F6A12D620E800D9B07F /* fetch.h */, + 260F1F6B12D620E800D9B07F /* fetchers */, + 260F1F7212D620E800D9B07F /* hlcache.c */, + 260F1F7312D620E800D9B07F /* hlcache.h */, + 260F1F7412D620E800D9B07F /* llcache.c */, + 260F1F7512D620E800D9B07F /* llcache.h */, + 260F1F7612D620E800D9B07F /* urldb.c */, + 260F1F7712D620E800D9B07F /* urldb.h */, + ); + name = content; + path = ../content; + sourceTree = SOURCE_ROOT; + }; + 260F1F6B12D620E800D9B07F /* fetchers */ = { + isa = PBXGroup; + children = ( + 260F1F6C12D620E800D9B07F /* fetch_curl.c */, + 260F1F6D12D620E800D9B07F /* fetch_curl.h */, + 260F1F6E12D620E800D9B07F /* fetch_data.c */, + 260F1F6F12D620E800D9B07F /* fetch_data.h */, + 260F1F7012D620E800D9B07F /* fetch_file.c */, + 260F1F7112D620E800D9B07F /* fetch_file.h */, + ); + path = fetchers; + sourceTree = ""; + }; + 260F1F7812D620E800D9B07F /* css */ = { + isa = PBXGroup; + children = ( + 260F1F7912D620E800D9B07F /* css.c */, + 260F1F7A12D620E800D9B07F /* css.h */, + 260F1F7B12D620E800D9B07F /* dump.c */, + 260F1F7C12D620E800D9B07F /* dump.h */, + 260F1F7D12D620E800D9B07F /* internal.c */, + 260F1F7E12D620E800D9B07F /* internal.h */, + 260F1F7F12D620E800D9B07F /* select.c */, + 260F1F8012D620E800D9B07F /* select.h */, + 260F1F8112D620E800D9B07F /* utils.c */, + 260F1F8212D620E800D9B07F /* utils.h */, + ); + name = css; + path = ../css; + sourceTree = SOURCE_ROOT; + }; + 260F1F8312D620E800D9B07F /* desktop */ = { + isa = PBXGroup; + children = ( + 260F1F8412D620E800D9B07F /* 401login.h */, + 260F1F8512D620E800D9B07F /* browser.c */, + 260F1F8612D620E800D9B07F /* browser.h */, + 260F1F8712D620E800D9B07F /* cookies.c */, + 260F1F8812D620E800D9B07F /* cookies.h */, + 260F1F8912D620E800D9B07F /* download.c */, + 260F1F8A12D620E800D9B07F /* download.h */, + 260F1F8B12D620E800D9B07F /* frames.c */, + 260F1F8C12D620E800D9B07F /* frames.h */, + 260F1F8D12D620E800D9B07F /* gui.h */, + 260F1F8E12D620E800D9B07F /* history_core.c */, + 260F1F8F12D620E800D9B07F /* history_core.h */, + 260F1F9012D620E800D9B07F /* history_global_core.c */, + 260F1F9112D620E800D9B07F /* history_global_core.h */, + 260F1F9212D620E800D9B07F /* hotlist.c */, + 260F1F9312D620E800D9B07F /* hotlist.h */, + 260F1F9412D620E800D9B07F /* knockout.c */, + 260F1F9512D620E800D9B07F /* knockout.h */, + 260F1F9612D620E800D9B07F /* mouse.c */, + 260F1F9712D620E800D9B07F /* mouse.h */, + 260F1F9812D620E800D9B07F /* netsurf.c */, + 260F1F9912D620E800D9B07F /* netsurf.h */, + 260F1F9A12D620E800D9B07F /* options.c */, + 260F1F9B12D620E800D9B07F /* options.h */, + 260F1F9C12D620E800D9B07F /* plot_style.c */, + 260F1F9D12D620E800D9B07F /* plot_style.h */, + 260F1F9E12D620E800D9B07F /* plotters.h */, + 260F1F9F12D620E800D9B07F /* print.c */, + 260F1FA012D620E800D9B07F /* print.h */, + 260F1FA112D620E800D9B07F /* printer.h */, + 260F1FA212D620E800D9B07F /* save_complete.c */, + 260F1FA312D620E800D9B07F /* save_complete.h */, + 260F1FA412D620E800D9B07F /* save_pdf */, + 260F1FAA12D620E800D9B07F /* save_text.c */, + 260F1FAB12D620E800D9B07F /* save_text.h */, + 260F1FAC12D620E800D9B07F /* scroll.c */, + 260F1FAD12D620E800D9B07F /* scroll.h */, + 260F1FAE12D620E800D9B07F /* search.c */, + 260F1FAF12D620E800D9B07F /* search.h */, + 260F1FB012D620E800D9B07F /* searchweb.c */, + 260F1FB112D620E800D9B07F /* searchweb.h */, + 260F1FB212D620E800D9B07F /* selection.c */, + 260F1FB312D620E800D9B07F /* selection.h */, + 260F1FB412D620E800D9B07F /* sslcert.c */, + 260F1FB512D620E800D9B07F /* sslcert.h */, + 260F1FB612D620E800D9B07F /* textarea.c */, + 260F1FB712D620E800D9B07F /* textarea.h */, + 260F1FB812D620E800D9B07F /* textinput.c */, + 260F1FB912D620E800D9B07F /* textinput.h */, + 260F1FBA12D620E800D9B07F /* tree.c */, + 260F1FBB12D620E800D9B07F /* tree.h */, + 260F1FBC12D620E800D9B07F /* tree_url_node.c */, + 260F1FBD12D620E800D9B07F /* tree_url_node.h */, + 260F1FBE12D620E800D9B07F /* version.c */, + ); + name = desktop; + path = ../desktop; + sourceTree = SOURCE_ROOT; + }; + 260F1FA412D620E800D9B07F /* save_pdf */ = { + isa = PBXGroup; + children = ( + 260F1FA512D620E800D9B07F /* font_haru.c */, + 260F1FA612D620E800D9B07F /* font_haru.h */, + 260F1FA712D620E800D9B07F /* pdf_plotters.c */, + 260F1FA812D620E800D9B07F /* pdf_plotters.h */, + ); + path = save_pdf; + sourceTree = ""; + }; + 260F1FC612D620E800D9B07F /* render */ = { + isa = PBXGroup; + children = ( + 260F1FC712D620E800D9B07F /* box.c */, + 260F1FC812D620E800D9B07F /* box.h */, + 260F1FC912D620E800D9B07F /* box_construct.c */, + 260F1FCA12D620E800D9B07F /* box_normalise.c */, + 260F1FCB12D620E800D9B07F /* favicon.c */, + 260F1FCC12D620E800D9B07F /* favicon.h */, + 260F1FCD12D620E800D9B07F /* font.c */, + 260F1FCE12D620E800D9B07F /* font.h */, + 260F1FCF12D620E800D9B07F /* form.c */, + 260F1FD012D620E800D9B07F /* form.h */, + 260F1FD112D620E800D9B07F /* html.c */, + 260F1FD212D620E800D9B07F /* html.h */, + 260F1FD312D620E800D9B07F /* html_interaction.c */, + 260F1FD412D620E800D9B07F /* html_redraw.c */, + 260F1FD512D620E800D9B07F /* hubbub_binding.c */, + 260F1FD612D620E800D9B07F /* imagemap.c */, + 260F1FD712D620E800D9B07F /* imagemap.h */, + 260F1FD812D620E800D9B07F /* layout.c */, + 260F1FD912D620E800D9B07F /* layout.h */, + 260F1FDA12D620E800D9B07F /* list.c */, + 260F1FDB12D620E800D9B07F /* list.h */, + 260F1FDC12D620E800D9B07F /* parser_binding.h */, + 260F1FDD12D620E800D9B07F /* table.c */, + 260F1FDE12D620E800D9B07F /* table.h */, + 260F1FDF12D620E800D9B07F /* test */, + 260F1FE012D620E800D9B07F /* textplain.c */, + 260F1FE112D620E800D9B07F /* textplain.h */, + ); + name = render; + path = ../render; + sourceTree = SOURCE_ROOT; + }; + 260F1FDF12D620E800D9B07F /* test */ = { + isa = PBXGroup; + children = ( + ); + path = test; + sourceTree = ""; + }; + 260F1FE212D620E800D9B07F /* utils */ = { + isa = PBXGroup; + children = ( + 260F1FE312D620E800D9B07F /* base64.c */, + 260F1FE412D620E800D9B07F /* base64.h */, + 260F1FE512D620E800D9B07F /* config.h */, + 260F1FE612D620E800D9B07F /* container.c */, + 260F1FE712D620E800D9B07F /* container.h */, + 260F1FE812D620E800D9B07F /* errors.h */, + 260F1FE912D620E800D9B07F /* filename.c */, + 260F1FEA12D620E800D9B07F /* filename.h */, + 260F1FEB12D620E800D9B07F /* findresource.c */, + 260F1FEC12D620E800D9B07F /* findresource.h */, + 260F1FED12D620E800D9B07F /* hashtable.c */, + 260F1FEE12D620E800D9B07F /* hashtable.h */, + 260F1FEF12D620E800D9B07F /* http.c */, + 260F1FF012D620E800D9B07F /* http.h */, + 260F1FF112D620E800D9B07F /* locale.c */, + 260F1FF212D620E800D9B07F /* locale.h */, + 260F1FF312D620E800D9B07F /* log.c */, + 260F1FF412D620E800D9B07F /* log.h */, + 260F1FF612D620E800D9B07F /* memdebug.c */, + 260F1FF712D620E800D9B07F /* memdebug.h */, + 260F1FF812D620E800D9B07F /* messages.c */, + 260F1FF912D620E800D9B07F /* messages.h */, + 260F1FFA12D620E800D9B07F /* ring.h */, + 260F1FFB12D620E800D9B07F /* talloc.c */, + 260F1FFC12D620E800D9B07F /* talloc.h */, + 260F1FFF12D620E800D9B07F /* url.c */, + 260F200012D620E800D9B07F /* url.h */, + 260F200112D620E800D9B07F /* useragent.c */, + 260F200212D620E800D9B07F /* useragent.h */, + 260F200312D620E800D9B07F /* utf8.c */, + 260F200412D620E800D9B07F /* utf8.h */, + 260F200512D620E800D9B07F /* utils.c */, + 260F200612D620E800D9B07F /* utils.h */, + 260F200712D620E800D9B07F /* utsname.h */, + ); + name = utils; + path = ../utils; + sourceTree = SOURCE_ROOT; + }; + 265F303F12D6637E0048B600 /* cocoa */ = { + isa = PBXGroup; + children = ( + 265F310F12D663C20048B600 /* res */, + 265F30AB12D6637E0048B600 /* Prefix.pch */, + 265F311912D663F50048B600 /* gui.m */, + 261223CB12D7805300E10F91 /* plotter.h */, + 265F314712D666660048B600 /* plotter.m */, + 265F315112D667060048B600 /* history.m */, + 265F316112D667E10048B600 /* schedule.m */, + 265F316612D668130048B600 /* thumbnail.m */, + 265F316F12D668790048B600 /* fetch.m */, + 265F319012D668DB0048B600 /* url.m */, + 265F31C412D66A0D0048B600 /* save.m */, + 260FC03112D85ACE00079C00 /* bitmap.h */, + 265F31EB12D66B190048B600 /* bitmap.m */, + 265F320512D66C200048B600 /* utf8.m */, + 265F321312D66CD90048B600 /* utils.m */, + 261223B712D77F9C00E10F91 /* font.h */, + 265F321E12D66D510048B600 /* font.m */, + 26121DD712D703F400E10F91 /* NetSurfApp.h */, + 26121DD812D703F400E10F91 /* NetSurfApp.m */, + 26121E3D12D70A1A00E10F91 /* BrowserWindow.h */, + 26121E3E12D70A1A00E10F91 /* BrowserWindow.m */, + 26121EFB12D7132100E10F91 /* BrowserView.h */, + 26121EFC12D7132100E10F91 /* BrowserView.m */, + ); + name = cocoa; + sourceTree = ""; + }; + 265F310F12D663C20048B600 /* res */ = { + isa = PBXGroup; + children = ( + 2612268F12D7AE4100E10F91 /* Messages */, + 2612265D12D7AD6800E10F91 /* adblock.css */, + 2612265712D7ACB500E10F91 /* default.css */, + 2612265912D7ACB500E10F91 /* quirks.css */, + 265F30A712D6637E0048B600 /* NetSurf-Info.plist */, + 26121DA812D700B800E10F91 /* MainMenu.xib */, + 26121EAB12D70E0A00E10F91 /* Browser.xib */, + ); + path = res; + sourceTree = ""; + }; + 265F31C912D66A890048B600 /* image */ = { + isa = PBXGroup; + children = ( + 265F31CA12D66A890048B600 /* bitmap.h */, + 265F31CB12D66A890048B600 /* bmp.c */, + 265F31CC12D66A890048B600 /* bmp.h */, + 265F31CD12D66A890048B600 /* gif.c */, + 265F31CE12D66A890048B600 /* gif.h */, + 265F31CF12D66A890048B600 /* ico.c */, + 265F31D012D66A890048B600 /* ico.h */, + 265F31D112D66A890048B600 /* jpeg.c */, + 265F31D212D66A890048B600 /* jpeg.h */, + 265F31D312D66A890048B600 /* mng.c */, + 265F31D412D66A890048B600 /* mng.h */, + 265F31D512D66A890048B600 /* nssprite.c */, + 265F31D612D66A890048B600 /* nssprite.h */, + 265F31D712D66A890048B600 /* png.c */, + 265F31D812D66A890048B600 /* png.h */, + 265F31D912D66A890048B600 /* rsvg.c */, + 265F31DA12D66A890048B600 /* rsvg.h */, + 265F31DB12D66A890048B600 /* svg.c */, + 265F31DC12D66A890048B600 /* svg.h */, + 265F31DD12D66A890048B600 /* webp.c */, + 265F31DE12D66A890048B600 /* webp.h */, + ); + name = image; + path = ../image; + sourceTree = SOURCE_ROOT; + }; + 29B97314FDCFA39411CA2CEA /* Untitled */ = { + isa = PBXGroup; + children = ( + 265F303F12D6637E0048B600 /* cocoa */, + 260F1F6212D620E800D9B07F /* content */, + 260F1F7812D620E800D9B07F /* css */, + 260F1F8312D620E800D9B07F /* desktop */, + 260F1FC612D620E800D9B07F /* render */, + 265F31C912D66A890048B600 /* image */, + 260F1FE212D620E800D9B07F /* utils */, + 29B97323FDCFA39411CA2CEA /* Frameworks */, + 19C28FACFE9D520D11CA2CBB /* Products */, + ); + name = Untitled; + sourceTree = ""; + }; + 29B97323FDCFA39411CA2CEA /* Frameworks */ = { + isa = PBXGroup; + children = ( + 2671AA2012D8D32300B8A46A /* libpng.dylib */, + 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, + 260F20AE12D6228C00D9B07F /* libssl.dylib */, + 260F20B012D6229900D9B07F /* libxml2.dylib */, + 260F20B412D622AA00D9B07F /* libcurl.dylib */, + 260F20B812D622C600D9B07F /* libcrypto.dylib */, + 260F20BC12D622F500D9B07F /* libnsbmp.a */, + 260F20BE12D622F500D9B07F /* libnsgif.a */, + 260F20C512D6230B00D9B07F /* libz.dylib */, + 260F20CA12D6231E00D9B07F /* libhubbub.a */, + 260F20CC12D6232D00D9B07F /* libcss.a */, + 260F20D112D6235200D9B07F /* libparserutils.a */, + 260F20D612D6237E00D9B07F /* libwapcaplet.a */, + 260F20DA12D623D000D9B07F /* libiconv.dylib */, + 2612205512D7247900E10F91 /* libjpeg.dylib */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8D1107260486CEB800E47090 /* NetSurf */ = { + isa = PBXNativeTarget; + buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "NetSurf" */; + buildPhases = ( + 8D1107290486CEB800E47090 /* Resources */, + 8D11072C0486CEB800E47090 /* Sources */, + 8D11072E0486CEB800E47090 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = NetSurf; + productInstallPath = "$(HOME)/Applications"; + productName = Untitled; + productReference = 8D1107320486CEB800E47090 /* NetSurf.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 29B97313FDCFA39411CA2CEA /* Project object */ = { + isa = PBXProject; + buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "NetSurf" */; + compatibilityVersion = "Xcode 3.0"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + de, + en, + fr, + it, + nl, + ); + mainGroup = 29B97314FDCFA39411CA2CEA /* Untitled */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8D1107260486CEB800E47090 /* NetSurf */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D1107290486CEB800E47090 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 26121DA912D700B800E10F91 /* MainMenu.xib in Resources */, + 26121EAC12D70E0A00E10F91 /* Browser.xib in Resources */, + 2612265A12D7ACB500E10F91 /* default.css in Resources */, + 2612265C12D7ACB500E10F91 /* quirks.css in Resources */, + 2612266D12D7AD6800E10F91 /* adblock.css in Resources */, + 2612269112D7AE4100E10F91 /* Messages in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8D11072C0486CEB800E47090 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 260F200A12D620E800D9B07F /* content.c in Sources */, + 260F200B12D620E800D9B07F /* dirlist.c in Sources */, + 260F200C12D620E800D9B07F /* fetch.c in Sources */, + 260F200D12D620E800D9B07F /* fetch_curl.c in Sources */, + 260F200E12D620E800D9B07F /* fetch_data.c in Sources */, + 260F200F12D620E800D9B07F /* fetch_file.c in Sources */, + 260F201012D620E800D9B07F /* hlcache.c in Sources */, + 260F201112D620E800D9B07F /* llcache.c in Sources */, + 260F201212D620E800D9B07F /* urldb.c in Sources */, + 260F201312D620E800D9B07F /* css.c in Sources */, + 260F201412D620E800D9B07F /* dump.c in Sources */, + 260F201512D620E800D9B07F /* internal.c in Sources */, + 260F201612D620E800D9B07F /* select.c in Sources */, + 260F201712D620E800D9B07F /* utils.c in Sources */, + 260F201812D620E800D9B07F /* browser.c in Sources */, + 260F201912D620E800D9B07F /* cookies.c in Sources */, + 260F201A12D620E800D9B07F /* download.c in Sources */, + 260F201B12D620E800D9B07F /* frames.c in Sources */, + 260F201C12D620E800D9B07F /* history_core.c in Sources */, + 260F201D12D620E800D9B07F /* history_global_core.c in Sources */, + 260F201E12D620E800D9B07F /* hotlist.c in Sources */, + 260F201F12D620E800D9B07F /* knockout.c in Sources */, + 260F202012D620E800D9B07F /* mouse.c in Sources */, + 260F202112D620E800D9B07F /* netsurf.c in Sources */, + 260F202212D620E800D9B07F /* options.c in Sources */, + 260F202312D620E800D9B07F /* plot_style.c in Sources */, + 260F202412D620E800D9B07F /* print.c in Sources */, + 260F202512D620E800D9B07F /* save_complete.c in Sources */, + 260F202612D620E800D9B07F /* font_haru.c in Sources */, + 260F202712D620E800D9B07F /* pdf_plotters.c in Sources */, + 260F202912D620E800D9B07F /* save_text.c in Sources */, + 260F202A12D620E800D9B07F /* scroll.c in Sources */, + 260F202B12D620E800D9B07F /* search.c in Sources */, + 260F202C12D620E800D9B07F /* searchweb.c in Sources */, + 260F202D12D620E800D9B07F /* selection.c in Sources */, + 260F202E12D620E800D9B07F /* sslcert.c in Sources */, + 260F202F12D620E800D9B07F /* textarea.c in Sources */, + 260F203012D620E800D9B07F /* textinput.c in Sources */, + 260F203112D620E800D9B07F /* tree.c in Sources */, + 260F203212D620E800D9B07F /* tree_url_node.c in Sources */, + 260F203312D620E800D9B07F /* version.c in Sources */, + 260F203A12D620E800D9B07F /* box.c in Sources */, + 260F203B12D620E800D9B07F /* box_construct.c in Sources */, + 260F203C12D620E800D9B07F /* box_normalise.c in Sources */, + 260F203D12D620E800D9B07F /* favicon.c in Sources */, + 260F203E12D620E800D9B07F /* font.c in Sources */, + 260F203F12D620E800D9B07F /* form.c in Sources */, + 260F204012D620E800D9B07F /* html.c in Sources */, + 260F204112D620E800D9B07F /* html_interaction.c in Sources */, + 260F204212D620E800D9B07F /* html_redraw.c in Sources */, + 260F204312D620E800D9B07F /* hubbub_binding.c in Sources */, + 260F204412D620E800D9B07F /* imagemap.c in Sources */, + 260F204512D620E800D9B07F /* layout.c in Sources */, + 260F204612D620E800D9B07F /* list.c in Sources */, + 260F204712D620E800D9B07F /* table.c in Sources */, + 260F204812D620E800D9B07F /* textplain.c in Sources */, + 260F204912D620E800D9B07F /* base64.c in Sources */, + 260F204A12D620E800D9B07F /* container.c in Sources */, + 260F204B12D620E800D9B07F /* filename.c in Sources */, + 260F204C12D620E800D9B07F /* findresource.c in Sources */, + 260F204D12D620E800D9B07F /* hashtable.c in Sources */, + 260F204E12D620E800D9B07F /* http.c in Sources */, + 260F204F12D620E800D9B07F /* locale.c in Sources */, + 260F205012D620E800D9B07F /* log.c in Sources */, + 260F205212D620E800D9B07F /* memdebug.c in Sources */, + 260F205312D620E800D9B07F /* messages.c in Sources */, + 260F205412D620E800D9B07F /* talloc.c in Sources */, + 260F205712D620E800D9B07F /* url.c in Sources */, + 260F205812D620E800D9B07F /* useragent.c in Sources */, + 260F205912D620E800D9B07F /* utf8.c in Sources */, + 260F205A12D620E800D9B07F /* utils.c in Sources */, + 265F311A12D663F50048B600 /* gui.m in Sources */, + 265F314812D666660048B600 /* plotter.m in Sources */, + 265F315212D667060048B600 /* history.m in Sources */, + 265F316212D667E10048B600 /* schedule.m in Sources */, + 265F316712D668130048B600 /* thumbnail.m in Sources */, + 265F317012D668790048B600 /* fetch.m in Sources */, + 265F319112D668DB0048B600 /* url.m in Sources */, + 265F31C512D66A0D0048B600 /* save.m in Sources */, + 265F31DF12D66A890048B600 /* bmp.c in Sources */, + 265F31E012D66A890048B600 /* gif.c in Sources */, + 265F31E112D66A890048B600 /* ico.c in Sources */, + 265F31E212D66A890048B600 /* jpeg.c in Sources */, + 265F31E312D66A890048B600 /* mng.c in Sources */, + 265F31E412D66A890048B600 /* nssprite.c in Sources */, + 265F31E512D66A890048B600 /* png.c in Sources */, + 265F31E612D66A890048B600 /* rsvg.c in Sources */, + 265F31E712D66A890048B600 /* svg.c in Sources */, + 265F31E812D66A890048B600 /* webp.c in Sources */, + 265F31EC12D66B190048B600 /* bitmap.m in Sources */, + 265F320612D66C200048B600 /* utf8.m in Sources */, + 265F321412D66CD90048B600 /* utils.m in Sources */, + 265F321F12D66D510048B600 /* font.m in Sources */, + 26121DD912D703F400E10F91 /* NetSurfApp.m in Sources */, + 26121E3F12D70A1A00E10F91 /* BrowserWindow.m in Sources */, + 26121EFD12D7132100E10F91 /* BrowserView.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 2612268F12D7AE4100E10F91 /* Messages */ = { + isa = PBXVariantGroup; + children = ( + 2612269012D7AE4100E10F91 /* de */, + 2612269312D7AE9B00E10F91 /* nl */, + 2612269412D7AEA800E10F91 /* en */, + 2612269512D7AEB500E10F91 /* it */, + 2612269612D7AEBE00E10F91 /* fr */, + ); + name = Messages; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + C01FCF4B08A954540054247B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = Prefix.pch; + INFOPLIST_FILE = "res/NetSurf-Info.plist"; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SDKROOT)/usr/X11/lib\"", + ); + OTHER_CFLAGS = ( + "-DWITH_GIF", + "-DWITH_BMP", + "-DWITH_PNG", + "-DWITH_JPEG", + ); + PRODUCT_NAME = NetSurf; + }; + name = Debug; + }; + C01FCF4C08A954540054247B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = Prefix.pch; + INFOPLIST_FILE = "res/NetSurf-Info.plist"; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SDKROOT)/usr/X11/lib\"", + ); + OTHER_CFLAGS = ( + "-DWITH_GIF", + "-DWITH_BMP", + "-DWITH_PNG", + "-DWITH_JPEG", + ); + PRODUCT_NAME = NetSurf; + }; + name = Release; + }; + C01FCF4F08A954540054247B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ONLY_ACTIVE_ARCH_PRE_XCODE_3_1)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = ""; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + /usr/X11/include, + /usr/include/libxml2/, + /usr/local/include/, + "${SRCROOT}/../", + ); + ONLY_ACTIVE_ARCH_PRE_XCODE_3_1 = "$(NATIVE_ARCH_ACTUAL)"; + OTHER_LDFLAGS = ""; + PREBINDING = NO; + SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk"; + }; + name = Debug; + }; + C01FCF5008A954540054247B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1)"; + ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1 = "x86_64 i386 ppc"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_VERSION = ""; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + /usr/X11/include, + /usr/include/libxml2/, + /usr/local/include/, + "${SRCROOT}/../", + ); + OTHER_LDFLAGS = ""; + PREBINDING = NO; + SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "NetSurf" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C01FCF4B08A954540054247B /* Debug */, + C01FCF4C08A954540054247B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C01FCF4E08A954540054247B /* Build configuration list for PBXProject "NetSurf" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C01FCF4F08A954540054247B /* Debug */, + C01FCF5008A954540054247B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; +} diff --git a/cocoa/NetsurfApp.h b/cocoa/NetsurfApp.h new file mode 100644 index 000000000..cca9c419b --- /dev/null +++ b/cocoa/NetsurfApp.h @@ -0,0 +1,26 @@ +/* + * 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 + + +@interface NetSurfApp : NSApplication { + +} + +@end diff --git a/cocoa/NetsurfApp.m b/cocoa/NetsurfApp.m new file mode 100644 index 000000000..3ca150e14 --- /dev/null +++ b/cocoa/NetsurfApp.m @@ -0,0 +1,59 @@ +/* + * 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 "NetSurfApp.h" + +#import "desktop/gui.h" +#include "content/urldb.h" +#include "content/fetch.h" +#include "css/utils.h" +#include "desktop/gui.h" +#include "desktop/history_core.h" +#include "desktop/mouse.h" +#include "desktop/netsurf.h" +#include "desktop/options.h" +#include "desktop/plotters.h" +#include "desktop/save_complete.h" +#include "desktop/selection.h" +#include "desktop/textinput.h" +#include "render/html.h" +#include "utils/url.h" +#include "utils/log.h" +#include "utils/messages.h" +#include "utils/utils.h" + + +@implementation NetSurfApp + +- (void) run; +{ + [self finishLaunching]; + browser_window_create( "http://netsurf-browser.org/", NULL, NULL, true, false ); + netsurf_main_loop(); +} + +-(void) terminate: (id)sender; +{ + netsurf_quit = true; + [self postEvent: [NSEvent otherEventWithType: NSApplicationDefined location: NSZeroPoint + modifierFlags: 0 timestamp: 0 windowNumber: 0 context: NULL + subtype: 0 data1: 0 data2: 0] + atStart: YES]; +} + +@end diff --git a/cocoa/bitmap.h b/cocoa/bitmap.h new file mode 100644 index 000000000..78526e425 --- /dev/null +++ b/cocoa/bitmap.h @@ -0,0 +1,24 @@ +/* + * 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 . + */ + +#ifndef COCOA_BITMAP_H +#define COCOA_BITMAP_H + +CGImageRef cocoa_get_cgimage( void *bitmap ); + +#endif \ No newline at end of file diff --git a/cocoa/bitmap.m b/cocoa/bitmap.m new file mode 100644 index 000000000..eb791c46e --- /dev/null +++ b/cocoa/bitmap.m @@ -0,0 +1,223 @@ +/* + * 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 + +#import "image/bitmap.h" +#import "cocoa/bitmap.h" + +#define BITS_PER_SAMPLE (8) +#define SAMPLES_PER_PIXEL (4) +#define BITS_PER_PIXEL (BITS_PER_SAMPLE * SAMPLES_PER_PIXEL) +#define BYTES_PER_PIXEL (BITS_PER_PIXEL / 8) +#define RED_OFFSET (0) +#define GREEN_OFFSET (1) +#define BLUE_OFFSET (2) +#define ALPHA_OFFSET (3) + +static CGImageRef cocoa_prepare_bitmap( void *bitmap ); +static NSMapTable *cocoa_get_bitmap_cache(); + +int bitmap_get_width(void *bitmap) +{ + NSCParameterAssert( NULL != bitmap ); + NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap; + return [bmp pixelsWide]; +} + +int bitmap_get_height(void *bitmap) +{ + NSCParameterAssert( NULL != bitmap ); + NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap; + return [bmp pixelsHigh]; +} + +bool bitmap_get_opaque(void *bitmap) +{ + NSCParameterAssert( NULL != bitmap ); + NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap; + return [bmp isOpaque]; +} + +void bitmap_destroy(void *bitmap) +{ + NSCParameterAssert( NULL != bitmap ); + + NSMapTable *cache = cocoa_get_bitmap_cache(); + CGImageRef image = NSMapGet( cache, bitmap ); + if (NULL != image) { + CGImageRelease( image ); + NSMapRemove( cache, bitmap ); + } + + NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap; + [bmp release]; +} + +void *bitmap_create(int width, int height, unsigned int state) +{ + NSBitmapImageRep *bmp = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes: NULL + pixelsWide: width + pixelsHigh: height + bitsPerSample: BITS_PER_SAMPLE + samplesPerPixel: SAMPLES_PER_PIXEL + hasAlpha: YES + isPlanar: NO + colorSpaceName: NSDeviceRGBColorSpace + bitmapFormat: NSAlphaNonpremultipliedBitmapFormat + bytesPerRow: BYTES_PER_PIXEL * width + bitsPerPixel: BITS_PER_PIXEL]; + + return bmp; +} + +void bitmap_set_opaque(void *bitmap, bool opaque) +{ + NSCParameterAssert( NULL != bitmap ); + NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap; + [bmp setOpaque: opaque ? YES : NO]; +} + +bool bitmap_test_opaque(void *bitmap) +{ + NSCParameterAssert( bitmap_get_bpp( bitmap ) == BITS_PER_PIXEL ); + + unsigned char *buf = bitmap_get_buffer( bitmap ); + + const size_t height = bitmap_get_height( bitmap ); + const size_t width = bitmap_get_width( bitmap ); + + const size_t line_step = bitmap_get_rowstride( bitmap ) - BYTES_PER_PIXEL * width; + + for (size_t y = 0; y < height; y++) { + for (size_t x = 0; x < height; x++) { + if (buf[ALPHA_OFFSET] != 0xFF) return false; + buf += BYTES_PER_PIXEL; + } + buf += line_step; + } + + return true; +} + +unsigned char *bitmap_get_buffer(void *bitmap) +{ + NSCParameterAssert( NULL != bitmap ); + NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap; + return [bmp bitmapData]; +} + +size_t bitmap_get_rowstride(void *bitmap) +{ + NSCParameterAssert( NULL != bitmap ); + NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap; + return [bmp bytesPerRow]; +} + +size_t bitmap_get_bpp(void *bitmap) +{ + NSCParameterAssert( NULL != bitmap ); + NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap; + return [bmp bitsPerPixel]; +} + +bool bitmap_save(void *bitmap, const char *path, unsigned flags) +{ + NSCParameterAssert( NULL != bitmap ); + NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap; + + NSData *tiff = [bmp TIFFRepresentation]; + return [tiff writeToFile: [NSString stringWithUTF8String: path] atomically: YES]; +} + +void bitmap_modified(void *bitmap) +{ + NSMapTable *cache = cocoa_get_bitmap_cache(); + CGImageRef image = NSMapGet( cache, bitmap ); + if (NULL != image) { + CGImageRelease( image ); + NSMapRemove( cache, bitmap ); + } +} + +void bitmap_set_suspendable(void *bitmap, void *private_word, + void (*invalidate)(void *bitmap, void *private_word)) + +{ + // nothing to do +} + +CGImageRef cocoa_get_cgimage( void *bitmap ) +{ + NSMapTable *cache = cocoa_get_bitmap_cache(); + + CGImageRef result = NSMapGet( cache, bitmap ); + if (NULL == result) { + result = cocoa_prepare_bitmap( bitmap ); + NSMapInsertKnownAbsent( cache, bitmap, result ); + } + + return result; +} + +static inline NSMapTable *cocoa_get_bitmap_cache() +{ + static NSMapTable *cache = nil; + if (cache == nil) { + cache = NSCreateMapTable( NSNonOwnedPointerMapKeyCallBacks, NSNonOwnedPointerMapValueCallBacks, 0 ); + } + return cache; +} + +static CGImageRef cocoa_prepare_bitmap( void *bitmap ) +{ + NSCParameterAssert( NULL != bitmap ); + + NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap; + + size_t w = [bmp pixelsWide]; + size_t h = [bmp pixelsHigh]; + + CGImageRef original = [bmp CGImage]; + + if (h <= 1) return CGImageRetain( original ); + + void *data = malloc( 4 * w * h ); + + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); + CGContextRef context = CGBitmapContextCreate( data, w, h, BITS_PER_SAMPLE, + BYTES_PER_PIXEL * w, colorSpace, + [bmp isOpaque] ? kCGImageAlphaNoneSkipLast + : kCGImageAlphaPremultipliedLast ); + CGColorSpaceRelease( colorSpace ); + + CGContextTranslateCTM( context, 0.0, h ); + CGContextScaleCTM( context, 1.0, -1.0 ); + + CGRect rect = CGRectMake( 0, 0, w, h ); + CGContextClearRect( context, rect ); + CGContextDrawImage( context, rect, original ); + + CGImageRef result = CGBitmapContextCreateImage( context ); + + CGContextRelease( context ); + free( data ); + + return result; +} + diff --git a/cocoa/fetch.m b/cocoa/fetch.m new file mode 100644 index 000000000..7ad862b8b --- /dev/null +++ b/cocoa/fetch.m @@ -0,0 +1,57 @@ +/* + * Copyright 2003 James Bursa + * + * 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 . + */ + +#include +#include +#include "content/fetch.h" +#include "utils/log.h" +#include "utils/utils.h" + +/** + * filetype -- determine the MIME type of a local file + */ + +const char *fetch_filetype(const char *unix_path) +{ + int l; + LOG(("unix path %s", unix_path)); + l = strlen(unix_path); + if (2 < l && strcasecmp(unix_path + l - 3, "css") == 0) + return "text/css"; + if (2 < l && strcasecmp(unix_path + l - 3, "jpg") == 0) + return "image/jpeg"; + if (3 < l && strcasecmp(unix_path + l - 4, "jpeg") == 0) + return "image/jpeg"; + if (2 < l && strcasecmp(unix_path + l - 3, "gif") == 0) + return "image/gif"; + if (2 < l && strcasecmp(unix_path + l - 3, "png") == 0) + return "image/png"; + if (2 < l && strcasecmp(unix_path + l - 3, "jng") == 0) + return "image/jng"; + if (2 < l && strcasecmp(unix_path + l - 3, "svg") == 0) + return "image/svg"; + if (2 < l && strcasecmp(unix_path + l - 3, "bmp") == 0) + return "image/x-ms-bmp"; + return "text/html"; +} + + +char *fetch_mimetype(const char *ro_path) +{ + return strdup("text/plain"); +} diff --git a/cocoa/font.h b/cocoa/font.h new file mode 100644 index 000000000..b65d62844 --- /dev/null +++ b/cocoa/font.h @@ -0,0 +1,24 @@ +/* + * 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 . + */ + +#ifndef COCOA_FONT_H +#define COCOA_FONT_H + +void cocoa_draw_string( int x, int y, const char *bytes, size_t length, const plot_font_style_t *style ); + +#endif diff --git a/cocoa/font.m b/cocoa/font.m new file mode 100644 index 000000000..634bbb7c5 --- /dev/null +++ b/cocoa/font.m @@ -0,0 +1,177 @@ +/* + * 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 + +#include + +#include + +#include "css/css.h" +#include "render/font.h" +#include "desktop/options.h" + +#import "font.h" +#import "plotter.h" + +static NSLayoutManager *cocoa_prepare_layout_manager( const char *string, size_t length, + const plot_font_style_t *style ); +static NSTextStorage *cocoa_text_storage = nil; +static NSTextContainer *cocoa_text_container = nil; + +static bool nsfont_width(const plot_font_style_t *style, + const char *string, size_t length, + int *width) +{ + NSCParameterAssert( NULL != width ); + + NSLayoutManager *layout = cocoa_prepare_layout_manager( string, length, style ); + *width = NULL != layout ? NSWidth( [layout usedRectForTextContainer: cocoa_text_container] ) : 0; + return true; +} + +static bool nsfont_position_in_string(const plot_font_style_t *style, + const char *string, size_t length, + int x, size_t *char_offset, int *actual_x) +{ + NSLayoutManager *layout = cocoa_prepare_layout_manager( string, length, style ); + NSUInteger glyphIndex = [layout glyphIndexForPoint: NSMakePoint( x, 0 ) + inTextContainer: cocoa_text_container + fractionOfDistanceThroughGlyph: NULL]; + NSUInteger chars = [layout characterIndexForGlyphAtIndex: glyphIndex]; + + size_t offset = 0; + while (chars > 0) { + uint8_t ch = ((uint8_t *)string)[offset]; + + if (0xC2 <= ch && ch <= 0xDF) offset += 2; + else if (0xE0 <= ch && ch <= 0xEF) offset += 3; + else if (0xF0 <= ch && ch <= 0xF4) offset += 4; + else offset++; + + --chars; + } + + *char_offset = offset; + *actual_x = [layout locationForGlyphAtIndex: glyphIndex].x; + + return true; +} + +static bool nsfont_split(const plot_font_style_t *style, + const char *string, size_t length, + int x, size_t *char_offset, int *actual_x) +{ + nsfont_position_in_string(style, string, length, x, char_offset, + actual_x); + if (*char_offset == length) return true; + + while ((string[*char_offset] != ' ') && (*char_offset > 0)) + (*char_offset)--; + + return true; +} + + +static NSString *cocoa_font_family_name( plot_font_generic_family_t family ) +{ + switch (family) { + case PLOT_FONT_FAMILY_SERIF: return @"Times"; + case PLOT_FONT_FAMILY_SANS_SERIF: return @"Helvetica"; + case PLOT_FONT_FAMILY_MONOSPACE: return @"Courier"; + case PLOT_FONT_FAMILY_CURSIVE: return @"Apple Chancery"; + case PLOT_FONT_FAMILY_FANTASY: return @"Marker Felt"; + default: return nil; + } +} + +static NSFont *cocoa_font_get_nsfont( const plot_font_style_t *style ) +{ + return [NSFont fontWithName: cocoa_font_family_name( style->family ) + size: (CGFloat)style->size / FONT_SIZE_SCALE]; +} + +NSDictionary *cocoa_font_attributes( const plot_font_style_t *style ) +{ + return [NSDictionary dictionaryWithObjectsAndKeys: + cocoa_font_get_nsfont( style ), NSFontAttributeName, + cocoa_convert_colour( style->foreground ), NSForegroundColorAttributeName, + nil]; +} + +static NSString *cocoa_string_from_utf8_characters( const char *string, size_t characters ) +{ + if (NULL == string || 0 == characters) return nil; + + return [[[NSString alloc] initWithBytes: string length:characters encoding:NSUTF8StringEncoding] autorelease]; +} + + +static NSLayoutManager *cocoa_prepare_layout_manager( const char *bytes, size_t length, + const plot_font_style_t *style ) +{ + if (NULL == bytes || 0 == length) return nil; + + static NSLayoutManager *layout = nil; + + if (nil == layout) { + cocoa_text_container = [[NSTextContainer alloc] initWithContainerSize: NSMakeSize( CGFLOAT_MAX, CGFLOAT_MAX )]; + [cocoa_text_container setLineFragmentPadding: 0]; + + layout = [[NSLayoutManager alloc] init]; + [layout addTextContainer: cocoa_text_container]; + + cocoa_text_storage = [[NSTextStorage alloc] init]; + [cocoa_text_storage addLayoutManager: layout]; + } + + + NSString *string = cocoa_string_from_utf8_characters( bytes, length ); + if (nil == string) return nil; + + NSDictionary *attributes = cocoa_font_attributes( style ); + NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString: string attributes: attributes]; + if (![attributedString isEqualToAttributedString: cocoa_text_storage]) { + [cocoa_text_storage setAttributedString: attributedString]; + [layout ensureLayoutForTextContainer: cocoa_text_container]; + } + [attributedString release]; + + + return layout; +} + +void cocoa_draw_string( int x, int y, const char *bytes, size_t length, const plot_font_style_t *style ) +{ + NSLayoutManager *layout = cocoa_prepare_layout_manager( bytes, length, style ); + + if ([cocoa_text_storage length] > 0) { + NSFont *font = [cocoa_text_storage attribute: NSFontAttributeName atIndex: 0 effectiveRange: NULL]; + CGFloat baseline = [layout defaultBaselineOffsetForFont: font]; + + NSRange glyphRange = [layout glyphRangeForTextContainer: cocoa_text_container]; + [layout drawGlyphsForGlyphRange: glyphRange atPoint: NSMakePoint( x, y - baseline )]; + } +} + +const struct font_functions nsfont = { + nsfont_width, + nsfont_position_in_string, + nsfont_split +}; + 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 + * + * 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 + +#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; +} + diff --git a/cocoa/history.m b/cocoa/history.m new file mode 100644 index 000000000..63b53a13c --- /dev/null +++ b/cocoa/history.m @@ -0,0 +1,37 @@ +/* + * 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 "desktop/browser.h" + +#import + +#define UNIMPL() NSLog( @"Function '%s' unimplemented", __func__ ) + + +void global_history_add_recent(const char *url) +{ + UNIMPL(); +} + +char **global_history_get_recent(int *count) +{ + UNIMPL(); + return NULL; +} + + diff --git a/cocoa/plotter.h b/cocoa/plotter.h new file mode 100644 index 000000000..1b3f1e1be --- /dev/null +++ b/cocoa/plotter.h @@ -0,0 +1,24 @@ +/* + * 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 . + */ + +#ifndef COCOA_PLOTTER_H +#define COCOA_PLOTTER_H + +NSColor *cocoa_convert_colour( colour clr ); + +#endif diff --git a/cocoa/plotter.m b/cocoa/plotter.m new file mode 100644 index 000000000..a7652e9ed --- /dev/null +++ b/cocoa/plotter.m @@ -0,0 +1,223 @@ +/* + * 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 . + */ + +#include + +#include "desktop/plotters.h" +#import "desktop/plot_style.h" + +#import "cocoa/font.h" +#import "cocoa/plotter.h" +#import "cocoa/bitmap.h" + +#define UNIMPL() NSLog( @"Function '%s' unimplemented", __func__ ) + +static void cocoa_plot_render_path(NSBezierPath *path,const plot_style_t *pstyle); +static void cocoa_plot_path_set_stroke_pattern(NSBezierPath *path,const plot_style_t *pstyle); +static NSRect cocoa_plot_clip_rect; + +#define colour_red_component( c ) (((c) >> 0) & 0xFF) +#define colour_green_component( c ) (((c) >> 8) & 0xFF) +#define colour_blue_component( c ) (((c) >> 16) & 0xFF) +#define colour_alpha_component( c ) (((c) >> 24) & 0xFF) +#define colour_from_rgba( r, g, b, a) ((((colour)(r)) << 0) | \ + (((colour)(g)) << 8) | \ + (((colour)(b)) << 16) | \ + (((colour)(a)) << 24)) +#define colour_from_rgb( r, g, b ) colour_from_rgba( (r), (g), (b), 0xFF ) + +NSColor *cocoa_convert_colour( colour clr ) +{ + return [NSColor colorWithDeviceRed: (float)colour_red_component( clr ) / 0xFF + green: (float)colour_green_component( clr ) / 0xFF + blue: (float)colour_blue_component( clr ) / 0xFF + alpha: 1.0]; +} + +static void cocoa_plot_path_set_stroke_pattern(NSBezierPath *path,const plot_style_t *pstyle) +{ + static const CGFloat dashed_pattern[2] = { 5.0, 2.0 }; + static const CGFloat dotted_pattern[2] = { 2.0, 2.0 }; + + switch (pstyle->stroke_type) { + case PLOT_OP_TYPE_DASH: + [path setLineDash: dashed_pattern count: 2 phase: 0]; + break; + + case PLOT_OP_TYPE_DOT: + [path setLineDash: dotted_pattern count: 2 phase: 0]; + break; + + default: + // ignore + break; + } + + [path setLineWidth: pstyle->stroke_width]; +} + +static bool plot_line(int x0, int y0, int x1, int y1, const plot_style_t *pstyle) +{ + NSBezierPath *path = [NSBezierPath bezierPath]; + [path moveToPoint: NSMakePoint( x0, y0 )]; + [path lineToPoint: NSMakePoint( x1, y1 )]; + + cocoa_plot_render_path( path, pstyle ); + + return true; +} + +static bool plot_rectangle(int x0, int y0, int x1, int y1, const plot_style_t *pstyle) +{ + NSBezierPath *path = [NSBezierPath bezierPathWithRect: NSMakeRect( x0, y0, x1-x0, y1-y0 )]; + + cocoa_plot_render_path( path, pstyle ); + + return true; +} + +static bool plot_text(int x, int y, const char *text, size_t length, + const plot_font_style_t *fstyle) +{ + [NSGraphicsContext saveGraphicsState]; + [NSBezierPath clipRect: cocoa_plot_clip_rect]; + + cocoa_draw_string( x, y, text, length, fstyle ); + + [NSGraphicsContext restoreGraphicsState]; + + return true; +} + + +static bool plot_clip(int x0, int y0, int x1, int y1) +{ + cocoa_plot_clip_rect = NSMakeRect( x0, y0, abs(x1-x0), abs(y1-y0) ); + return true; +} + +void cocoa_plot_render_path(NSBezierPath *path,const plot_style_t *pstyle) +{ + [NSGraphicsContext saveGraphicsState]; + [NSBezierPath clipRect: cocoa_plot_clip_rect]; + + if (pstyle->fill_type != PLOT_OP_TYPE_NONE) { + [cocoa_convert_colour( pstyle->fill_colour ) setFill]; + [path fill]; + } + + if (pstyle->stroke_type != PLOT_OP_TYPE_NONE) { + cocoa_plot_path_set_stroke_pattern(path,pstyle); + + [cocoa_convert_colour( pstyle->stroke_colour ) set]; + + [path stroke]; + } + + [NSGraphicsContext restoreGraphicsState]; +} + +static bool plot_arc(int x, int y, int radius, int angle1, int angle2, const plot_style_t *pstyle) +{ + NSBezierPath *path = [NSBezierPath bezierPath]; + [path appendBezierPathWithArcWithCenter: NSMakePoint( x, y ) radius: radius + startAngle: angle1 endAngle: angle2 + clockwise: NO]; + + cocoa_plot_render_path( path, pstyle); + + return true; +} + +static bool plot_disc(int x, int y, int radius, const plot_style_t *pstyle) +{ + NSBezierPath *path = [NSBezierPath bezierPathWithOvalInRect: + NSMakeRect( x - radius, y-radius, 2*radius, 2*radius )]; + + cocoa_plot_render_path( path, pstyle ); + + return true; +} + +static bool plot_polygon(const int *p, unsigned int n, const plot_style_t *pstyle) +{ + if (n <= 1) return true; + + NSBezierPath *path = [NSBezierPath bezierPath]; + [path moveToPoint: NSMakePoint( p[0], p[1] )]; + for (int i = 1; i < n; i++) { + [path lineToPoint: NSMakePoint( p[2*i], p[2*i+1] )]; + } + [path closePath]; + + cocoa_plot_render_path( path, pstyle ); + + return true; +} + +/* complex path (for SVG) */ +static bool plot_path(const float *p, unsigned int n, colour fill, float width, + colour c, const float transform[6]) +{ + UNIMPL(); + return true; +} + +/* Image */ +static bool plot_bitmap(int x, int y, int width, int height, + struct bitmap *bitmap, colour bg, + bitmap_flags_t flags) +{ + CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort]; + CGContextSaveGState( context ); + + CGContextClipToRect( context, NSRectToCGRect( cocoa_plot_clip_rect ) ); + + const bool tileX = flags & BITMAPF_REPEAT_X; + const bool tileY = flags & BITMAPF_REPEAT_Y; + + CGImageRef img = cocoa_get_cgimage( bitmap ); + + CGRect rect = CGRectMake( x, y, width, height ); + if (tileX || tileY) { + CGContextDrawTiledImage( context, rect, img ); + } else { + CGContextDrawImage( context, rect, img ); + } + + CGContextRestoreGState( context ); + + return true; +} + +struct plotter_table plot = { + .clip = plot_clip, + .arc = plot_arc, + .disc = plot_disc, + .rectangle = plot_rectangle, + .line = plot_line, + .polygon = plot_polygon, + + .path = plot_path, + + .bitmap = plot_bitmap, + + .text = plot_text, + + .option_knockout = true +}; \ No newline at end of file diff --git a/cocoa/res/Browser.xib b/cocoa/res/Browser.xib new file mode 100644 index 000000000..a0cc1a78d --- /dev/null +++ b/cocoa/res/Browser.xib @@ -0,0 +1,989 @@ + + + + 1050 + 10J567 + 804 + 1038.35 + 462.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 804 + + + YES + + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + YES + + YES + + + YES + + + + YES + + BrowserWindow + + + FirstResponder + + + NSApplication + + + 15 + 2 + {{135, 249}, {691, 632}} + 544735232 + NetSurf + NSWindow + + + 10771526-5048-4EBE-984D-B6BEEB6455E1 + + + YES + YES + YES + NO + 2 + 1 + + YES + + YES + 316FFEF7-FE4B-4054-A233-B48593490A7F + 484FB8D5-6AD6-4E75-B60E-CA03FC98EFCD + 7EEF129A-ED23-47F1-88E8-B60EAF53C80C + E2E89C48-DD3F-47A5-9E6C-25985A970F69 + FA0D0D22-FE0D-4337-A543-E5BB13E4E088 + NSToolbarCustomizeToolbarItem + NSToolbarFlexibleSpaceItem + NSToolbarSeparatorItem + NSToolbarSpaceItem + + + YES + + + 316FFEF7-FE4B-4054-A233-B48593490A7F + + Go back + Go back + + + + NSImage + NSGoLeftTemplate + + + + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + + 484FB8D5-6AD6-4E75-B60E-CA03FC98EFCD + + Go forward + Go forward + + + + NSImage + NSGoRightTemplate + + + + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + + 7EEF129A-ED23-47F1-88E8-B60EAF53C80C + + Reload + Reload + + + + NSImage + NSRefreshTemplate + + + + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + + E2E89C48-DD3F-47A5-9E6C-25985A970F69 + + + URL + + + + 268 + {{0, 14}, {96, 22}} + + + YES + + -1804468671 + 272630784 + + + LucidaGrande + 13 + 1044 + + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + 3 + MAA + + + + + + + + {96, 22} + {10000, 22} + YES + YES + 0 + YES + 0 + + + + FA0D0D22-FE0D-4337-A543-E5BB13E4E088 + + History + History + + + + NSImage + NSMultipleDocuments + + + + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + NSToolbarCustomizeToolbarItem + Customize + Customize + Customize Toolbar + + + NSImage + NSToolbarCustomizeToolbarItemImage + + + runToolbarCustomizationPalette: + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + NSToolbarFlexibleSpaceItem + + Flexible Space + + + + + + {1, 5} + {20000, 32} + YES + YES + -1 + YES + 0 + + YES + YES + + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + + + + NSToolbarSeparatorItem + + Separator + + + + + + {12, 5} + {12, 1000} + YES + YES + -1 + YES + 0 + + YES + YES + + + 1048576 + 2147483647 + + + + + + NSToolbarSpaceItem + + Space + + + + + + {32, 5} + {32, 32} + YES + YES + -1 + YES + 0 + + YES + YES + + + 1048576 + 2147483647 + + + + + + + + YES + + + + + + + + + + + + YES + + + + + + + + YES + + + {1.79769e+308, 1.79769e+308} + + + 256 + + YES + + + 274 + + YES + + + 2304 + + YES + + + 274 + {676, 597} + + BrowserView + + + {{1, 1}, {676, 597}} + + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + 4 + + + + 256 + {{677, 1}, {15, 597}} + + + _doScroller: + 1 + 0.96363627910614014 + + + + 256 + {{1, 598}, {676, 15}} + + 1 + + _doScroller: + 0.50602412223815918 + + + {{-1, 19}, {693, 614}} + + + 50 + + + + + + + 290 + {{27, 3}, {647, 14}} + + YES + + 68288064 + 272761856 + NetSurf + + LucidaGrande + 11 + 3100 + + + + + 6 + System + controlTextColor + + + + + + + 1316 + + {{6, 2}, {16, 16}} + + 28938 + 100 + + + {691, 632} + + + {{0, 0}, {1680, 1028}} + {1.79769e+308, 1.79769e+308} + NO + 20 + + + + YES + spinning + status + + YES + + + + + + YES + + + window + + + + 3 + + + + value: url + + + + + + value: url + value + url + 2 + + + 19 + + + + navigate: + + + + 20 + + + + view + + + + 21 + + + + reloadPage: + + + + 28 + + + + goBack: + + + + 29 + + + + goForward: + + + + 30 + + + + showHistory: + + + + 31 + + + + content + + + + 33 + + + + value: selection.status + + + + + + value: selection.status + value + selection.status + 2 + + + 37 + + + + animate: selection.spinning + + + + + + animate: selection.spinning + animate + selection.spinning + 2 + + + 39 + + + + + YES + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 1 + + + YES + + + + + + + 2 + + + YES + + + + + + + + 4 + + + YES + + + + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 8 + + + YES + + + + + + + + + + + + + + 13 + + + + + 14 + + + + + 15 + + + + + 11 + + + + + 18 + + + YES + + + + + + 16 + + + YES + + + + + + 17 + + + + + 22 + + + + + 23 + + + + + 24 + + + + + 25 + + + + + 32 + + + Browser View + + + 35 + + + YES + + + + + + 36 + + + + + 38 + + + + + + + YES + + YES + 1.IBEditorWindowLastContentRect + 1.IBPluginDependency + 1.IBWindowTemplateEditedContentRect + 1.NSWindowTemplate.visibleAtLaunch + 1.WindowOrigin + 1.editorWindowContentRectSynchronizationRect + 11.IBPluginDependency + 13.IBPluginDependency + 14.IBPluginDependency + 15.IBPluginDependency + 16.IBPluginDependency + 17.IBPluginDependency + 2.IBPluginDependency + 22.IBPluginDependency + 23.IBPluginDependency + 24.IBPluginDependency + 25.IBPluginDependency + 32.IBPluginDependency + 35.IBPluginDependency + 35.IBViewBoundsToFrameTransform + 36.IBPluginDependency + 38.IBPluginDependency + 38.IBViewBoundsToFrameTransform + 4.IBPluginDependency + 4.IBViewBoundsToFrameTransform + 5.IBPluginDependency + 6.IBPluginDependency + 7.IBPluginDependency + 8.IBEditorWindowLastContentRect + 8.IBPluginDependency + + + YES + {{135, 249}, {691, 632}} + com.apple.InterfaceBuilder.CocoaPlugin + {{135, 249}, {691, 632}} + + {196, 240} + {{202, 428}, {480, 270}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABAoAAAwXAAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABDQwAAwYgAAA + + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAAC/gAAAw5EAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{172, 881}, {617, 0}} + com.apple.InterfaceBuilder.CocoaPlugin + + + + YES + + + YES + + + + + YES + + + YES + + + + 39 + + + + YES + + BrowserView + NSView + + YES + + YES + goBack: + goForward: + reloadPage: + showHistory: + + + YES + id + id + id + id + + + + YES + + YES + goBack: + goForward: + reloadPage: + showHistory: + + + YES + + goBack: + id + + + goForward: + id + + + reloadPage: + id + + + showHistory: + id + + + + + IBProjectSource + BrowserView.h + + + + BrowserWindow + NSWindowController + + navigate: + id + + + navigate: + + navigate: + id + + + + view + BrowserView + + + view + + view + BrowserView + + + + IBProjectSource + BrowserWindow.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + ../NetSurf.xcodeproj + 3 + + YES + + YES + NSGoLeftTemplate + NSGoRightTemplate + NSMenuCheckmark + NSMenuMixedState + NSMultipleDocuments + NSRefreshTemplate + NSToolbarCustomizeToolbarItemImage + + + YES + {9, 9} + {9, 9} + {9, 8} + {7, 2} + {32, 32} + {10, 12} + {32, 32} + + + + diff --git a/cocoa/res/MainMenu.xib b/cocoa/res/MainMenu.xib new file mode 100644 index 000000000..01b7d134b --- /dev/null +++ b/cocoa/res/MainMenu.xib @@ -0,0 +1,1578 @@ + + + + 1050 + 10J567 + 804 + 1038.35 + 462.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 804 + + + YES + + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + YES + + NSApplication + + + FirstResponder + + + NSApplication + + + Main Menu + + YES + + + NetSurf + + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + NetSurf + + YES + + + About NetSurf + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Services + + 2147483647 + + + submenuAction: + + Services + + YES + + _NSServicesMenu + + + + + YES + YES + + + 2147483647 + + + + + + Hide NetSurf + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Quit NetSurf + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 2147483647 + + + submenuAction: + + File + + YES + + + New + n + 1048576 + 2147483647 + + + + + + Open… + o + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + Save + s + 1048576 + 2147483647 + + + + + + Save As… + S + 1179648 + 2147483647 + + + + + + Revert to Saved + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Page Setup... + P + 1179648 + 2147483647 + + + + + + + Print… + p + 1048576 + 2147483647 + + + + + + + + + Edit + + 2147483647 + + + submenuAction: + + Edit + + YES + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Delete + + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Find + + 2147483647 + + + submenuAction: + + Find + + YES + + + Find… + f + 1048576 + 2147483647 + + + 1 + + + + Find Next + g + 1048576 + 2147483647 + + + 2 + + + + Find Previous + G + 1048576 + 2147483647 + + + 3 + + + + Use Selection for Find + e + 1048576 + 2147483647 + + + 7 + + + + Jump to Selection + j + 1048576 + 2147483647 + + + + + + + + + Speech + + 2147483647 + + + submenuAction: + + Speech + + YES + + + Start Speaking + + 2147483647 + + + + + + Stop Speaking + + 2147483647 + + + + + + + + + + + + View + + 2147483647 + + + submenuAction: + + View + + YES + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Customize Toolbar… + + 2147483647 + + + + + + + + + Window + + 2147483647 + + + submenuAction: + + Window + + YES + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Bring All to Front + + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 2147483647 + + + submenuAction: + + Help + + YES + + + NetSurf Help + ? + 1048576 + 2147483647 + + + + + _NSHelpMenu + + + + _NSMainMenu + + + + + YES + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + print: + + + + 86 + + + + runPageLayout: + + + + 87 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + performClose: + + + + 193 + + + + performZoom: + + + + 240 + + + + showHelp: + + + + 360 + + + + saveDocument: + + + + 362 + + + + saveDocumentAs: + + + + 363 + + + + revertDocumentToSaved: + + + + 364 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + hide: + + + + 369 + + + + hideOtherApplications: + + + + 370 + + + + unhideAllApplications: + + + + 372 + + + + terminate: + + + + 448 + + + + cut: + + + + 741 + + + + paste: + + + + 742 + + + + redo: + + + + 745 + + + + undo: + + + + 749 + + + + startSpeaking: + + + + 751 + + + + copy: + + + + 755 + + + + delete: + + + + 756 + + + + selectAll: + + + + 758 + + + + stopSpeaking: + + + + 759 + + + + performFindPanelAction: + + + + 771 + + + + performFindPanelAction: + + + + 772 + + + + performFindPanelAction: + + + + 773 + + + + centerSelectionInVisibleArea: + + + + 774 + + + + performFindPanelAction: + + + + 775 + + + + + YES + + 0 + + YES + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + YES + + + + + + + + + + + 19 + + + YES + + + + + + 56 + + + YES + + + + + + 103 + + + YES + + + + + + 83 + + + YES + + + + + + 81 + + + YES + + + + + + + + + + + + + + + 75 + + + + + 80 + + + + + 78 + + + + + 72 + + + + + 82 + + + + + 77 + + + + + 73 + + + + + 112 + + + + + 74 + + + + + 106 + + + YES + + + + + + 111 + + + + + 57 + + + YES + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + + + 144 + + + + + 129 + + + + + 143 + + + + + 236 + + + + + 131 + + + YES + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 + + + YES + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + YES + + + + + + 296 + + + YES + + + + + + + 297 + + + + + 298 + + + + + 79 + + + + + 684 + + + YES + + + + + + 685 + + + YES + + + + + + + + + + + + + + + + 686 + + + + + 687 + + + + + 688 + + + + + 689 + + + + + 690 + + + + + 691 + + + + + 693 + + + + + 694 + + + + + 695 + + + + + 696 + + + YES + + + + + + 700 + + + YES + + + + + + 711 + + + YES + + + + + + + 712 + + + + + 713 + + + + + 734 + + + YES + + + + + + + + + + 735 + + + + + 736 + + + + + 737 + + + + + 738 + + + + + 739 + + + + + + + YES + + YES + -3.IBPluginDependency + 103.IBPluginDependency + 103.ImportedFromIB2 + 106.IBEditorWindowLastContentRect + 106.IBPluginDependency + 106.ImportedFromIB2 + 106.editorWindowContentRectSynchronizationRect + 111.IBPluginDependency + 111.ImportedFromIB2 + 112.IBPluginDependency + 112.ImportedFromIB2 + 129.IBPluginDependency + 129.ImportedFromIB2 + 130.IBEditorWindowLastContentRect + 130.IBPluginDependency + 130.ImportedFromIB2 + 130.editorWindowContentRectSynchronizationRect + 131.IBPluginDependency + 131.ImportedFromIB2 + 134.IBPluginDependency + 134.ImportedFromIB2 + 136.IBPluginDependency + 136.ImportedFromIB2 + 143.IBPluginDependency + 143.ImportedFromIB2 + 144.IBPluginDependency + 144.ImportedFromIB2 + 145.IBPluginDependency + 145.ImportedFromIB2 + 149.IBPluginDependency + 149.ImportedFromIB2 + 150.IBPluginDependency + 150.ImportedFromIB2 + 19.IBPluginDependency + 19.ImportedFromIB2 + 23.IBPluginDependency + 23.ImportedFromIB2 + 236.IBPluginDependency + 236.ImportedFromIB2 + 239.IBPluginDependency + 239.ImportedFromIB2 + 24.IBEditorWindowLastContentRect + 24.IBPluginDependency + 24.ImportedFromIB2 + 24.editorWindowContentRectSynchronizationRect + 29.IBEditorWindowLastContentRect + 29.IBPluginDependency + 29.ImportedFromIB2 + 29.WindowOrigin + 29.editorWindowContentRectSynchronizationRect + 295.IBPluginDependency + 296.IBEditorWindowLastContentRect + 296.IBPluginDependency + 296.editorWindowContentRectSynchronizationRect + 297.IBPluginDependency + 298.IBPluginDependency + 5.IBPluginDependency + 5.ImportedFromIB2 + 56.IBPluginDependency + 56.ImportedFromIB2 + 57.IBEditorWindowLastContentRect + 57.IBPluginDependency + 57.ImportedFromIB2 + 57.editorWindowContentRectSynchronizationRect + 58.IBPluginDependency + 58.ImportedFromIB2 + 684.IBPluginDependency + 685.IBEditorWindowLastContentRect + 685.IBPluginDependency + 686.IBPluginDependency + 687.IBPluginDependency + 688.IBPluginDependency + 689.IBPluginDependency + 690.IBPluginDependency + 691.IBPluginDependency + 693.IBPluginDependency + 694.IBPluginDependency + 695.IBPluginDependency + 696.IBPluginDependency + 700.IBPluginDependency + 711.IBEditorWindowLastContentRect + 711.IBPluginDependency + 712.IBPluginDependency + 713.IBPluginDependency + 72.IBPluginDependency + 72.ImportedFromIB2 + 73.IBPluginDependency + 73.ImportedFromIB2 + 734.IBEditorWindowLastContentRect + 734.IBPluginDependency + 735.IBPluginDependency + 736.IBPluginDependency + 737.IBPluginDependency + 738.IBPluginDependency + 739.IBPluginDependency + 74.IBPluginDependency + 74.ImportedFromIB2 + 75.IBPluginDependency + 75.ImportedFromIB2 + 77.IBPluginDependency + 77.ImportedFromIB2 + 78.IBPluginDependency + 78.ImportedFromIB2 + 79.IBPluginDependency + 79.ImportedFromIB2 + 80.IBPluginDependency + 80.ImportedFromIB2 + 81.IBEditorWindowLastContentRect + 81.IBPluginDependency + 81.ImportedFromIB2 + 81.editorWindowContentRectSynchronizationRect + 82.IBPluginDependency + 82.ImportedFromIB2 + 83.IBPluginDependency + 83.ImportedFromIB2 + 92.IBPluginDependency + 92.ImportedFromIB2 + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + {{533, 633}, {157, 23}} + com.apple.InterfaceBuilder.CocoaPlugin + + {{596, 852}, {216, 23}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{509, 573}, {64, 6}} + com.apple.InterfaceBuilder.CocoaPlugin + + {{436, 809}, {64, 6}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{462, 583}, {194, 73}} + com.apple.InterfaceBuilder.CocoaPlugin + + {{525, 802}, {197, 73}} + {{242, 656}, {352, 20}} + com.apple.InterfaceBuilder.CocoaPlugin + + {74, 862} + {{11, 977}, {478, 20}} + com.apple.InterfaceBuilder.CocoaPlugin + {{412, 613}, {231, 43}} + com.apple.InterfaceBuilder.CocoaPlugin + {{475, 832}, {234, 43}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{254, 473}, {186, 183}} + com.apple.InterfaceBuilder.CocoaPlugin + + {{23, 794}, {245, 183}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + {{368, 453}, {151, 203}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{519, 433}, {150, 43}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{608, 393}, {238, 103}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{326, 473}, {196, 183}} + com.apple.InterfaceBuilder.CocoaPlugin + + {{323, 672}, {199, 203}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + YES + + + YES + + + + + YES + + + YES + + + + 810 + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + ../NetSurf.xcodeproj + 3 + + YES + + YES + NSMenuCheckmark + NSMenuMixedState + + + YES + {9, 8} + {7, 2} + + + + diff --git a/cocoa/res/NetSurf-Info.plist b/cocoa/res/NetSurf-Info.plist new file mode 100644 index 000000000..ce1f1a274 --- /dev/null +++ b/cocoa/res/NetSurf-Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.yourcompany.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + NSMainNibFile + MainMenu + NSPrincipalClass + NetSurfApp + + diff --git a/cocoa/res/adblock.css b/cocoa/res/adblock.css new file mode 120000 index 000000000..e3811f62b --- /dev/null +++ b/cocoa/res/adblock.css @@ -0,0 +1 @@ +../../!NetSurf/Resources/AdBlock,f79 \ No newline at end of file diff --git a/cocoa/res/de.lproj/Messages b/cocoa/res/de.lproj/Messages new file mode 120000 index 000000000..2f1fc39c3 --- /dev/null +++ b/cocoa/res/de.lproj/Messages @@ -0,0 +1 @@ +../../../!NetSurf/Resources/de/Messages \ No newline at end of file diff --git a/cocoa/res/default.css b/cocoa/res/default.css new file mode 120000 index 000000000..6d2d4da5b --- /dev/null +++ b/cocoa/res/default.css @@ -0,0 +1 @@ +../../!NetSurf/Resources/CSS,f79 \ No newline at end of file diff --git a/cocoa/res/en.lproj/Messages b/cocoa/res/en.lproj/Messages new file mode 120000 index 000000000..72c9eff90 --- /dev/null +++ b/cocoa/res/en.lproj/Messages @@ -0,0 +1 @@ +../../../!NetSurf/Resources/en/Messages \ No newline at end of file diff --git a/cocoa/res/fr.lproj/Messages b/cocoa/res/fr.lproj/Messages new file mode 120000 index 000000000..a42cf08f4 --- /dev/null +++ b/cocoa/res/fr.lproj/Messages @@ -0,0 +1 @@ +../../../!NetSurf/Resources/fr/Messages \ No newline at end of file diff --git a/cocoa/res/it.lproj/Messages b/cocoa/res/it.lproj/Messages new file mode 120000 index 000000000..d4c5c2956 --- /dev/null +++ b/cocoa/res/it.lproj/Messages @@ -0,0 +1 @@ +../../../!NetSurf/Resources/it/Messages \ No newline at end of file diff --git a/cocoa/res/nl.lproj/Messages b/cocoa/res/nl.lproj/Messages new file mode 120000 index 000000000..d484ebd29 --- /dev/null +++ b/cocoa/res/nl.lproj/Messages @@ -0,0 +1 @@ +../../../!NetSurf/Resources/nl/Messages \ No newline at end of file diff --git a/cocoa/res/quirks.css b/cocoa/res/quirks.css new file mode 120000 index 000000000..d9fb80334 --- /dev/null +++ b/cocoa/res/quirks.css @@ -0,0 +1 @@ +../../!NetSurf/Resources/Quirks,f79 \ No newline at end of file diff --git a/cocoa/save.m b/cocoa/save.m new file mode 100644 index 000000000..a91a29810 --- /dev/null +++ b/cocoa/save.m @@ -0,0 +1,37 @@ +/* + * 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 + +#import "desktop/save_complete.h" + +#define UNIMPL() NSLog( @"Function '%s' unimplemented", __func__ ) + +bool save_complete_gui_save(const char *path, const char *filename, + size_t len, const char *sourcedata, content_type type) +{ + UNIMPL(); + return false; +} + +int save_complete_htmlSaveFileFormat(const char *path, const char *filename, + xmlDocPtr cur, const char *encoding, int format) +{ + UNIMPL(); + return 0; +} diff --git a/cocoa/schedule.m b/cocoa/schedule.m new file mode 100644 index 000000000..b5d5626af --- /dev/null +++ b/cocoa/schedule.m @@ -0,0 +1,91 @@ +/* + * 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 "desktop/browser.h" + +#import + +@interface ScheduledCallback : NSObject { + void (*callback)( void *userData ); + void *userData; +} + +- initWithCallback: (void (*)(void *))cb userData: (void *)ud; +- (void) schedule: (NSTimeInterval) ti; + +@end + +@implementation ScheduledCallback + +- initWithCallback: (void (*)(void *))cb userData: (void *)ud; +{ + callback = cb; + userData = ud; + + return self; +} + +static NSMutableSet *timerSet = nil; + +- (void) schedule: (NSTimeInterval) ti; +{ + if (nil == timerSet) { + timerSet = [[NSMutableSet alloc] init]; + } + + [self performSelector: @selector(timerFired) withObject: nil afterDelay: ti]; + [timerSet addObject: self]; +} + +- (void) timerFired; +{ + if ([timerSet containsObject: self]) { + [timerSet removeObject: self]; + callback( userData ); + } +} + +- (BOOL) isEqual: (id)object +{ + if (object == self) return YES; + if ([object class] != [self class]) return NO; + return ((ScheduledCallback *)object)->callback == callback && ((ScheduledCallback *)object)->userData == userData; +} + +- (NSUInteger) hash; +{ + return (NSUInteger)callback + (NSUInteger)userData; +} + +@end + +/* In platform specific schedule.c. */ +void schedule(int t, void (*callback)(void *p), void *p) +{ + ScheduledCallback *cb = [[ScheduledCallback alloc] initWithCallback: callback userData: p]; + [cb schedule: (NSTimeInterval)t / 100]; + [cb release]; +} + +void schedule_remove(void (*callback)(void *p), void *p) +{ + ScheduledCallback *cb = [[ScheduledCallback alloc] initWithCallback: callback userData: p]; + [timerSet removeObject: cb]; + [cb release]; +} + diff --git a/cocoa/thumbnail.m b/cocoa/thumbnail.m new file mode 100644 index 000000000..b6df608eb --- /dev/null +++ b/cocoa/thumbnail.m @@ -0,0 +1,61 @@ +/* + * 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 "desktop/browser.h" +#import "desktop/plotters.h" +#import "content/urldb.h" +#import "image/bitmap.h" + +#import + +/* In platform specific thumbnail.c. */ +bool thumbnail_create(struct hlcache_handle *content, struct bitmap *bitmap, + const char *url) +{ + CGColorSpaceRef cspace = CGColorSpaceCreateWithName( kCGColorSpaceGenericRGB ); + CGContextRef bitmapContext = CGBitmapContextCreate( bitmap_get_buffer( bitmap ), + bitmap_get_width( bitmap ), bitmap_get_height( bitmap ), + bitmap_get_bpp( bitmap ) / 4, + bitmap_get_rowstride( bitmap ), + cspace, kCGImageAlphaNoneSkipLast ); + CGColorSpaceRelease( cspace ); + + + size_t width = MIN( content_get_width( content ), 1024 ); + size_t height = MIN( content_get_height( content ), 768 ); + + CGContextTranslateCTM( bitmapContext, 0, bitmap_get_height( bitmap ) ); + CGContextScaleCTM( bitmapContext, (CGFloat)bitmap_get_width( bitmap ) / width, -(CGFloat)bitmap_get_height( bitmap ) / height ); + + [NSGraphicsContext setCurrentContext: [NSGraphicsContext graphicsContextWithGraphicsPort: bitmapContext flipped: YES]]; + + content_redraw( content, 0, 0, content_get_width( content ), content_get_height( content ), + 0, 0, content_get_width( content ), content_get_height( content ), + 1.0, 0xFFFFFFFF ); + + [NSGraphicsContext setCurrentContext: nil]; + CGContextRelease( bitmapContext ); + + bitmap_modified( bitmap ); + + if (NULL != url) urldb_set_thumbnail( url, bitmap ); + + return true; + +} + diff --git a/cocoa/url.m b/cocoa/url.m new file mode 100644 index 000000000..38d637e6e --- /dev/null +++ b/cocoa/url.m @@ -0,0 +1,37 @@ +/* + * 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 +#import +#import "utils/url.h" + +#import + +#define UNIMPL() NSLog( @"Function '%s' unimplemented", __func__ ) + +char *url_to_path(const char *url) +{ + NSURL *nsurl = [NSURL URLWithString: [NSString stringWithUTF8String: url]]; + return strdup([[nsurl path] UTF8String]); +} + +char *path_to_url(const char *path) +{ + UNIMPL(); + return NULL; +} diff --git a/cocoa/utf8.m b/cocoa/utf8.m new file mode 100644 index 000000000..ec75dfc91 --- /dev/null +++ b/cocoa/utf8.m @@ -0,0 +1,36 @@ +/* + * 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 + +#import "utils/utf8.h" +#define UNIMPL() NSLog( @"Function '%s' unimplemented", __func__ ) + +utf8_convert_ret utf8_to_local_encoding(const char *string, size_t len, + char **result) +{ + UNIMPL(); + return -1; +} + +utf8_convert_ret utf8_from_local_encoding(const char *string, size_t len, + char **result) +{ + UNIMPL(); + return -1; +} diff --git a/cocoa/utils.m b/cocoa/utils.m new file mode 100644 index 000000000..0b06b1d9a --- /dev/null +++ b/cocoa/utils.m @@ -0,0 +1,67 @@ +/* + * 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 +#import "utils/utils.h" +#import "desktop/tree_url_node.h" + +#define UNIMPL() NSLog( @"Function '%s' unimplemented", __func__ ) + +void die(const char * const error) +{ + [NSException raise: @"NetsurfDie" format: @"Error: %s", error]; +} + +void warn_user(const char *warning, const char *detail) +{ + NSRunAlertPanel( @"Warning", @"Warning %s: %s", @"OK", nil, nil, warning, detail ); +} + +query_id query_user(const char *query, const char *detail, + const query_callback *cb, void *pw, const char *yes, const char *no) +{ + UNIMPL(); + return 0; +} + +void query_close(query_id qid) +{ + UNIMPL(); +} + +void PDF_Password(char **owner_pass, char **user_pass, char *path) +{ + UNIMPL(); +} + +char *filename_from_path(char *path) +{ + UNIMPL(); + return NULL; +} + +bool path_add_part(char *path, int length, const char *newpart) +{ + UNIMPL(); + return false; +} + +void tree_icon_name_from_content_type(char *buffer, content_type type) +{ + UNIMPL(); +} \ No newline at end of file