summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2011-12-18 15:36:38 +0000
committerMichael Drake <tlsa@netsurf-browser.org>2011-12-18 15:36:38 +0000
commit877988a7ef9235d894a6f4ff2f032b7e2f207f72 (patch)
tree6c7ef846de18270d90a6aabc6ff23299501217cd /desktop
parenta40b9fbecd19decd06003d98b4b63c953b7e2dcd (diff)
downloadnetsurf-877988a7ef9235d894a6f4ff2f032b7e2f207f72.tar.gz
netsurf-877988a7ef9235d894a6f4ff2f032b7e2f207f72.tar.bz2
Add named scroll offset values for page up, page down, top and bottom.
svn path=/trunk/netsurf/; revision=13293
Diffstat (limited to 'desktop')
-rw-r--r--desktop/scrollbar.c25
-rw-r--r--desktop/scrollbar.h7
2 files changed, 32 insertions, 0 deletions
diff --git a/desktop/scrollbar.c b/desktop/scrollbar.c
index 1ec89437a..45ffa2f79 100644
--- a/desktop/scrollbar.c
+++ b/desktop/scrollbar.c
@@ -461,6 +461,30 @@ bool scrollbar_scroll(struct scrollbar *s, int change)
/* zero scroll step, or unscrollable */
return false;
+ /* Convert named change values to appropriate pixel offset value */
+ switch (change) {
+ case SCROLL_TOP:
+ change = -s->full_size;
+ break;
+
+ case SCROLL_PAGE_UP:
+ change = -s->visible_size;
+ break;
+
+ case SCROLL_PAGE_DOWN:
+ change = s->visible_size;
+ break;
+
+ case SCROLL_BOTTOM:
+ change = s->full_size;
+ break;
+
+ default:
+ /* Change value is already a pixel offset */
+ break;
+ }
+
+ /* Get new offset */
if (s->offset + change > s->full_size - s->visible_size)
s->offset = s->full_size - s->visible_size;
else if (s->offset + change < 0)
@@ -472,6 +496,7 @@ bool scrollbar_scroll(struct scrollbar *s, int change)
/* Nothing happened */
return false;
+ /* Update scrollbar */
well_length = s->length - 2 * SCROLLBAR_WIDTH;
s->bar_pos = (s->full_size < 1) ? 0 :
((well_length * s->offset) / s->full_size);
diff --git a/desktop/scrollbar.h b/desktop/scrollbar.h
index 3f415e8d9..4bd9a17c0 100644
--- a/desktop/scrollbar.h
+++ b/desktop/scrollbar.h
@@ -24,11 +24,18 @@
#define _NETSURF_DESKTOP_SCROLLBAR_H_
#include <stdbool.h>
+#include <limits.h>
#include "desktop/browser.h"
#define SCROLLBAR_WIDTH 16
+/* Region dependent values for scrollbar_scroll function */
+#define SCROLL_TOP INT_MIN
+#define SCROLL_PAGE_UP INT_MIN + 1
+#define SCROLL_PAGE_DOWN INT_MAX - 1
+#define SCROLL_BOTTOM INT_MAX
+
struct scrollbar;
typedef enum {