summaryrefslogtreecommitdiff
path: root/dw
diff options
context:
space:
mode:
authorRodrigo Arias Mallo <rodarima@gmail.com>2024-10-12 21:39:14 +0200
committerRodrigo Arias Mallo <rodarima@gmail.com>2024-10-13 13:59:01 +0200
commit1f7e5f5c258c3d66e1704ee48a11c79c65f8354b (patch)
tree366023d896055972c5bb981057083b7fc6823b37 /dw
parent7bade294672a638bcd1b0451333be5bb948cbbf7 (diff)
Add new scrollbar page mode
The scroll page mode changes the behavior of the mouse when clicking on the vertical scrollbar. When enabled with scrollbar_page_mode=YES, clicking with the left button anywhere on the vertical scrollbar will cause the page to scroll down one page. With the right button, to scroll up one page. Holding Shift temporarily reverts the value of the option.
Diffstat (limited to 'dw')
-rw-r--r--dw/fltkviewport.cc19
-rw-r--r--dw/fltkviewport.hh22
2 files changed, 40 insertions, 1 deletions
diff --git a/dw/fltkviewport.cc b/dw/fltkviewport.cc
index 28c4101c..f0b69cb8 100644
--- a/dw/fltkviewport.cc
+++ b/dw/fltkviewport.cc
@@ -2,6 +2,7 @@
* Dillo Widget
*
* Copyright 2005-2007 Sebastian Geerken <sgeerken@dillo.org>
+ * Copyright 2024 Rodrigo Arias Mallo <rodarima@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -71,6 +72,7 @@ FltkViewport::FltkViewport (int X, int Y, int W, int H, const char *label):
hasDragScroll = 1;
scrollX = scrollY = scrollDX = scrollDY = 0;
horScrolling = verScrolling = dragScrolling = 0;
+ scrollbarPageMode = false;
gadgetOrientation[0] = GADGET_HORIZONTAL;
gadgetOrientation[1] = GADGET_HORIZONTAL;
@@ -292,8 +294,18 @@ int FltkViewport::handle (int event)
case FL_PUSH:
if (vscrollbar->visible() && Fl::event_inside(vscrollbar)) {
- if (vscrollbar->handle(event))
+ if (scrollbarPageMode ^ (bool) Fl::event_shift()) {
+ if (Fl::event_button() == FL_LEFT_MOUSE) {
+ scroll(core::SCREEN_DOWN_CMD);
+ return 1;
+ } else if (Fl::event_button() == FL_RIGHT_MOUSE) {
+ scroll(core::SCREEN_UP_CMD);
+ return 1;
+ }
+ }
+ if (vscrollbar->handle(event)) {
verScrolling = 1;
+ }
} else if (hscrollbar->visible() && Fl::event_inside(hscrollbar)) {
if (hscrollbar->handle(event))
horScrolling = 1;
@@ -412,6 +424,11 @@ void FltkViewport::setScrollStep(int step)
hscrollbar->linesize(step);
}
+void FltkViewport::setScrollbarPageMode(bool enable)
+{
+ scrollbarPageMode = enable;
+}
+
bool FltkViewport::usesViewport ()
{
return true;
diff --git a/dw/fltkviewport.hh b/dw/fltkviewport.hh
index fdcbb3be..62d4fa21 100644
--- a/dw/fltkviewport.hh
+++ b/dw/fltkviewport.hh
@@ -1,3 +1,23 @@
+/*
+ * Dillo Widget
+ *
+ * Copyright 2005-2007 Sebastian Geerken <sgeerken@dillo.org>
+ * Copyright 2024 Rodrigo Arias Mallo <rodarima@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
#ifndef __DW_FLTKVIEWPORT_HH__
#define __DW_FLTKVIEWPORT_HH__
@@ -24,6 +44,7 @@ private:
int scrollbarOnLeft;
int hasDragScroll, dragScrolling, dragX, dragY;
int horScrolling, verScrolling;
+ bool scrollbarPageMode;
Fl_Scrollbar *vscrollbar, *hscrollbar;
@@ -78,6 +99,7 @@ public:
void setDragScroll (bool enable) { hasDragScroll = enable ? 1 : 0; }
void addGadget (Fl_Widget *gadget);
void setScrollbarOnLeft (bool enable);
+ void setScrollbarPageMode(bool enable);
};
} // namespace fltk