summaryrefslogtreecommitdiff
path: root/textscreen/txt_scrollpane.c
diff options
context:
space:
mode:
authorSimon Howard2011-09-11 23:40:44 +0000
committerSimon Howard2011-09-11 23:40:44 +0000
commitefd15d965dee947a04727bb62f4e2092cf28732f (patch)
tree730d99c1e88d5e3145e552ad69dec52d30026d01 /textscreen/txt_scrollpane.c
parent4d17ab361e90a75dc6deefd37e6eb2ba0610b386 (diff)
parent11024d8214580d63ca7a9e70a121f5ff542a2fce (diff)
downloadchocolate-doom-efd15d965dee947a04727bb62f4e2092cf28732f.tar.gz
chocolate-doom-efd15d965dee947a04727bb62f4e2092cf28732f.tar.bz2
chocolate-doom-efd15d965dee947a04727bb62f4e2092cf28732f.zip
Merge from raven-branch.
Subversion-branch: /branches/strife-branch Subversion-revision: 2367
Diffstat (limited to 'textscreen/txt_scrollpane.c')
-rw-r--r--textscreen/txt_scrollpane.c40
1 files changed, 36 insertions, 4 deletions
diff --git a/textscreen/txt_scrollpane.c b/textscreen/txt_scrollpane.c
index 17c9bcbf..2fd45c55 100644
--- a/textscreen/txt_scrollpane.c
+++ b/textscreen/txt_scrollpane.c
@@ -416,6 +416,33 @@ static void TXT_ScrollPaneMousePress(TXT_UNCAST_ARG(scrollpane),
scrollbars = NeedsScrollbars(scrollpane);
+ if (b == TXT_MOUSE_SCROLLUP)
+ {
+ if (scrollbars & SCROLLBAR_VERTICAL)
+ {
+ scrollpane->y -= 3;
+ }
+ else if (scrollbars & SCROLLBAR_HORIZONTAL)
+ {
+ scrollpane->x -= 3;
+ }
+
+ return;
+ }
+ else if (b == TXT_MOUSE_SCROLLDOWN)
+ {
+ if (scrollbars & SCROLLBAR_VERTICAL)
+ {
+ scrollpane->y += 3;
+ }
+ else if (scrollbars & SCROLLBAR_HORIZONTAL)
+ {
+ scrollpane->x += 3;
+ }
+
+ return;
+ }
+
rel_x = x - scrollpane->widget.x;
rel_y = y - scrollpane->widget.y;
@@ -433,14 +460,15 @@ static void TXT_ScrollPaneMousePress(TXT_UNCAST_ARG(scrollpane),
else
{
int range = FullWidth(scrollpane) - scrollpane->w;
+ int bar_max = scrollpane->w - 3;
- scrollpane->x = ((rel_x - 1) * range) / (scrollpane->w - 3);
+ scrollpane->x = ((rel_x - 1) * range + (bar_max / 2)) / bar_max;
}
return;
}
- // Click on the horizontal scrollbar?
+ // Click on the vertical scrollbar?
if ((scrollbars & SCROLLBAR_VERTICAL) && rel_x == scrollpane->w)
{
if (rel_y == 0)
@@ -454,8 +482,9 @@ static void TXT_ScrollPaneMousePress(TXT_UNCAST_ARG(scrollpane),
else
{
int range = FullHeight(scrollpane) - scrollpane->h;
+ int bar_max = scrollpane->h - 3;
- scrollpane->y = ((rel_y - 1) * range) / (scrollpane->h - 3);
+ scrollpane->y = ((rel_y - 1) * range + (bar_max / 2)) / bar_max;
}
return;
@@ -465,7 +494,6 @@ static void TXT_ScrollPaneMousePress(TXT_UNCAST_ARG(scrollpane),
{
TXT_WidgetMousePress(scrollpane->child, x, y, b);
}
-
}
static void TXT_ScrollPaneLayout(TXT_UNCAST_ARG(scrollpane))
@@ -529,6 +557,10 @@ txt_scrollpane_t *TXT_NewScrollPane(int w, int h, TXT_UNCAST_ARG(target))
scrollpane->expand_w = w <= 0;
scrollpane->expand_h = h <= 0;
+ // Set parent pointer for inner widget.
+
+ target->parent = &scrollpane->widget;
+
return scrollpane;
}