diff --git a/frontends/gnustep/AppDelegate.h b/frontends/gnustep/AppDelegate.h index 80d8bc6ee..6a75724c1 100644 --- a/frontends/gnustep/AppDelegate.h +++ b/frontends/gnustep/AppDelegate.h @@ -16,6 +16,8 @@ along with this program. If not, see . #import #import +#import "NetsurfCallback.h" + @interface AppDelegate: NSResponder { @private } diff --git a/frontends/gnustep/AppDelegate.m b/frontends/gnustep/AppDelegate.m index 5d4a56c16..319f7c8d7 100644 --- a/frontends/gnustep/AppDelegate.m +++ b/frontends/gnustep/AppDelegate.m @@ -1,330 +1,20 @@ #import #import - - -#import "AppDelegate.h" -#import "BrowserWindowController.h" - #import "netsurf/netsurf.h" -#import "netsurf/misc.h" -#import "netsurf/window.h" -#import "netsurf/clipboard.h" -#import "netsurf/download.h" -#import "netsurf/fetch.h" -#import "netsurf/search.h" -#import "netsurf/bitmap.h" -#import "netsurf/layout.h" -#import "netsurf/browser_window.h" #import "utils/nsoption.h" #import "utils/nsurl.h" -/*******************/ -/****** Misc *******/ -/*******************/ - -// Schedule a callback to be run after t ms, or removed if ngtv, func and param. -static nserror gnustep_misc_schedule(int t, void (*callback)(void *p), void *p) { - NSLog(@"gnustep_misc_schedule"); - return NSERROR_OK; -} - -static struct gui_misc_table gnustep_misc_table = { - .schedule = gnustep_misc_schedule -}; - -/********************/ -/****** Window ******/ -/********************/ - -// Create and open a browser window -static struct gui_window *gnustep_window_create(struct browser_window *bw, - struct gui_window *existing, - gui_window_create_flags flags) { - NSLog(@"gnustep_window_create"); - BrowserWindowController *controller = [[BrowserWindowController alloc] - initWithWindowNibName: @"Browser"]; - [controller loadWindow]; - return (struct gui_window*)controller; -} - -// Destroy the specified window -static void gnustep_window_destroy(struct gui_window *gw) { - NSLog(@"gnustep_window_destroy"); -} - -// Trigger a redraw of the specified area, or the entire window if null -static nserror gnustep_window_invalidate(struct gui_window *gw, const struct rect *rect) { - NSLog(@"gnustep_window_invalidate"); - return NSERROR_OK; -} - -// Put the current scroll offset into sx and sy -static bool gnustep_window_get_scroll(struct gui_window *gw, int *sx, int *sy) { - NSLog(@"gnustep_window_get_scroll"); - return true; -} - -// Set the current scroll offset -static nserror gnustep_window_set_scroll(struct gui_window *gw, const struct rect *rect) { - NSLog(@"gnustep_window_set_scroll"); - return NSERROR_OK; -} - -// Put the dimensions of the specified window into width, height -static nserror gnustep_window_get_dimensions(struct gui_window *gw, int *width, int *height) { - NSLog(@"gnustep_window_get_dimensions"); - return NSERROR_OK; -} - -// Some kind of event happened -static nserror gnustep_window_event(struct gui_window *gw, enum gui_window_event event) { - NSLog(@"gnustep_window_event"); - return NSERROR_OK; -} - -static struct gui_window_table gnustep_window_table = { - .create = gnustep_window_create, - .destroy = gnustep_window_destroy, - .invalidate = gnustep_window_invalidate, - .get_scroll = gnustep_window_get_scroll, - .set_scroll = gnustep_window_set_scroll, - .get_dimensions = gnustep_window_get_dimensions, - .event = gnustep_window_event -}; - -/***********************/ -/****** Clipboard ******/ -/***********************/ - -// Put content of clipboard into buffer up to a maximum length -static void gnustep_clipboard_get(char **buffer, size_t *length) { - NSLog(@"gnustep_clipboard_get"); -} - -// Save the provided clipboard for later retreival above -static void gnustep_clipboard_set(const char *buffer, size_t length, nsclipboard_styles styles[], int n_styles) { - NSLog(@"gnustep_clipboard_set"); -} - -static struct gui_clipboard_table gnustep_clipboard_table = { - .get = gnustep_clipboard_get, - .set = gnustep_clipboard_set -}; - -/**********************/ -/****** Download ******/ -/**********************/ - -// Create and display a downloads window? -static struct gui_download_window *gnustep_download_create(struct download_context *ctx, struct gui_window *parent) { - NSLog(@"gnustep_download_create"); - return NULL; -} - -// ?? -static nserror gnustep_download_data(struct gui_download_window *dw, const char *data, unsigned int size) { - NSLog(@"gnustep_download_data"); - return NSERROR_OK; -} - -// Error occurred during download -static void gnustep_download_error(struct gui_download_window *dw, const char *error_msg) { - NSLog(@"gnustep_download_error"); -} - -// Download completed -static void gnustep_download_done(struct gui_download_window *dw) { - NSLog(@"gnustep_download_done"); -} - -static struct gui_download_table gnustep_download_table = { - .create = gnustep_download_create, - .data = gnustep_download_data, - .error = gnustep_download_error, - .done = gnustep_download_done -}; - -/*******************/ -/****** Fetch ******/ -/*******************/ - -// Return the MIME type of the specified file. Returned string can be inval on next req. -static const char *gnustep_fetch_filetype(const char *unix_path) { - static char filetype[100]; - filetype[0] = '\0'; - return filetype; -} - -static struct gui_fetch_table gnustep_fetch_table = { - .filetype = gnustep_fetch_filetype -}; - -/********************/ -/****** Search ******/ -/********************/ - -// Change displayed search status found/notfound? -static void gnustep_search_status(bool found, void *p) { - NSLog(@"gnustep_search_status"); -} - -// Show hourglass if active else stop hourglass -static void gnustep_search_hourglass(bool active, void *p) { - NSLog(@"gnustep_search_hourglass"); -} - -// Add search string to recent searches list -static void gnustep_search_add_recent(const char *string, void *p) { - NSLog(@"gnustep_search_add_recent"); -} - -// Set the next match button to active/inactive -static void gnustep_search_forward_state(bool active, void *p) { - NSLog(@"gnustep_search_forward_state"); -} - -// set the previous match button to active/inactive -static void gnustep_search_back_state(bool active, void *p) { - NSLog(@"gnustep_search_back_state"); -} - -static struct gui_search_table gnustep_search_table = { - .status = gnustep_search_status, - .hourglass = gnustep_search_hourglass, - .add_recent = gnustep_search_add_recent, - .forward_state = gnustep_search_forward_state, - .back_state = gnustep_search_back_state -}; - -/********************/ -/****** Bitmap ******/ -/********************/ - -// Create a new bitmap of width height -static void *gnustep_bitmap_create(int width, int height, unsigned int state) { - NSLog(@"gnustep_bitmap_create"); - return NULL; -} - -// Destroy the specified bitmap -static void gnustep_bitmap_destroy(void *bitmap) { - NSLog(@"gnustep_bitmap_destroy"); -} - -// Set whether it's opaque or not -static void gnustep_bitmap_set_opaque(void *bitmap, bool opaque) { - NSLog(@"gnustep_bitmap_set_opaque"); -} - -// Get whether it's opaque or not -static bool gnustep_bitmap_get_opaque(void *bitmap) { - NSLog(@"gnustep_bitmap_get_opaque"); - return 0; -} - -// Test? whether it's opaque or not -static bool gnustep_bitmap_test_opaque(void *bitmap) { - NSLog(@"gnustep_bitmap_test_opaque"); - return 0; -} - -// Get the image buffer for the bitmap -static unsigned char *gnustep_bitmap_get_buffer(void *bitmap) { - NSLog(@"gnustep_bitmap_get_buffer"); - return NULL; -} - -// Get the number of bytes per row of the bitmap -static size_t gnustep_bitmap_get_rowstride(void *bitmap) { - NSLog(@"gnustep_bitmap_get_rowstride"); - return 0; -} - -// Get its width in pixels -static int gnustep_bitmap_get_width(void *bitmap) { - NSLog(@"gnustep_bitmap_get_width"); - return 0; -} - -// Get height in pixels -static int gnustep_bitmap_get_height(void *bitmap) { - NSLog(@"gnustep_bitmap_get_height"); - return 0; -} - -// Get how many byytes pet pixel -static size_t gnustep_bitmap_get_bpp(void *bitmap) { - NSLog(@"gnustep_bitmap_get_bpp"); - return 0; -} - -// Save the bitmap to the specified path -static bool gnustep_bitmap_save(void *bitmap, const char *path, unsigned flags) { - NSLog(@"gnustep_bitmap_save"); - return 0; -} - -// Mark bitmap as modified -static void gnustep_bitmap_modified(void *bitmap) { - NSLog(@"gnustep_bitmap_modified"); -} - -// Render content into the specified bitmap -static nserror gnustep_bitmap_render(struct bitmap *bitmap, struct hlcache_handle *content) { - NSLog(@"gnustep_bitmap_render"); - return NSERROR_OK; -} - -static struct gui_bitmap_table gnustep_bitmap_table = { - .create = gnustep_bitmap_create, - .destroy = gnustep_bitmap_destroy, - .set_opaque = gnustep_bitmap_set_opaque, - .get_opaque = gnustep_bitmap_get_opaque, - .test_opaque = gnustep_bitmap_test_opaque, - .get_buffer = gnustep_bitmap_get_buffer, - .get_rowstride = gnustep_bitmap_get_rowstride, - .get_width = gnustep_bitmap_get_width, - .get_height = gnustep_bitmap_get_height, - .get_bpp = gnustep_bitmap_get_bpp, - .save = gnustep_bitmap_save, - .modified = gnustep_bitmap_modified, - .render = gnustep_bitmap_render -}; - -/****** Layout ******/ - -// Put the measured width of the string into width -static nserror gnustep_layout_width(const struct plot_font_style *fstyle, const char *string, size_t length, int *width) { - *width = 0; - NSLog(@"gnustep_layout_width"); -} - -// Put the character offset and actual x coordinate of the character for which the x -// coordinate is nearest to -static nserror gnustep_layout_position(const struct plot_font_style *fstyle, const char *string, size_t length, int x, size_t *char_offset, int *actual_x) { - *char_offset = 0; - *actual_x = 0; - NSLog(@"gnustep_layout_position"); -} - -// Put the char offset and x coordinate of where to split a string so it fits in width x -static nserror gnustep_layout_split(const struct plot_font_style *fstyle, const char *string, size_t length, int x, size_t *char_offset, int *actual_x) { - *char_offset = 0; - *actual_x = 0; - NSLog(@"gnustep_layout_split"); -} - -static struct gui_layout_table gnustep_layout_table = { - .width = gnustep_layout_width, - .position = gnustep_layout_position, - .split = gnustep_layout_split -}; +#import "AppDelegate.h" +#import "BrowserWindowController.h" +#import "tables/tables.h" +#import "tables/misc.h" +#import "netsurf/browser_window.h" /** * Set option defaults for (taken from the cocoa frontend) * * @param defaults The option table to update. - * @return error status. + * @return error status */ static nserror set_defaults(struct nsoption_s *defaults) { @@ -341,6 +31,7 @@ static nserror set_defaults(struct nsoption_s *defaults) @implementation AppDelegate + -(void)applicationDidFinishLaunching: (NSNotification*)aNotification { NSLog(@"NSApp did finish launching.."); [NSBundle loadNibNamed: @"Menu" owner: NSApp]; @@ -350,9 +41,11 @@ static nserror set_defaults(struct nsoption_s *defaults) NSLog(@"Will create a new window"); struct nsurl *url; nserror error; + if (nsoption_charp(homepage_url) != NULL) { error = nsurl_create(nsoption_charp(homepage_url), &url); } else { + NSLog(@"opening default page %s", NETSURF_HOMEPAGE); error = nsurl_create(NETSURF_HOMEPAGE, &url); } diff --git a/frontends/gnustep/BrowserWindowController.h b/frontends/gnustep/BrowserWindowController.h index 587be53bf..86dcb9c54 100644 --- a/frontends/gnustep/BrowserWindowController.h +++ b/frontends/gnustep/BrowserWindowController.h @@ -2,14 +2,16 @@ #include -@interface BrowserWindowController : NSWindowController -{ - id backButton; - id forwardButton; - id scrollView; - id urlBar; +struct browser_window; +@interface BrowserWindowController : NSWindowController { + id backButton; + id forwardButton; + id scrollView; + id urlBar; + struct browser_window *browser; } +-(id)initWithBrowser: (struct browser_window*)aBrowser; -(id)back: (id)sender; -(id)forward: (id)sender; @end diff --git a/frontends/gnustep/BrowserWindowController.m b/frontends/gnustep/BrowserWindowController.m index f042f87b7..05d047904 100644 --- a/frontends/gnustep/BrowserWindowController.m +++ b/frontends/gnustep/BrowserWindowController.m @@ -2,10 +2,21 @@ #include #include "BrowserWindowController.h" +#include "PlotView.h" @implementation BrowserWindowController --(void)windowDidLoad { +-(id)initWithBrowser: (struct browser_window*)aBrowser { + if ((self = [super initWithWindowNibName: @"Browser"])) { + browser = aBrowser; + } + return self; +} + +-(void)awakeFromNib { + PlotView *plotView = [[PlotView alloc] initWithFrame: NSMakeRect(0, 0, 1000, 1000)]; + [plotView setBrowser: browser]; + [[scrollView contentView] addSubview: plotView]; NSLog(@"Browser window loaded"); } diff --git a/frontends/gnustep/Makefile b/frontends/gnustep/Makefile index 4794b5ecd..c4ca9b7ee 100644 --- a/frontends/gnustep/Makefile +++ b/frontends/gnustep/Makefile @@ -8,6 +8,7 @@ EXETARGET := nscocoa SDK_FLAGS := $(gnustep-config --objc-flags) CFLAGS := $(SDK_FLAGS) $(CFLAGS) CFLAGS += -I/usr/local/include/gnustep +CFLAGS += -Ifrontends/gnustep LDFLAGS := $(LDFLAGS) CXXFLAGS := $(SDK_FLAGS) $(CXXFLAGS) @@ -40,6 +41,15 @@ S_FRONTEND := \ AppDelegate.m \ BrowserWindowController.m \ PlotView.m \ + NetsurfCallback.m \ + tables/misc.m \ + tables/bitmap.m \ + tables/clipboard.m \ + tables/download.m \ + tables/fetch.m \ + tables/layout.m \ + tables/search.m \ + tables/window.m \ # This is the final source build list diff --git a/frontends/gnustep/NetsurfCallback.h b/frontends/gnustep/NetsurfCallback.h new file mode 100644 index 000000000..a2529df60 --- /dev/null +++ b/frontends/gnustep/NetsurfCallback.h @@ -0,0 +1,23 @@ +/* +This program 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, either version 3 of the License, or +(at your option) any later version. + +This program 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 NetsurfCallback: NSObject { + void (*callback)(void *p); + void *parameter; +} ++(id)newOrScheduledWithFunctionPointer: (void (*)(void *p))aCallback parameter: (void*)p; +-(void)scheduleAfterMillis: (int)ms; +-(void)cancel; +@end diff --git a/frontends/gnustep/NetsurfCallback.m b/frontends/gnustep/NetsurfCallback.m new file mode 100644 index 000000000..fd8069636 --- /dev/null +++ b/frontends/gnustep/NetsurfCallback.m @@ -0,0 +1,54 @@ +/* +This program 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, either version 3 of the License, or +(at your option) any later version. + +This program 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 "NetsurfCallback.h" + +static NSMapTable *callbackMap; + +@implementation NetsurfCallback + ++(void)initialize { + callbackMap = NSCreateMapTable(NSNonOwnedPointerMapKeyCallBacks, + NSObjectMapValueCallBacks, 0); +} + ++(id)newOrScheduledWithFunctionPointer: (void (*)(void *p))aCallback parameter: (void*)p { + NetsurfCallback *ret; + if ((ret = NSMapGet(callbackMap, aCallback)) != NULL) { + return ret; + } + ret = [NetsurfCallback new]; + ret->callback = aCallback; + ret->parameter = p; + return ret; +} + +-(void)perform { + NSMapRemove(callbackMap, callback); + callback(parameter); +} + +-(void)scheduleAfterMillis: (int)ms { + NSMapInsert(callbackMap, callback, self); + [NSObject cancelPreviousPerformRequestsWithTarget: self]; + [self performSelector: @selector(perform) withObject: nil afterDelay: ms / 1000.0]; +} + +-(void)cancel { + [NSObject cancelPreviousPerformRequestsWithTarget: self]; + NSMapRemove(callbackMap, callback); +} + +@end diff --git a/frontends/gnustep/PlotView.m b/frontends/gnustep/PlotView.m index 74b112323..f9ed6c28e 100644 --- a/frontends/gnustep/PlotView.m +++ b/frontends/gnustep/PlotView.m @@ -1,11 +1,84 @@ +/** +* Large chunks from the cocoa port +*/ + #import #import "PlotView.h" #import "utils/errors.h" #import "netsurf/plotters.h" #import "netsurf/browser_window.h" +#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 ) + +static NSRect cocoa_plot_clip_rect; + +static 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 > 0 ? pstyle->stroke_width : 1]; +} + +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) { + if (pstyle->stroke_width == 0 || pstyle->stroke_width % 2 != 0) + ; + //cocoa_center_pixel( true, true ); + + cocoa_plot_path_set_stroke_pattern(path,pstyle); + + [cocoa_convert_colour( pstyle->stroke_colour ) set]; + + [path stroke]; + } + + [NSGraphicsContext restoreGraphicsState]; +} + static nserror plot_clip(const struct redraw_context *ctx, const struct rect *clip) { NSLog(@"plot_clip"); + [NSBezierPath clipRect: NSMakeRect(clip->x0, clip->y0, clip->x1, clip->y1)]; return NSERROR_OK; } @@ -26,6 +99,10 @@ static nserror plot_line(const struct redraw_context *ctx, const plot_style_t *p static nserror plot_rectangle(const struct redraw_context *ctx, const plot_style_t *pstyle, const struct rect *rectangle) { NSLog(@"plot_rectangle"); + NSRect nsrect = NSMakeRect(rectangle->x0, rectangle->y0, rectangle->x1, + rectangle->y1); + //cocoa_plot_render_path(path, pstyle); + return NSERROR_OK; } @@ -69,6 +146,7 @@ static const struct plotter_table gnustep_plotters = { } -(void)drawRect: (NSRect)rect { + NSLog(@"Drawing plotview"); struct redraw_context ctx = { .interactive = true, .background_images = true, diff --git a/frontends/gnustep/tables/bitmap.m b/frontends/gnustep/tables/bitmap.m new file mode 100644 index 000000000..e1d0d665a --- /dev/null +++ b/frontends/gnustep/tables/bitmap.m @@ -0,0 +1,100 @@ +#import + +#import "netsurf/netsurf.h" +#import "netsurf/bitmap.h" + + +/********************/ +/****** Bitmap ******/ +/********************/ + +// Create a new bitmap of width height +static void *gnustep_bitmap_create(int width, int height, unsigned int state) { + NSLog(@"gnustep_bitmap_create"); + return NULL; +} + +// Destroy the specified bitmap +static void gnustep_bitmap_destroy(void *bitmap) { + NSLog(@"gnustep_bitmap_destroy"); +} + +// Set whether it's opaque or not +static void gnustep_bitmap_set_opaque(void *bitmap, bool opaque) { + NSLog(@"gnustep_bitmap_set_opaque"); +} + +// Get whether it's opaque or not +static bool gnustep_bitmap_get_opaque(void *bitmap) { + NSLog(@"gnustep_bitmap_get_opaque"); + return 0; +} + +// Test? whether it's opaque or not +static bool gnustep_bitmap_test_opaque(void *bitmap) { + NSLog(@"gnustep_bitmap_test_opaque"); + return 0; +} + +// Get the image buffer for the bitmap +static unsigned char *gnustep_bitmap_get_buffer(void *bitmap) { + NSLog(@"gnustep_bitmap_get_buffer"); + return NULL; +} + +// Get the number of bytes per row of the bitmap +static size_t gnustep_bitmap_get_rowstride(void *bitmap) { + NSLog(@"gnustep_bitmap_get_rowstride"); + return 0; +} + +// Get its width in pixels +static int gnustep_bitmap_get_width(void *bitmap) { + NSLog(@"gnustep_bitmap_get_width"); + return 0; +} + +// Get height in pixels +static int gnustep_bitmap_get_height(void *bitmap) { + NSLog(@"gnustep_bitmap_get_height"); + return 0; +} + +// Get how many byytes pet pixel +static size_t gnustep_bitmap_get_bpp(void *bitmap) { + NSLog(@"gnustep_bitmap_get_bpp"); + return 0; +} + +// Save the bitmap to the specified path +static bool gnustep_bitmap_save(void *bitmap, const char *path, unsigned flags) { + NSLog(@"gnustep_bitmap_save"); + return 0; +} + +// Mark bitmap as modified +static void gnustep_bitmap_modified(void *bitmap) { + NSLog(@"gnustep_bitmap_modified"); +} + +// Render content into the specified bitmap +static nserror gnustep_bitmap_render(struct bitmap *bitmap, struct hlcache_handle *content) { + NSLog(@"gnustep_bitmap_render"); + return NSERROR_OK; +} + +struct gui_bitmap_table gnustep_bitmap_table = { + .create = gnustep_bitmap_create, + .destroy = gnustep_bitmap_destroy, + .set_opaque = gnustep_bitmap_set_opaque, + .get_opaque = gnustep_bitmap_get_opaque, + .test_opaque = gnustep_bitmap_test_opaque, + .get_buffer = gnustep_bitmap_get_buffer, + .get_rowstride = gnustep_bitmap_get_rowstride, + .get_width = gnustep_bitmap_get_width, + .get_height = gnustep_bitmap_get_height, + .get_bpp = gnustep_bitmap_get_bpp, + .save = gnustep_bitmap_save, + .modified = gnustep_bitmap_modified, + .render = gnustep_bitmap_render +}; diff --git a/frontends/gnustep/tables/clipboard.m b/frontends/gnustep/tables/clipboard.m new file mode 100644 index 000000000..1925b28d1 --- /dev/null +++ b/frontends/gnustep/tables/clipboard.m @@ -0,0 +1,23 @@ +#import + +#import "netsurf/netsurf.h" +#import "netsurf/clipboard.h" + +/***********************/ +/****** Clipboard ******/ +/***********************/ + +// Put content of clipboard into buffer up to a maximum length +static void gnustep_clipboard_get(char **buffer, size_t *length) { + NSLog(@"gnustep_clipboard_get"); +} + +// Save the provided clipboard for later retreival above +static void gnustep_clipboard_set(const char *buffer, size_t length, nsclipboard_styles styles[], int n_styles) { + NSLog(@"gnustep_clipboard_set"); +} + +struct gui_clipboard_table gnustep_clipboard_table = { + .get = gnustep_clipboard_get, + .set = gnustep_clipboard_set +}; diff --git a/frontends/gnustep/tables/download.m b/frontends/gnustep/tables/download.m new file mode 100644 index 000000000..1bbf57e1c --- /dev/null +++ b/frontends/gnustep/tables/download.m @@ -0,0 +1,38 @@ +#import + +#import "netsurf/netsurf.h" +#import "netsurf/download.h" + + +/**********************/ +/****** Download ******/ +/**********************/ + +// Create and display a downloads window? +static struct gui_download_window *gnustep_download_create(struct download_context *ctx, struct gui_window *parent) { + NSLog(@"gnustep_download_create"); + return NULL; +} + +// ?? +static nserror gnustep_download_data(struct gui_download_window *dw, const char *data, unsigned int size) { + NSLog(@"gnustep_download_data"); + return NSERROR_OK; +} + +// Error occurred during download +static void gnustep_download_error(struct gui_download_window *dw, const char *error_msg) { + NSLog(@"gnustep_download_error"); +} + +// Download completed +static void gnustep_download_done(struct gui_download_window *dw) { + NSLog(@"gnustep_download_done"); +} + +struct gui_download_table gnustep_download_table = { + .create = gnustep_download_create, + .data = gnustep_download_data, + .error = gnustep_download_error, + .done = gnustep_download_done +}; \ No newline at end of file diff --git a/frontends/gnustep/tables/fetch.m b/frontends/gnustep/tables/fetch.m new file mode 100644 index 000000000..28be523ef --- /dev/null +++ b/frontends/gnustep/tables/fetch.m @@ -0,0 +1,19 @@ +#import + +#import "netsurf/netsurf.h" +#import "netsurf/fetch.h" + +/*******************/ +/****** Fetch ******/ +/*******************/ + +// Return the MIME type of the specified file. Returned string can be inval on next req. +static const char *gnustep_fetch_filetype(const char *unix_path) { + static char filetype[100]; + filetype[0] = '\0'; + return filetype; +} + +struct gui_fetch_table gnustep_fetch_table = { + .filetype = gnustep_fetch_filetype +}; \ No newline at end of file diff --git a/frontends/gnustep/tables/layout.m b/frontends/gnustep/tables/layout.m new file mode 100644 index 000000000..151bedb1f --- /dev/null +++ b/frontends/gnustep/tables/layout.m @@ -0,0 +1,36 @@ +#import + +#import "netsurf/netsurf.h" +#import "netsurf/layout.h" + + +/********************/ +/****** Layout ******/ +/********************/ + +// Put the measured width of the string into width +static nserror gnustep_layout_width(const struct plot_font_style *fstyle, const char *string, size_t length, int *width) { + *width = 0; + NSLog(@"gnustep_layout_width"); +} + +// Put the character offset and actual x coordinate of the character for which the x +// coordinate is nearest to +static nserror gnustep_layout_position(const struct plot_font_style *fstyle, const char *string, size_t length, int x, size_t *char_offset, int *actual_x) { + *char_offset = 0; + *actual_x = 0; + NSLog(@"gnustep_layout_position"); +} + +// Put the char offset and x coordinate of where to split a string so it fits in width x +static nserror gnustep_layout_split(const struct plot_font_style *fstyle, const char *string, size_t length, int x, size_t *char_offset, int *actual_x) { + *char_offset = 0; + *actual_x = 0; + NSLog(@"gnustep_layout_split"); +} + +struct gui_layout_table gnustep_layout_table = { + .width = gnustep_layout_width, + .position = gnustep_layout_position, + .split = gnustep_layout_split +}; \ No newline at end of file diff --git a/frontends/gnustep/tables/misc.h b/frontends/gnustep/tables/misc.h new file mode 100644 index 000000000..bb7619073 --- /dev/null +++ b/frontends/gnustep/tables/misc.h @@ -0,0 +1,3 @@ +#import "netsurf/misc.h" + +extern struct gui_misc_table gnustep_misc_table; \ No newline at end of file diff --git a/frontends/gnustep/tables/misc.m b/frontends/gnustep/tables/misc.m new file mode 100644 index 000000000..ef60ccce5 --- /dev/null +++ b/frontends/gnustep/tables/misc.m @@ -0,0 +1,28 @@ +#import +#import + +#import "netsurf/netsurf.h" +#import "netsurf/misc.h" +#import "NetsurfCallback.h" + +/*******************/ +/****** Misc *******/ +/*******************/ + +// Schedule a callback to be run after t ms, or removed if ngtv, func and param. +static nserror gnustep_misc_schedule(int t, void (*callback)(void *p), void *p) { + NSLog(@"gnustep_misc_schedule in %dms", t); + NetsurfCallback *nsCallback = [NetsurfCallback newOrScheduledWithFunctionPointer: + callback parameter: p]; + if (t < 1) { + [nsCallback cancel]; + return NSERROR_OK; + } else { + [nsCallback scheduleAfterMillis: t]; + return NSERROR_OK; + } +} + +struct gui_misc_table gnustep_misc_table = { + .schedule = gnustep_misc_schedule +}; \ No newline at end of file diff --git a/frontends/gnustep/tables/search.m b/frontends/gnustep/tables/search.m new file mode 100644 index 000000000..75d734bf1 --- /dev/null +++ b/frontends/gnustep/tables/search.m @@ -0,0 +1,42 @@ +#import + +#import "netsurf/netsurf.h" +#import "netsurf/search.h" + + +/********************/ +/****** Search ******/ +/********************/ + +// Change displayed search status found/notfound? +static void gnustep_search_status(bool found, void *p) { + NSLog(@"gnustep_search_status"); +} + +// Show hourglass if active else stop hourglass +static void gnustep_search_hourglass(bool active, void *p) { + NSLog(@"gnustep_search_hourglass"); +} + +// Add search string to recent searches list +static void gnustep_search_add_recent(const char *string, void *p) { + NSLog(@"gnustep_search_add_recent"); +} + +// Set the next match button to active/inactive +static void gnustep_search_forward_state(bool active, void *p) { + NSLog(@"gnustep_search_forward_state"); +} + +// set the previous match button to active/inactive +static void gnustep_search_back_state(bool active, void *p) { + NSLog(@"gnustep_search_back_state"); +} + +struct gui_search_table gnustep_search_table = { + .status = gnustep_search_status, + .hourglass = gnustep_search_hourglass, + .add_recent = gnustep_search_add_recent, + .forward_state = gnustep_search_forward_state, + .back_state = gnustep_search_back_state +}; \ No newline at end of file diff --git a/frontends/gnustep/tables/tables.h b/frontends/gnustep/tables/tables.h new file mode 100644 index 000000000..bc05e6dbf --- /dev/null +++ b/frontends/gnustep/tables/tables.h @@ -0,0 +1,16 @@ + +#import "netsurf/window.h" +#import "netsurf/clipboard.h" +#import "netsurf/download.h" +#import "netsurf/fetch.h" +#import "netsurf/search.h" +#import "netsurf/layout.h" +#import "netsurf/bitmap.h" + +extern struct gui_window_table gnustep_window_table; +extern struct gui_clipboard_table gnustep_clipboard_table; +extern struct gui_download_table gnustep_download_table; +extern struct gui_fetch_table gnustep_fetch_table; +extern struct gui_search_table gnustep_search_table; +extern struct gui_bitmap_table gnustep_bitmap_table; +extern struct gui_layout_table gnustep_layout_table; \ No newline at end of file diff --git a/frontends/gnustep/tables/window.m b/frontends/gnustep/tables/window.m new file mode 100644 index 000000000..c2d80cc4a --- /dev/null +++ b/frontends/gnustep/tables/window.m @@ -0,0 +1,66 @@ +#import + +#import "BrowserWindowController.h" +#import "netsurf/netsurf.h" +#import "netsurf/window.h" + +/********************/ +/****** Window ******/ +/********************/ + +// Create and open a browser window +static struct gui_window *gnustep_window_create(struct browser_window *bw, + struct gui_window *existing, + gui_window_create_flags flags) { + NSLog(@"gnustep_window_create"); + BrowserWindowController *controller = [[BrowserWindowController alloc] + initWithBrowser: bw]; + + [controller loadWindow]; + return (struct gui_window*)controller; +} + +// Destroy the specified window +static void gnustep_window_destroy(struct gui_window *gw) { + NSLog(@"gnustep_window_destroy"); +} + +// Trigger a redraw of the specified area, or the entire window if null +static nserror gnustep_window_invalidate(struct gui_window *gw, const struct rect *rect) { + NSLog(@"gnustep_window_invalidate"); + return NSERROR_OK; +} + +// Put the current scroll offset into sx and sy +static bool gnustep_window_get_scroll(struct gui_window *gw, int *sx, int *sy) { + NSLog(@"gnustep_window_get_scroll"); + return true; +} + +// Set the current scroll offset +static nserror gnustep_window_set_scroll(struct gui_window *gw, const struct rect *rect) { + NSLog(@"gnustep_window_set_scroll"); + return NSERROR_OK; +} + +// Put the dimensions of the specified window into width, height +static nserror gnustep_window_get_dimensions(struct gui_window *gw, int *width, int *height) { + NSLog(@"gnustep_window_get_dimensions"); + return NSERROR_OK; +} + +// Some kind of event happened +static nserror gnustep_window_event(struct gui_window *gw, enum gui_window_event event) { + NSLog(@"gnustep_window_event"); + return NSERROR_OK; +} + +struct gui_window_table gnustep_window_table = { + .create = gnustep_window_create, + .destroy = gnustep_window_destroy, + .invalidate = gnustep_window_invalidate, + .get_scroll = gnustep_window_get_scroll, + .set_scroll = gnustep_window_set_scroll, + .get_dimensions = gnustep_window_get_dimensions, + .event = gnustep_window_event +}; diff --git a/gnustepbuild.sh b/gnustepbuild.sh new file mode 100755 index 000000000..d16b6a7c6 --- /dev/null +++ b/gnustepbuild.sh @@ -0,0 +1,2 @@ +#!/bin/ksh +gmake TARGET=gnustep NETSURF_USE_DUKTAPE=NO NETSURF_USE_NSSVG=AUTO NETSURF_USE_ROSPRITE=AUTO