diff options
author | Simon Howard | 2011-03-22 21:08:04 +0000 |
---|---|---|
committer | Simon Howard | 2011-03-22 21:08:04 +0000 |
commit | bc087b49e2e5a9c00b5b1620b4bd289ebee5ee73 (patch) | |
tree | c4cf83e6a43c05f9292a26de2e2d70d5d9a57307 /textscreen | |
parent | 7093b65c7d3aa88e6fcaaf2994e76db27d8c31aa (diff) | |
download | chocolate-doom-bc087b49e2e5a9c00b5b1620b4bd289ebee5ee73.tar.gz chocolate-doom-bc087b49e2e5a9c00b5b1620b4bd289ebee5ee73.tar.bz2 chocolate-doom-bc087b49e2e5a9c00b5b1620b4bd289ebee5ee73.zip |
Fix scrollbars so that clicks scroll the pane to a location that matches
the clicked location. Interpret mousewheel events so that scroll panes
can be scrolled.
Subversion-branch: /trunk/chocolate-doom
Subversion-revision: 2307
Diffstat (limited to 'textscreen')
-rw-r--r-- | textscreen/txt_main.h | 10 | ||||
-rw-r--r-- | textscreen/txt_scrollpane.c | 36 |
2 files changed, 38 insertions, 8 deletions
diff --git a/textscreen/txt_main.h b/textscreen/txt_main.h index add30fa3..601548e5 100644 --- a/textscreen/txt_main.h +++ b/textscreen/txt_main.h @@ -34,10 +34,12 @@ // Special keypress values that correspond to mouse button clicks -#define TXT_MOUSE_BASE 0x10000 -#define TXT_MOUSE_LEFT (TXT_MOUSE_BASE + 0) -#define TXT_MOUSE_RIGHT (TXT_MOUSE_BASE + 1) -#define TXT_MOUSE_MIDDLE (TXT_MOUSE_BASE + 2) +#define TXT_MOUSE_BASE 0x10000 +#define TXT_MOUSE_LEFT (TXT_MOUSE_BASE + 0) +#define TXT_MOUSE_RIGHT (TXT_MOUSE_BASE + 1) +#define TXT_MOUSE_MIDDLE (TXT_MOUSE_BASE + 2) +#define TXT_MOUSE_SCROLLUP (TXT_MOUSE_BASE + 3) +#define TXT_MOUSE_SCROLLDOWN (TXT_MOUSE_BASE + 4) #define TXT_MAX_MOUSE_BUTTONS 16 // Screen size diff --git a/textscreen/txt_scrollpane.c b/textscreen/txt_scrollpane.c index 17c9bcbf..903c7910 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; + } + else if (scrollbars & SCROLLBAR_HORIZONTAL) + { + --scrollpane->x; + } + + return; + } + else if (b == TXT_MOUSE_SCROLLDOWN) + { + if (scrollbars & SCROLLBAR_VERTICAL) + { + ++scrollpane->y; + } + else if (scrollbars & SCROLLBAR_HORIZONTAL) + { + ++scrollpane->x; + } + + 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)) |