return true;
}
+ if (ev->y < 0 || ev->y > get_height ()) {
+ return true;
+ }
+
grab_y = ev->y;
if (ev->state & Keyboard::PrimaryModifier) {
/* Then we handle zoom, which is dragging horizontally. We zoom around the area that is
* the current y pointer value, not from the area that was the start of the drag.
- * the point of zoom must have the same
+ * We don't start doing zoom until we are at least one scroomer width outside the scroomer's
+ * area.
*/
- if (ev->x > get_width()) {
+ if (ev->x > (get_width() * 2)) {
zoom = ev->x - get_width();
double higher = unzoomed_val + unzoomed_page - half_min_page - val_at_pointer;
page = min(page, adj.get_upper() - val);
} else if (ev->x < 0) {
/* on zoom out increase the page size as well as moving the range towards the mouse pos*/
- zoom = abs(ev->x);
+ /*zoom = abs(ev->x);
- /*double higher = unzoomed_val + unzoomed_page - half_min_page - val_at_pointer;
+ double higher = unzoomed_val + unzoomed_page - half_min_page - val_at_pointer;
double lower = val_at_pointer - (unzoomed_val + half_min_page);
higher *= zoom / 128;
val = unzoomed_val;
page = unzoomed_page;
}
-
- adj.set_page_size(page);
- adj.set_value(val);
+
+ /* Round these values to stop the scroomer handlers quivering about during drags */
+ adj.set_page_size (rint (page));
+ adj.set_value (rint (val));
adj.value_changed();
return true;
{
switch (ev->direction) {
case GDK_SCROLL_UP:
- adj.set_value (adj.get_value() + adj.get_page_size() / 10.0);
+ adj.set_value (min (adj.get_value() + adj.get_page_size() / 10.0, adj.get_upper() - adj.get_page_size()));
break;
case GDK_SCROLL_DOWN:
adj.set_value (adj.get_value() - adj.get_page_size() / 10.0);
DragStarting (); /* EMIT SIGNAL */
}
- return false;
+ if (ev->type == GDK_2BUTTON_PRESS && ev->button == 1) {
+ DoubleClicked();
+ }
+
+ return true;
}
bool