/************************************************************************* Handler for event triggered when we lose capture of mouse input *************************************************************************/ void Thumb::onCaptureLost(WindowEventArgs& e) { // default handling PushButton::onCaptureLost(e); d_beingDragged = false; // trigger tracking ended event WindowEventArgs args(this); onThumbTrackEnded(args); // send notification whenever thumb is released onThumbPositionChanged(args); }
/************************************************************************* Handler for mouse movement events *************************************************************************/ void Thumb::onMouseMove(MouseEventArgs& e) { // default processing PushButton::onMouseMove(e); // only react if we are being dragged if (d_beingDragged) { Sizef parentSize(getParentPixelSize()); Vector2f delta; float hmin, hmax, vmin, vmax; delta = CoordConverter::screenToWindow(*this, e.position); hmin = d_horzMin; hmax = d_horzMax; vmin = d_vertMin; vmax = d_vertMax; // calculate amount of movement delta -= d_dragPoint; delta.d_x /= parentSize.d_width; delta.d_y /= parentSize.d_height; // // Calculate new (pixel) position for thumb // UVector2 newPos(getPosition()); if (d_horzFree) { newPos.d_x.d_scale += delta.d_x; // limit value to within currently set range newPos.d_x.d_scale = (newPos.d_x.d_scale < hmin) ? hmin : (newPos.d_x.d_scale > hmax) ? hmax : newPos.d_x.d_scale; } if (d_vertFree) { newPos.d_y.d_scale += delta.d_y; // limit new position to within currently set range newPos.d_y.d_scale = (newPos.d_y.d_scale < vmin) ? vmin : (newPos.d_y.d_scale > vmax) ? vmax : newPos.d_y.d_scale; } // update thumb position if needed if (newPos != getPosition()) { setPosition(newPos); // send notification as required if (d_hotTrack) { WindowEventArgs args(this); onThumbPositionChanged(args); } } } ++e.handled; }
/************************************************************************* Handler for mouse movement events *************************************************************************/ void Thumb::onMouseMove(MouseEventArgs& e) { // default processing PushButton::onMouseMove(e); // only react if we are being dragged if (d_beingDragged) { Vector2 delta; float hmin, hmax, vmin, vmax; // get some values as absolute pixel offsets if (getMetricsMode() == Relative) { delta = relativeToAbsolute(screenToWindow(e.position)); hmax = relativeToAbsoluteX_impl(d_parent, d_horzMax); hmin = relativeToAbsoluteX_impl(d_parent, d_horzMin); vmax = relativeToAbsoluteY_impl(d_parent, d_vertMax); vmin = relativeToAbsoluteY_impl(d_parent, d_vertMin); } else { delta = screenToWindow(e.position); hmin = d_horzMin; hmax = d_horzMax; vmin = d_vertMin; vmax = d_vertMax; } // calculate amount of movement in pixels delta -= d_dragPoint; // // Calculate new (pixel) position for thumb // Point newPos(getAbsolutePosition()); if (d_horzFree) { newPos.d_x += delta.d_x; // limit value to within currently set range newPos.d_x = (newPos.d_x < hmin) ? hmin : (newPos.d_x > hmax) ? hmax : newPos.d_x; } if (d_vertFree) { newPos.d_y += delta.d_y; // limit new position to within currently set range newPos.d_y = (newPos.d_y < vmin) ? vmin : (newPos.d_y > vmax) ? vmax : newPos.d_y; } // update thumb position if needed if (newPos != getAbsolutePosition()) { if (getMetricsMode() == Relative) { newPos = absoluteToRelative_impl(d_parent, newPos); } setPosition(newPos); // send notification as required if (d_hotTrack) { WindowEventArgs args(this); onThumbPositionChanged(args); } } } e.handled = true; }