diff options
author | Michael Drake <tlsa@netsurf-browser.org> | 2015-07-19 10:34:04 +0100 |
---|---|---|
committer | Michael Drake <tlsa@netsurf-browser.org> | 2015-07-19 10:34:04 +0100 |
commit | 244ff9f08dd8c83baba4d44401eae0e8ebb58246 (patch) | |
tree | fed63c5bdb37d8f2dc6afa66748bb5a99050944d /include/libnslayout | |
parent | c721328b2ce5775a6dbee4b8f37a8c949394c8d8 (diff) | |
download | libnslayout-244ff9f08dd8c83baba4d44401eae0e8ebb58246.tar.gz libnslayout-244ff9f08dd8c83baba4d44401eae0e8ebb58246.tar.bz2 |
Add basic buildsystem.
Diffstat (limited to 'include/libnslayout')
-rw-r--r-- | include/libnslayout/nslayout.h | 211 |
1 files changed, 211 insertions, 0 deletions
diff --git a/include/libnslayout/nslayout.h b/include/libnslayout/nslayout.h new file mode 100644 index 0000000..a720b32 --- /dev/null +++ b/include/libnslayout/nslayout.h @@ -0,0 +1,211 @@ +/* + * This file is part of LibNSLayout + * Licensed under the ISC License, http://opensource.org/licenses/ISC + * Copyright 2015 Michael Drake <tlsa@netsurf-browser.org> + * Copyright 2015 John-Mark Bell <jmb@netsurf-browser.org> + */ + +#ifndef nslayout_nslayout_h_ +#define nslayout_nslayout_h_ + +#include <libcss/libcss.h> +#include <dom/dom.h> + +/** An opaque client-owned replaced element */ +typedef void nslayout_replaced; + +/** A rectangle */ +typedef struct nslayout_rect { + int x; + int y; + int w; + int h; +} nslayout_rect; + +/** Render list */ +typedef struct nslayout_render_list { +} nslayout_render_list; + +/** Render list */ +typedef struct nslayout_layout nslayout_layout; + +/** + * A LibNSLayout request + * + * Passed to the client via nslayout_callback + */ +typedef struct nslayout_request { + /** Request type */ + enum type { + NSLAYOUT_GET_RESOURCE, + NSLAYOUT_CREATE_REPLACED, + NSLAYOUT_RENDER, + NSLAYOUT_SET_EXTENTS, + NSLAYOUT_GET_INTRINSIC_SIZE + } type; + /** Request's type-specific parameters */ + union { + struct { + const char *url; /**< Absolute URL */ + } get_resource; + struct { + dom_element *element; /**< DOM element */ + } create_replaced; + struct { + nslayout_render_list *list; /**< Render list */ + } render; + struct { + unsigned int width; /**< Document width in px */ + unsigned int height; /**< Document height in px */ + } set_extents; + struct { + nslayout_replaced *replaced; /** A replacement object */ + } get_intrinsic_size; + } request; + /** Request's type-specific return values */ + union { + struct { + nslayout_replaced **replaced; /** Replacement object */ + } get_resource; + struct { + nslayout_replaced **replaced; /** Replacement object */ + } create_replaced; + struct { + unsigned int *width; /** Replacement object's width */ + unsigned int *height; /** Replacement object's height */ + } get_intrinsic_size; + } response; +} nslayout_request; + +/** Libnslayout return codes */ +typedef enum nslayout_error { + NSLAYOUT_OK, + NSLAYOUT_NO_MEM +} nslayout_error; + +/** + * Initialise LibNSLayout + * + * \return NSLAYOUT_OK on success, appropriate error otherwise. + */ +nslayout_error nslayout_init(void); + +/** + * Finalise LibNSLayout + * + * \return NSLAYOUT_OK on success, appropriate error otherwise. + */ +nslayout_error nslayout_fini(void); + +/** + * LibNSLayout client callback function + * + * \param req The request details. + * \param layout The layout we're making a request for. + * \param pw The client's private data for this layout. + * \return NSLAYOUT_OK on success, appropriate error otherwise. + */ +typedef nslayout_error (*nslayout_callback)( + nslayout_request *req, + nslayout_layout *layout, + void *pw); + +/** + * Create a Layout object for a given DOM + * + * \param doc The LibDOM document to build a layout for. + * \param css_ctx The LibCSS selection context for the document. + * \param media The LibCSS media to use when selecting for this layout. + * \param cb The client's private data for this layout. + * \param pw The client's private data for this layout. + * \param layout Returns a pointer to the created layout object. + * \return NSLAYOUT_OK on success, appropriate error otherwise. + */ +nslayout_error nslayout_layout_create( + dom_document *doc, + css_select_ctx *css_ctx, + css_media_type *media, + nslayout_callback *cb, + void *pw, + nslayout_layout **layout); + +/** + * Destroy a Layout object + * + * \param layout Returns a pointer to the created layout object. + * \return NSLAYOUT_OK on success, appropriate error otherwise. + */ +nslayout_error nslayout_layout_destroy( + nslayout_layout *layout); + +/** + * Update the viewport for a layout + * + * Note: Before this is called, the layout engine will create internal + * data structures for the document, but will not start to position + * things and will not emit render lists. + * + * \param layout Layout to set viewport for. + * \param viewport Viewport dimensions and offset. + * \param scale Rendering scale. + * \param dpi DPI of render target with viewport. + * \return NSLAYOUT_OK on success, appropriate error otherwise. + */ +nslayout_error nslayout_update_viewport( + nslayout_layout *layout, + nslayout_rect *viewport, + css_fixed scale, + unsigned int dpi); + +/** + * Find the top-most element at a given point, in terms of z-order. + * + * \param layout Layout to locate an element in. + * \param element Updated to area with position relative to viewport. + * \return NSLAYOUT_OK on success, appropriate error otherwise. + */ +nslayout_error nslayout_element_get_location( + nslayout_layout *layout, + nslayout_rect *area); + +/** + * Find the top-most element at a given point, in terms of z-order. + * + * \param layout Layout to find an element in. + * \param x Mouse x-coordinate (viewport relative). + * \param y Mouse y-coordinate (viewport relative). + * \param element Updated to point at the element we found. + * \return NSLAYOUT_OK on success, appropriate error otherwise. + */ +nslayout_error nslayout_element_at_point( + nslayout_layout *layout, + unsigned int x, + unsigned int y, + dom_event_target **element); + +/** + * Mark an element (or part of it) as needing redraw. + * + * \param layout Layout to indicate redraw is required for. + * \param element Element to mark as needing redraw. + * \param rel_area Area of element to redraw relative to object's top-left. + * May be NULL, to redraw whole element. + * \return NSLAYOUT_OK on success, appropriate error otherwise. + */ +nslayout_error nslayout_layout_dirty_element( + nslayout_layout *layout, + dom_element *element, + nslayout_rect *rel_area); + +/** + * Mark an area as needing redraw. + * + * \param layout Layout to indicate redraw is required for. + * \param area Area to redraw relative to viewport's top-left. + * \return NSLAYOUT_OK on success, appropriate error otherwise. + */ +nslayout_error nslayout_layout_dirty_area( + nslayout_layout *layout, + nslayout_rect *area); + +#endif |