Exemplo n.º 1
0
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);
    }
}
Exemplo n.º 2
0
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);
    }
}
Exemplo n.º 3
0
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);
    }
}