void PaintedSlider::updateSliderPosition() { double l = (slider_->orientation() == Horizontal) ? w() : h(); double pixelsPerUnit = (l - HANDLE_WIDTH) / range(); double u = ((double)slider_->value() - slider_->minimum()) * pixelsPerUnit; if (slider_->orientation() == Horizontal) handle_->setOffsets(u, Left); else handle_->setOffsets(h() - HANDLE_WIDTH - u, Top); }
void PaintedSlider::updateSliderPosition() { double l = (slider_->orientation() == Orientation::Horizontal) ? w() : h(); double pixelsPerUnit = (l - slider_->handleWidth()) / range(); double u = ((double)slider_->value() - slider_->minimum()) * pixelsPerUnit; if (slider_->orientation() == Orientation::Horizontal) { handle_->setOffsets(u, Side::Left); fill_->setWidth(u + slider_->handleWidth() / 2); } else { handle_->setOffsets(h() - slider_->handleWidth() - u, Side::Top); fill_->setHeight(u + slider_->handleWidth() / 2); } }
void PaintedSlider::onSliderReleased(int u) { if (slider_->orientation() == Orientation::Horizontal) u -= slider_->handleWidth() / 2; else u = (int)h() - (u + slider_->handleWidth() / 2); double l = (slider_->orientation() == Orientation::Horizontal) ? w() : h(); double pixelsPerUnit = (l - slider_->handleWidth()) / range(); double v = std::max(slider_->minimum(), std::min(slider_->maximum(), slider_->minimum() + (int)((double)u / pixelsPerUnit + 0.5))); // TODO changed() ? slider_->sliderMoved().emit(static_cast<int>(v)); slider_->setValue(static_cast<int>(v)); slider_->valueChanged().emit(slider_->value()); updateSliderPosition(); }