summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2013-02-08 15:26:24 +0000
committerMichael Drake <tlsa@netsurf-browser.org>2013-02-08 15:26:24 +0000
commit698f391289d8c53c19b170dd3b726314ba394826 (patch)
tree7dbfda126af35a680794b2f8045ca08018fa81e1
parentf57e89cc25e92c2ad4eb419e745955595248088b (diff)
downloadnetsurf-698f391289d8c53c19b170dd3b726314ba394826.tar.gz
netsurf-698f391289d8c53c19b170dd3b726314ba394826.tar.bz2
Add scrollwheel support to textareas.
-rw-r--r--desktop/textarea.c16
-rw-r--r--desktop/textarea.h11
-rw-r--r--render/html.c9
3 files changed, 36 insertions, 0 deletions
diff --git a/desktop/textarea.c b/desktop/textarea.c
index 59257d208..25630e464 100644
--- a/desktop/textarea.c
+++ b/desktop/textarea.c
@@ -2078,3 +2078,19 @@ void textarea_set_layout(struct textarea *ta, int width, int height,
ta->pad_left = left;
textarea_reflow(ta, 0);
}
+
+
+/* exported interface, documented in textarea.h */
+bool textarea_scroll(struct textarea *ta, int scrx, int scry)
+{
+ bool handled_scroll = false;
+
+ if (ta->bar_x != NULL && scrx != 0 &&
+ scrollbar_scroll(ta->bar_x, scrx))
+ handled_scroll = true;
+ if (ta->bar_y != NULL && scry != 0 &&
+ scrollbar_scroll(ta->bar_y, scry))
+ handled_scroll = true;
+
+ return handled_scroll;
+}
diff --git a/desktop/textarea.h b/desktop/textarea.h
index 266b8356a..560f1ca28 100644
--- a/desktop/textarea.h
+++ b/desktop/textarea.h
@@ -219,5 +219,16 @@ void textarea_set_dimensions(struct textarea *ta, int width, int height);
*/
void textarea_set_layout(struct textarea *ta, int width, int height,
int top, int right, int bottom, int left);
+
+/**
+ * Scroll a textarea by an amount. Only does anything if multi-line textarea
+ * has scrollbars. If it scrolls, it will emit a redraw request.
+ *
+ * \param ta textarea widget
+ * \param scrx number of px try to scroll in x direction
+ * \param scry number of px try to scroll in y direction
+ * \return true iff the textarea was scrolled
+ */
+bool textarea_scroll(struct textarea *ta, int scrx, int scry);
#endif
diff --git a/render/html.c b/render/html.c
index 3a7e3c831..1eb0f91f1 100644
--- a/render/html.c
+++ b/render/html.c
@@ -35,6 +35,7 @@
#include "desktop/options.h"
#include "desktop/selection.h"
#include "desktop/scrollbar.h"
+#include "desktop/textarea.h"
#include "image/bitmap.h"
#include "render/box.h"
#include "render/font.h"
@@ -2681,6 +2682,14 @@ html_scroll_at_point(struct content *c, int x, int y, int scrx, int scry)
x - box_x, y - box_y, scrx, scry) == true)
return true;
+ /* Pass into textarea widget */
+ if (box->gadget && (box->gadget->type == GADGET_TEXTAREA ||
+ box->gadget->type == GADGET_PASSWORD ||
+ box->gadget->type == GADGET_TEXTBOX) &&
+ textarea_scroll(box->gadget->data.text.ta,
+ scrx, scry) == true)
+ return true;
+
/* Pass into object */
if (box->object != NULL && content_scroll_at_point(
box->object, x - box_x, y - box_y,