From 5d8dd3cfc6601f8a4ae3d000177ec583c946a38d Mon Sep 17 00:00:00 2001 From: Adrian Lees Date: Fri, 15 Apr 2005 05:51:32 +0000 Subject: [project @ 2005-04-15 05:51:11 by adrianl] Text selection svn path=/import/netsurf/; revision=1634 --- desktop/selection.h | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 desktop/selection.h (limited to 'desktop/selection.h') diff --git a/desktop/selection.h b/desktop/selection.h new file mode 100644 index 000000000..178df2d0b --- /dev/null +++ b/desktop/selection.h @@ -0,0 +1,76 @@ +/* + * This file is part of NetSurf, http://netsurf.sourceforge.net/ + * Licensed under the GNU General Public License, + * http://www.opensource.org/licenses/gpl-license + * Copyright 2005 Adrian Lees + */ + +/** \file + * Text selection within browser windows, platform-independent part (interface) + */ + +#ifndef _NETSURF_DESKTOP_SELECTION_H_ +#define _NETSURF_DESKTOP_SELECTION_H_ + +#include "netsurf/desktop/browser.h" +#include "netsurf/render/box.h" + + +typedef enum { + DRAG_NONE, + DRAG_START, + DRAG_END +} seln_drag_state; + + +/* this structure should be treated as opaque outside selection.c */ +struct selection +{ + struct browser_window *bw; + struct box *root; + + unsigned max_idx; /* total bytes in text representation */ + + unsigned start_idx; /* offset in bytes within text representation */ + unsigned end_idx; + + bool defined; + bool last_was_end; + + seln_drag_state drag_state; +}; + + +typedef bool (*seln_traverse_handler)(struct box *b, int offset, size_t length, void *handle); + + +struct selection *selection_create(struct browser_window *bw); +void selection_destroy(struct selection *s); + +void selection_init(struct selection *s, struct box *root); +void selection_reinit(struct selection *s, struct box *root); + +/* bool selection_defined(struct selection *s); */ +#define selection_defined(s) ((s)->defined) + +/* bool selection_dragging(struct selection *s); */ +#define selection_dragging(s) ((s)->drag_state != DRAG_NONE) + + +void selection_clear(struct selection *s, bool redraw); +void selection_select_all(struct selection *s); + +bool selection_click(struct selection *s, struct box *box, browser_mouse_state mouse, int dx, int dy); +void selection_track(struct selection *s, struct box *box, browser_mouse_state mouse, int dx, int dy); + +void selection_drag_end(struct selection *s, struct box *box, + browser_mouse_state mouse, int x, int y); + +bool selection_traverse(struct selection *s, seln_traverse_handler handler, void *handle); + +bool selection_highlighted(struct selection *s, struct box *box, + unsigned *start_idx, unsigned *end_idx); + +bool selection_save_text(struct selection *s, const char *path); + +#endif -- cgit v1.2.3