summaryrefslogtreecommitdiff
path: root/desktop/selection.h
diff options
context:
space:
mode:
Diffstat (limited to 'desktop/selection.h')
-rw-r--r--desktop/selection.h76
1 files changed, 76 insertions, 0 deletions
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 <adrianl@users.sourceforge.net>
+ */
+
+/** \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