summaryrefslogtreecommitdiff
path: root/desktop/scrollbar.c
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2011-08-27 09:13:23 +0000
committerMichael Drake <tlsa@netsurf-browser.org>2011-08-27 09:13:23 +0000
commit401072e305c152b42d99d94b2283cf928562f132 (patch)
tree15725b1297b88cd0fcacdcd070a89707925179c8 /desktop/scrollbar.c
parent81c52ad4947c2b658473f8f87e244660a72c002a (diff)
downloadnetsurf-401072e305c152b42d99d94b2283cf928562f132.tar.gz
netsurf-401072e305c152b42d99d94b2283cf928562f132.tar.bz2
Make more robust. E.g. zero length scrollbars.
svn path=/trunk/netsurf/; revision=12672
Diffstat (limited to 'desktop/scrollbar.c')
-rw-r--r--desktop/scrollbar.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/desktop/scrollbar.c b/desktop/scrollbar.c
index 49b2c7668..3fc36bf18 100644
--- a/desktop/scrollbar.c
+++ b/desktop/scrollbar.c
@@ -105,7 +105,8 @@ bool scrollbar_create(bool horizontal, int length, int full_size,
scrollbar->pair_drag = false;
well_length = length - 2 * SCROLLBAR_WIDTH;
- scrollbar->bar_len = (well_length * visible_size) / full_size;
+ scrollbar->bar_len = (full_size == 0) ? 0 :
+ ((well_length * visible_size) / full_size);
scrollbar->client_callback = client_callback;
scrollbar->client_data = client_data;
@@ -467,8 +468,13 @@ void scrollbar_set_extents(struct scrollbar *s, int length,
if (full_size != -1)
s->full_size = full_size;
+ if (s->full_size < s->visible_size)
+ s->full_size = s->visible_size;
+
/* Update scroll offset (scaled in proportion with change in excess) */
- s->offset = (s->full_size - s->visible_size) * s->offset / cur_excess;
+ s->offset = (cur_excess < 1) ? 0 :
+ ((s->full_size - s->visible_size) * s->offset /
+ cur_excess);
well_length = s->length - 2 * SCROLLBAR_WIDTH;