diff options
Diffstat (limited to 'desktop/selection.h')
-rw-r--r-- | desktop/selection.h | 204 |
1 files changed, 145 insertions, 59 deletions
diff --git a/desktop/selection.h b/desktop/selection.h index 2f3f6dcfe..8cd523fd8 100644 --- a/desktop/selection.h +++ b/desktop/selection.h @@ -20,86 +20,172 @@ * Text selection within browser windows (interface). */ -#ifndef _NETSURF_DESKTOP_SELECTION_H_ -#define _NETSURF_DESKTOP_SELECTION_H_ +#ifndef NETSURF_DESKTOP_SELECTION_H_ +#define NETSURF_DESKTOP_SELECTION_H_ #include <stdbool.h> #include "netsurf/mouse.h" -#include "content/handlers/css/utils.h" struct box; +struct browser_window; +struct plot_font_style; +struct selection_string; +struct selection; +struct content; + +/** + * determine if a selecion is active + */ +bool selection_active(struct selection *s); -typedef enum { - DRAG_NONE, - DRAG_START, - DRAG_END -} seln_drag_state; - - -/* this structure should be treated as opaque outside selection.c - (it's defined here to accelerate selection_defined(s) for reduced - impact on redraw code) */ - -struct selection -{ - struct content *c; - struct box *root; - nscss_len_ctx len_ctx; - - unsigned max_idx; /* total bytes in text representation */ - - unsigned start_idx; /* offset in bytes within text representation */ - unsigned end_idx; +bool selection_dragging(struct selection *s); - bool defined; - bool is_html; +bool selection_dragging_start(struct selection *s); - seln_drag_state drag_state; -}; +/** + * Handles completion of a drag operation + */ +void selection_drag_end(struct selection *s); +/** + * Creates a new selection object associated with a browser window. + * + * Used from text and html content handlers + * + * \return new selection context + */ +struct selection *selection_create(struct content *c); -struct selection *selection_create(struct content *c, bool is_html); -void selection_prepare(struct selection *s, struct content *c, bool is_html); +/** + * Destroys a selection object clearing it if nesessary + * + * Used from content textsearch + * + * \param s selection object + */ void selection_destroy(struct selection *s); -void selection_init( - struct selection *s, - struct box *root, - const nscss_len_ctx *len_ctx); -void selection_reinit(struct selection *s, struct box *root); - -/* struct box *selection_root(struct selection *s); */ -#define selection_root(s) ((s)->root) - -/* bool selection_defined(struct selection *s); */ -#define selection_defined(s) ((s)->defined) +/** + * Initialise the selection object to use the given box subtree as its root, + * ie. selections are confined to that subtree. + * + * Used from text and html content handlers + * + * \param s selection object + */ +void selection_init(struct selection *s); -/* bool selection_dragging(struct selection *s); */ -#define selection_dragging(s) ((s)->drag_state != DRAG_NONE) +/** + * Initialise the selection object to use the given box subtree as its root, + * ie. selections are confined to that subtree, whilst maintaining the current + * selection whenever possible because, for example, it's just the page being + * resized causing the layout to change. + * + * Used from html content handler + * + * \param s selection object + */ +void selection_reinit(struct selection *s); -/* bool selection_dragging_start(struct selection *s); */ -#define selection_dragging_start(s) ((s)->drag_state == DRAG_START) +/** + * Clears the current selection, optionally causing the screen to be updated. + * + * Used from text and html content handlers + * + * \param s selection object + * \param redraw true iff the previously selected region of the browser + * window should be redrawn + * \return true if selection was cleared false if not + */ +bool selection_clear(struct selection *s, bool redraw); -void selection_clear(struct selection *s, bool redraw); +/** + * Selects all the text within the box subtree controlled by + * this selection object, updating the screen accordingly. + * + * Used from text and html content handlers + * + * \param s selection object + */ void selection_select_all(struct selection *s); -void selection_set_start(struct selection *s, unsigned idx); -void selection_set_end(struct selection *s, unsigned idx); +/** + * Set the position of the current selection, updating the screen. + * + * Used from content textsearch + * + * \param s selection object + * \param start byte offset within textual representation + * \param end byte offset within textual representation + */ +void selection_set_position(struct selection *s, unsigned start, unsigned end); -bool selection_click(struct selection *s, browser_mouse_state mouse, - unsigned idx); -void selection_track(struct selection *s, browser_mouse_state mouse, - unsigned idx); +/** + * Handles mouse clicks (including drag starts) in or near a selection + * + * Used from text and html content handlers + * + * \param s selection object + * \param mouse state of mouse buttons and modifier keys + * \param idx byte offset within textual representation + * \return true iff the click has been handled by the selection code + */ +bool selection_click(struct selection *s, struct browser_window *top, browser_mouse_state mouse, unsigned idx); +/** + * Handles movements related to the selection, eg. dragging of start and + * end points. + * + * Used from text and html content handlers + * + * \param s selection object + * \param mouse state of mouse buttons and modifier keys + * \param idx byte offset within text representation + */ +void selection_track(struct selection *s, browser_mouse_state mouse, unsigned idx); + +/** + * Copy the selected contents to the clipboard + * + * Used from text and html content handlers + * + * \param s selection + * \return true iff successful + */ bool selection_copy_to_clipboard(struct selection *s); -char * selection_get_copy(struct selection *s); -/** Handles completion of a drag operation */ -/* void selection_drag_end(struct selection *s); */ -#define selection_drag_end(s) ((s)->drag_state = DRAG_NONE) +/** + * Get copy of selection as string + * + * Used from text and html content handlers + * + * \param s selection + * \return string of selected text, or NULL. Ownership passed to caller. + */ +char *selection_get_copy(struct selection *s); + -bool selection_highlighted(const struct selection *s, - unsigned start, unsigned end, - unsigned *start_idx, unsigned *end_idx); +/** + * Tests whether a text range lies partially within the selection, if there is + * a selection defined, returning the start and end indexes of the bytes + * that should be selected. + * + * Used from text and html content handlers, content textsearch + * + * \param s the selection object + * \param start byte offset of start of text + * \param end byte offset of end of text + * \param start_idx receives the start index (in bytes) of the highlighted portion + * \param end_idx receives the end index (in bytes) + * \return true iff part of the given box lies within the selection + */ +bool selection_highlighted(const struct selection *s, unsigned start, unsigned end, unsigned *start_idx, unsigned *end_idx); + +bool +selection_string_append(const char *text, + size_t length, + bool space, + struct plot_font_style *style, + struct selection_string *sel_string); #endif |