NAME
Prima::Widget::MouseScroller - auto-repeating mouse events
DESCRIPTION
Implements routines for emulation of auto repeating mouse events. A code inside MouseMove
callback can be implemented by the following scheme:
if ( mouse_pointer_inside_the_scrollable_area) {
$self-> scroll_timer_stop;
} else {
$self-> scroll_timer_start unless $self-> scroll_timer_active;
return unless $self-> scroll_timer_semaphore;
$self-> scroll_timer_semaphore( 0);
}
The class uses a semaphore {mouseTransaction}
, which should be set to non-zero if a widget is in mouse capture state, and set to zero or undef
otherwise.
The class starts an internal timer, which sets a semaphore and calls MouseMove
notification when triggered. The timer is assigned the timeouts, returned by Prima::Application::get_scroll_rate
( see "get_scroll_rate" in Prima::Application ).
Methods
- scroll_timer_active
-
Returns a boolean value indicating if the internal timer is started.
- scroll_timer_semaphore [ VALUE ]
-
A semaphore, set to 1 when the internal timer was triggered. It is advisable to check the semaphore state to discern a timer-generated event from the real mouse movement. If VALUE is specified, it is assigned to the semaphore.
- scroll_timer_start
-
Starts the internal timer.
- scroll_timer_stop
-
Stops the internal timer.
AUTHOR
Dmitry Karasik, <dmitry@karasik.eu.org>.