summaryrefslogtreecommitdiff
path: root/include/libnslayout
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2015-07-19 10:34:04 +0100
committerMichael Drake <tlsa@netsurf-browser.org>2015-07-19 10:34:04 +0100
commit244ff9f08dd8c83baba4d44401eae0e8ebb58246 (patch)
treefed63c5bdb37d8f2dc6afa66748bb5a99050944d /include/libnslayout
parentc721328b2ce5775a6dbee4b8f37a8c949394c8d8 (diff)
downloadlibnslayout-244ff9f08dd8c83baba4d44401eae0e8ebb58246.tar.gz
libnslayout-244ff9f08dd8c83baba4d44401eae0e8ebb58246.tar.bz2
Add basic buildsystem.
Diffstat (limited to 'include/libnslayout')
-rw-r--r--include/libnslayout/nslayout.h211
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