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>.

SEE ALSO

Prima, Prima::Widget, Prima::ScrollBar.