void Slider::press(const Event& e) { EventButton b = e.pointer_button(); if (b == Event::right) { return; } SliderImpl& s = *impl_; Coord x = e.pointer_x(); Coord y = e.pointer_y(); const Allocation& slider = allocation(); const Allocation& a = s.thumb_patch_->allocation(); int rel = s.hit_thumb(e); if (rel == 0) { apply_adjustment(&Adjustable::begin_adjustment); s.xoffset_ = slider.left() + x - a.left(); s.yoffset_ = slider.bottom() + y - a.bottom(); s.dragging_ = true; } else if (b == Event::left) { s.stepper_ = (rel == 1) ? s.forward_ : s.backward_; if (s.stepper_ != nil) { s.stepper_->start_stepping(); } } else { /* middle ==> drag */ apply_adjustment(&Adjustable::begin_adjustment); s.dragging_ = true; s.xoffset_ = slider.left() + (a.right() - a.left()) / 2.0; s.yoffset_ = slider.bottom() + (a.top() - a.bottom()) / 2.0; move_to(x - s.xoffset_, y - s.yoffset_); move(e); } }
void Slider::release(const Event& e) { SliderImpl& s = *impl_; if (s.dragging_) { if (s.showing_old_thumb_) { s.showing_old_thumb_ = false; s.old_thumb_->redraw(); } s.dragging_ = false; if (s.aborted_) { s.aborted_ = false; return; } move_to(e.pointer_x() - s.xoffset_, e.pointer_y() - s.yoffset_); redraw_thumb(); move(e); apply_adjustment(&Adjustable::commit_adjustment); } else if (s.stepper_ != nil) { s.stepper_->stop_stepping(); s.stepper_ = nil; move(e); } }
void Slider::release(const Event& e) { SliderImpl& s = *impl_; if (s.dragging_) { if (s.showing_old_thumb_) { s.showing_old_thumb_ = false; s.old_thumb_->redraw(); } s.dragging_ = false; if (s.aborted_) { s.aborted_ = false; return; } Coord x, y; s.get_position(this, e, x, y); move_to(x - s.xoffset_, y - s.yoffset_); redraw_thumb(); move(e); apply_adjustment(&Adjustable::commit_adjustment); } else if (s.stepper_ != nil) { s.stepper_->stop_stepping(); s.stepper_ = nil; move(e); } }