diff options
Diffstat (limited to 'desktop/textarea.h')
-rw-r--r-- | desktop/textarea.h | 142 |
1 files changed, 126 insertions, 16 deletions
diff --git a/desktop/textarea.h b/desktop/textarea.h index 1cbe5fa43..e4fa2c7aa 100644 --- a/desktop/textarea.h +++ b/desktop/textarea.h @@ -30,30 +30,140 @@ #include "desktop/plot_style.h" /* Text area flags */ -#define TEXTAREA_MULTILINE 0x01 /**< Text area is multiline */ -#define TEXTAREA_READONLY 0x02 /**< Text area is read only */ +typedef enum textarea_flags { + TEXTAREA_DEFAULT = (1 << 0), + TEXTAREA_MULTILINE = (1 << 1), + TEXTAREA_READONLY = (1 << 2) +} textarea_flags; -struct text_area; + +struct textarea; typedef void(*textarea_redraw_request_callback)(void *data, int x, int y, int width, int height); -struct text_area *textarea_create(int width, int height, - unsigned int flags, const plot_font_style_t *style, +/** + * Create a text area + * + * \param width width of the text area + * \param height width of the text area + * \param flags text area flags + * \param style font style + * \param redraw_start_callback will be called when textarea wants to redraw + * \param redraw_end_callback will be called when textarea finisjes redrawing + * \param data user specified data which will be passed to redraw callbacks + * \return Opaque handle for textarea or 0 on error + */ +struct textarea *textarea_create(int width, int height, + textarea_flags flags, const plot_font_style_t *style, textarea_redraw_request_callback redraw_request, void *data); -void textarea_destroy(struct text_area *ta); -bool textarea_set_text(struct text_area *ta, const char *text); -int textarea_get_text(struct text_area *ta, char *buf, unsigned int len); -bool textarea_set_caret(struct text_area *ta, int caret); -int textarea_get_caret(struct text_area *ta); -void textarea_redraw(struct text_area *ta, int x, int y, + +/** + * Destroy a text area + * + * \param ta Text area to destroy + */ +void textarea_destroy(struct textarea *ta); + +/** + * Set the text in a text area, discarding any current text + * + * \param ta Text area + * \param text UTF-8 text to set text area's contents to + * \return true on success, false on memory exhaustion + */ +bool textarea_set_text(struct textarea *ta, const char *text); + +/** + * Extract the text from a text area + * + * \param ta Text area + * \param buf Pointer to buffer to receive data, or NULL + * to read length required + * \param len Length (bytes) of buffer pointed to by buf, or 0 to read length + * \return Length (bytes) written/required or -1 on error + */ +int textarea_get_text(struct textarea *ta, char *buf, unsigned int len); + +/** + * Set the caret's position + * + * \param ta Text area + * \param caret 0-based character index to place caret at, -1 removes + * the caret + * \return true on success false otherwise + */ +bool textarea_set_caret(struct textarea *ta, int caret); + +/** + * Get the caret's position + * + * \param ta Text area + * \return 0-based character index of caret location, or -1 on error + */ +int textarea_get_caret(struct textarea *ta); + +/** + * Handle redraw requests for text areas + * + * \param redraw Redraw request block + * \param x0 left X coordinate of redraw area + * \param y0 top Y coordinate of redraw area + * \param x1 right X coordinate of redraw area + * \param y1 bottom Y coordinate of redraw area + * \param ctx current redraw context + */ +void textarea_redraw(struct textarea *ta, int x, int y, const struct rect *clip, const struct redraw_context *ctx); -bool textarea_keypress(struct text_area *ta, uint32_t key); -bool textarea_mouse_action(struct text_area *ta, browser_mouse_state mouse, + +/** + * Key press handling for text areas. + * + * \param ta The text area which got the keypress + * \param key The ucs4 character codepoint + * \return true if the keypress is dealt with, false otherwise. + */ +bool textarea_keypress(struct textarea *ta, uint32_t key); + +/** + * Handles all kinds of mouse action + * + * \param ta Text area + * \param mouse the mouse state at action moment + * \param x X coordinate + * \param y Y coordinate + * \return true if action was handled false otherwise + */ +bool textarea_mouse_action(struct textarea *ta, browser_mouse_state mouse, int x, int y); -bool textarea_drag_end(struct text_area *ta, browser_mouse_state mouse, + +/** + * Handles the end of a drag operation + * + * \param ta Text area + * \param mouse the mouse state at drag end moment + * \param x X coordinate + * \param y Y coordinate + * \return true if drag end was handled false otherwise + */ +bool textarea_drag_end(struct textarea *ta, browser_mouse_state mouse, int x, int y); -void textarea_get_dimensions(struct text_area *ta, int *width, int *height); -void textarea_set_dimensions(struct text_area *ta, int width, int height); + +/** + * Gets the dimensions of a textarea + * + * \param width if not NULL, gets updated to the width of the textarea + * \param height if not NULL, gets updated to the height of the textarea + */ +void textarea_get_dimensions(struct textarea *ta, int *width, int *height); + +/** + * Set the dimensions of a textarea, causing a reflow and + * emitting a redraw request. + * + * \param width the new width of the textarea + * \param height the new height of the textarea + */ +void textarea_set_dimensions(struct textarea *ta, int width, int height); #endif |