diff options
author | Vincent Sanders <vince@kyllikki.org> | 2014-10-16 09:41:50 +0100 |
---|---|---|
committer | Vincent Sanders <vince@kyllikki.org> | 2014-10-16 22:33:43 +0100 |
commit | ab7f3e31800ade0cec9c071e61cc001ee9470f69 (patch) | |
tree | 683abf5132e18fb62454d3c0a4afa548827e5722 /desktop/gui.h | |
parent | 9d3c2b18c4ad5229cfb931f81be75a5978f300cd (diff) | |
download | netsurf-ab7f3e31800ade0cec9c071e61cc001ee9470f69.tar.gz netsurf-ab7f3e31800ade0cec9c071e61cc001ee9470f69.tar.bz2 |
Split up graphical user interface operations table headers
This is the initial part of a series which splits up the API interface
definitions for the frontends removing a great deal of unnecessary file
inclusion and further isolates the fronted API usage from the core
Diffstat (limited to 'desktop/gui.h')
-rw-r--r-- | desktop/gui.h | 592 |
1 files changed, 0 insertions, 592 deletions
diff --git a/desktop/gui.h b/desktop/gui.h deleted file mode 100644 index 83e857474..000000000 --- a/desktop/gui.h +++ /dev/null @@ -1,592 +0,0 @@ -/* - * Copyright 2014 Vincent Sanders <vince@netsurf-browser.org> - * - * This file is part of NetSurf, http://www.netsurf-browser.org/ - * - * NetSurf is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * NetSurf is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -/** \file - * Interface to platform-specific gui operation tables. - */ - -#ifndef _NETSURF_DESKTOP_GUI_H_ -#define _NETSURF_DESKTOP_GUI_H_ - -#include <stddef.h> - -#include "utils/types.h" -#include "utils/errors.h" -#include "desktop/plot_style.h" -#include "desktop/mouse.h" - -typedef enum gui_save_type { - GUI_SAVE_SOURCE, - GUI_SAVE_DRAW, - GUI_SAVE_PDF, - GUI_SAVE_TEXT, - GUI_SAVE_COMPLETE, - GUI_SAVE_OBJECT_ORIG, - GUI_SAVE_OBJECT_NATIVE, - GUI_SAVE_LINK_URI, - GUI_SAVE_LINK_URL, - GUI_SAVE_LINK_TEXT, - GUI_SAVE_HOTLIST_EXPORT_HTML, - GUI_SAVE_HISTORY_EXPORT_HTML, - GUI_SAVE_TEXT_SELECTION, - GUI_SAVE_CLIPBOARD_CONTENTS -} gui_save_type; - -typedef enum { - GDRAGGING_NONE, - GDRAGGING_SCROLLBAR, - GDRAGGING_SELECTION, - GDRAGGING_OTHER -} gui_drag_type; - -typedef enum { - GW_CREATE_NONE = 0, /* New window */ - GW_CREATE_CLONE = (1 << 0), /* Clone existing window */ - GW_CREATE_TAB = (1 << 1) /* In same window as existing */ -} gui_window_create_flags; - -struct gui_window; -struct gui_download_window; -struct browser_window; -struct form_control; -struct ssl_cert_info; -struct hlcache_handle; -struct download_context; -struct nsurl; -struct gui_file_table; -struct gui_llcache_table; -struct gui_search_web_table; - -typedef struct nsnsclipboard_styles { - size_t start; /**< Start of run */ - - plot_font_style_t style; /**< Style to give text run */ -} nsclipboard_styles; - -/** - * Graphical user interface window function table. - * - * function table implementing window operations - */ -struct gui_window_table { - - /* Mandantory entries */ - - /** - * Create and open a gui window for a browsing context. - * - * \param bw bw to create gui_window for - * \param existing an existing gui_window, may be NULL - * \param flags flags for gui window creation - * \return gui window, or NULL on error - * - * If GW_CREATE_CLONE flag is set existing is non-NULL. - * - * Front end's gui_window must include a reference to the - * browser window passed in the bw param. - */ - struct gui_window *(*create)(struct browser_window *bw, - struct gui_window *existing, - gui_window_create_flags flags); - - /** - * Destroy previously created gui window - * - * \param gw The gui window to destroy. - */ - void (*destroy)(struct gui_window *gw); - - /** - * Force a redraw of the entire contents of a window. - * - * @todo this API should be merged with update. - * - * \param g gui_window to redraw - */ - void (*redraw)(struct gui_window *g); - - /** - * Redraw an area of a window. - * - * \param g gui_window - * \param rect area to redraw - */ - void (*update)(struct gui_window *g, const struct rect *rect); - - /** - * Get the scroll position of a browser window. - * - * \param g gui_window - * \param sx receives x ordinate of point at top-left of window - * \param sy receives y ordinate of point at top-left of window - * \return true iff successful - */ - bool (*get_scroll)(struct gui_window *g, int *sx, int *sy); - - /** - * Set the scroll position of a browser window. - * - * \param g gui_window to scroll - * \param sx point to place at top-left of window - * \param sy point to place at top-left of window - */ - void (*set_scroll)(struct gui_window *g, int sx, int sy); - - /** - * Find the current dimensions of a browser window's content area. - * - * @todo The implementations of this are buggy and its only - * used from frames code. - * - * \param g gui_window to measure - * \param width receives width of window - * \param height receives height of window - * \param scaled whether to return scaled values - */ - void (*get_dimensions)(struct gui_window *g, int *width, int *height, bool scaled); - - /** - * Update the extent of the inside of a browser window to that of the - * current content. - * - * @todo this is used to update scroll bars does it need - * renaming? some frontends (windows) do not even implement it. - * - * \param g gui_window to update the extent of - */ - void (*update_extent)(struct gui_window *g); - - /** - * Reformat a window. - * - * This is used to perform reformats when the page contents - * require reformating. The reformat is requested using - * browser_window_schedule_reformat and occours via a scheduled - * callback hence from top level context. - * - * \param g gui_window to reformat. - */ - void (*reformat)(struct gui_window *g); - - - /* Optional entries */ - - /** - * Set the title of a window. - * - * \param g window to update - * \param title new window title - */ - void (*set_title)(struct gui_window *g, const char *title); - - /** - * Set the navigation url. - * - * \param gw window to update. - * \param url The url to use as icon. - */ - void (*set_url)(struct gui_window *gw, const char *url); - - /** - * Set a favicon for a gui window. - * - * \param gw window to update. - * \param icon handle to object to use as icon. - */ - void (*set_icon)(struct gui_window *gw, struct hlcache_handle *icon); - - /** - * Set the status bar of a browser window. - * - * \param g gui_window to update - * \param text new status text - */ - void (*set_status)(struct gui_window *g, const char *text); - - /** - * Change mouse pointer shape - */ - void (*set_pointer)(struct gui_window *g, gui_pointer_shape shape); - - /** - * Place the caret in a browser window. - * - * \param g window with caret - * \param x coordinates of caret - * \param y coordinates of caret - * \param height height of caret - * \param clip clip rectangle, or NULL if none - */ - void (*place_caret)(struct gui_window *g, int x, int y, int height, const struct rect *clip); - - /** - * Remove the caret, if present. - * - * \param g window with caret - */ - void (*remove_caret)(struct gui_window *g); - - /** start the navigation throbber. */ - void (*start_throbber)(struct gui_window *g); - - /** stop the navigation throbber. */ - void (*stop_throbber)(struct gui_window *g); - - /** start a drag operation within a window */ - bool (*drag_start)(struct gui_window *g, gui_drag_type type, const struct rect *rect); - - /** save link operation */ - void (*save_link)(struct gui_window *g, const char *url, const char *title); - - /** - * Scrolls the specified area of a browser window into view. - * - * @todo investigate if this can be merged with set_scroll - * which is what the default implementation used by most - * toolkits uses. - * - * \param g gui_window to scroll - * \param x0 left point to ensure visible - * \param y0 bottom point to ensure visible - * \param x1 right point to ensure visible - * \param y1 top point to ensure visible - */ - void (*scroll_visible)(struct gui_window *g, int x0, int y0, int x1, int y1); - - /** - * Starts drag scrolling of a browser window - * - * \param g the window to scroll - */ - bool (*scroll_start)(struct gui_window *g); - - /** - * Called when the gui_window has new content. - * - * \param g the gui_window that has new content - */ - void (*new_content)(struct gui_window *g); - - /** - * Called when file chooser gadget is activated - */ - void (*file_gadget_open)(struct gui_window *g, struct hlcache_handle *hl, struct form_control *gadget); - - /** object dragged to window*/ - void (*drag_save_object)(struct gui_window *g, struct hlcache_handle *c, gui_save_type type); - - /** drag selection save */ - void (*drag_save_selection)(struct gui_window *g, const char *selection); - - /** selection started */ - void (*start_selection)(struct gui_window *g); -}; - - -/** - * function table for download windows. - */ -struct gui_download_table { - struct gui_download_window *(*create)(struct download_context *ctx, struct gui_window *parent); - - nserror (*data)(struct gui_download_window *dw, const char *data, unsigned int size); - - void (*error)(struct gui_download_window *dw, const char *error_msg); - - void (*done)(struct gui_download_window *dw); -}; - - -/** - * function table for clipboard operations. - */ -struct gui_clipboard_table { - /** - * Core asks front end for clipboard contents. - * - * \param buffer UTF-8 text, allocated by front end, ownership yeilded to core - * \param length Byte length of UTF-8 text in buffer - */ - void (*get)(char **buffer, size_t *length); - - /** - * Core tells front end to put given text in clipboard - * - * \param buffer UTF-8 text, owned by core - * \param length Byte length of UTF-8 text in buffer - * \param styles Array of styles given to text runs, owned by core, or NULL - * \param n_styles Number of text run styles in array - */ - void (*set)(const char *buffer, size_t length, nsclipboard_styles styles[], int n_styles); -}; - - -/** - * function table for fetcher operations - */ -struct gui_fetch_table { - /* Mandantory entries */ - - /** - * Determine the MIME type of a local file. - * - * @note used in file fetcher - * - * \param unix_path Unix style path to file on disk - * \return Pointer to MIME type string (should not be freed) - - * invalidated on next call to fetch_filetype. - */ - const char *(*filetype)(const char *unix_path); - - /* Optional entries */ - - /** - * Callback to translate resource to full url. - * - * @note used in resource fetcher - * - * Transforms a resource: path into a full URL. The returned URL - * is used as the target for a redirect. The caller takes ownership of - * the returned nsurl including unrefing it when finished with it. - * - * \param path The path of the resource to locate. - * \return A string containing the full URL of the target object or - * NULL if no suitable resource can be found. - */ - struct nsurl* (*get_resource_url)(const char *path); - - /** - * Find a MIME type for a local file - * - * @note only used in curl fetcher on RISC OS otherwise its a - * strdup of filetype. - * - * \param ro_path RISC OS style path to file on disk - * \return MIME type string (on heap, caller should free), or NULL - */ - char *(*mimetype)(const char *ro_path); - -}; - - -/** - * User interface utf8 characterset conversion routines. - */ -struct gui_utf8_table { - /** - * Convert a UTF-8 encoded string into the system local encoding - * - * \param string The string to convert - * \param len The length (in bytes) of the string, or 0 - * \param result Pointer to location in which to store result - * \return An nserror code - */ - nserror (*utf8_to_local)(const char *string, size_t len, char **result); - - /** - * Convert a string encoded in the system local encoding to UTF-8 - * - * \param string The string to convert - * \param len The length (in bytes) of the string, or 0 - * \param result Pointer to location in which to store result - * \return An nserror code - */ - nserror (*local_to_utf8)(const char *string, size_t len, char **result); -}; - -/** - * function table for page text search. - */ -struct gui_search_table { - /** - * Change the displayed search status. - * - * \param found search pattern matched in text - * \param p gui private data pointer provided with search callbacks - */ - void (*status)(bool found, void *p); - - /** - * display hourglass while searching. - * - * \param active start/stop indicator - * \param p gui private data pointer provided with search callbacks - */ - void (*hourglass)(bool active, void *p); - - /** - * add search string to recent searches list - * front has full liberty how to implement the bare notification; - * core gives no guarantee of the integrity of the string - * - * \param string search pattern - * \param p gui private data pointer provided with search callbacks - */ - void (*add_recent)(const char *string, void *p); - - /** - * activate search forwards button in gui - * - * \param active activate/inactivate - * \param p gui private data pointer provided with search callbacks - */ - void (*forward_state)(bool active, void *p); - - /** - * activate search back button in gui - * - * \param active activate/inactivate - * \param p gui private data pointer provided with search callbacks - */ - void (*back_state)(bool active, void *p); -}; - -/** - * Graphical user interface browser misc function table. - * - * function table implementing GUI interface to miscelaneous browser - * functionality - */ -struct gui_browser_table { - /* Mandantory entries */ - - /** - * Schedule a callback. - * - * \param t interval before the callback should be made in ms or - * negative value to remove any existing callback. - * \param callback callback function - * \param p user parameter passed to callback function - * \return NSERROR_OK on sucess or appropriate error on faliure - * - * The callback function will be called as soon as possible - * after the timeout has elapsed. - * - * Additional calls with the same callback and user parameter will - * reset the callback time to the newly specified value. - * - */ - nserror (*schedule)(int t, void (*callback)(void *p), void *p); - - /* Optional entries */ - - /** - * called to allow the gui to cleanup. - */ - void (*quit)(void); - - /** - * core has no fetcher for url - */ - nserror (*launch_url)(struct nsurl *url); - - /** - * create a form select menu - * - * \param g gui window containing form control - * \param control form control of type GADGET_SELECT - */ - void (*create_form_select_menu)(struct gui_window *g, - struct form_control *control); - - /** - * verify certificate - */ - void (*cert_verify)(struct nsurl *url, const struct ssl_cert_info *certs, unsigned long num, nserror (*cb)(bool proceed, void *pw), void *cbpw); - - /** - * Prompt user for login - */ - void (*login)(struct nsurl *url, const char *realm, - nserror (*cb)(bool proceed, void *pw), void *cbpw); - -}; - -/** - * NetSurf operation function table - * - * Function table implementing interface operations for the browser core. - */ -struct netsurf_table { - - /** - * Browser table. - * - * Provides miscellaneous browser functionality. The table - * is mandantory and must be provided. - */ - struct gui_browser_table *browser; - - /** Window table */ - struct gui_window_table *window; - - /** Download table */ - struct gui_download_table *download; - - /** Clipboard table */ - struct gui_clipboard_table *clipboard; - - /** Fetcher table */ - struct gui_fetch_table *fetch; - - /** - * File table - * - * Provides file and filename operations to the core. The - * table is optional and may be NULL in which case the default - * posix compliant operations will be used. - */ - struct gui_file_table *file; - - /** - * UTF8 table. - * - * Provides for conversion between the gui local character - * encoding and utf8. The table optional and may be NULL which - * implies the local encoding is utf8. - */ - struct gui_utf8_table *utf8; - - /** - * Page search table. - * - * Provides routines for the interactive text search on a page. - */ - struct gui_search_table *search; - - /** - * Web search table. - * - * Used by the web search provider system. The table is - * optional and may be NULL which uses the default empty - * implementation. - */ - struct gui_search_web_table *search_web; - - /** - * Low level cache table. - * - * Used by the low level cache to push objects to persistant - * storage. The table is optional and may be NULL which - * uses the default implementation. - */ - struct gui_llcache_table *llcache; -}; - - -#endif |