void Slider::updateTrack() { if (mWidgetTrack == nullptr) return; _forcePick(mWidgetTrack); if (!mWidgetTrack->getVisible()) mWidgetTrack->setVisible(true); int iTrack = mWidgetTrack->getSize().width; int iSize = mWidgetTrack->getParent()->getSize().width - iTrack; int pos = mfValue * iSize; mWidgetTrack->setPosition(pos, mWidgetTrack->getTop()); }
void ScrollBar::updateTrack() { if (mWidgetTrack == nullptr) return; _forcePick(mWidgetTrack); // размер диапазана в пикселях int pos = getLineSize(); if (mVerticalAlignment) { // скрываем если диапазан маленький или места мало if ((mScrollRange < 2) || (pos <= mWidgetTrack->getHeight())) { mWidgetTrack->setVisible(false); if (nullptr != mWidgetFirstPart) mWidgetFirstPart->setSize(mWidgetFirstPart->getWidth(), pos / 2); if (nullptr != mWidgetSecondPart) mWidgetSecondPart->setCoord(mWidgetSecondPart->getLeft(), pos / 2 + (int)mSkinRangeStart, mWidgetSecondPart->getWidth(), pos - pos / 2); return; } // если скрыт то покажем if (!mWidgetTrack->getVisible()) mWidgetTrack->setVisible(true); // и обновляем позицию pos = (int)(((size_t)(pos - getTrackSize()) * mScrollPosition) / (mScrollRange - 1) + mSkinRangeStart); mWidgetTrack->setPosition(mWidgetTrack->getLeft(), pos); if (nullptr != mWidgetFirstPart) { int height = pos - mWidgetFirstPart->getTop(); mWidgetFirstPart->setSize(mWidgetFirstPart->getWidth(), height); } if (nullptr != mWidgetSecondPart) { int top = pos + mWidgetTrack->getHeight(); int height = mWidgetSecondPart->getHeight() + mWidgetSecondPart->getTop() - top; mWidgetSecondPart->setCoord(mWidgetSecondPart->getLeft(), top, mWidgetSecondPart->getWidth(), height); } } else { // скрываем если диапазан маленький или места мало if ((mScrollRange < 2) || (pos <= mWidgetTrack->getWidth())) { mWidgetTrack->setVisible(false); if (nullptr != mWidgetFirstPart) mWidgetFirstPart->setSize(pos / 2, mWidgetFirstPart->getHeight()); if (nullptr != mWidgetSecondPart) mWidgetSecondPart->setCoord(pos / 2 + (int)mSkinRangeStart, mWidgetSecondPart->getTop(), pos - pos / 2, mWidgetSecondPart->getHeight()); return; } // если скрыт то покажем if (!mWidgetTrack->getVisible()) mWidgetTrack->setVisible(true); // и обновляем позицию pos = (int)(((size_t)(pos - getTrackSize()) * mScrollPosition) / (mScrollRange - 1) + mSkinRangeStart); mWidgetTrack->setPosition(pos, mWidgetTrack->getTop()); if (nullptr != mWidgetFirstPart) { int height = pos - mWidgetFirstPart->getLeft(); mWidgetFirstPart->setSize(height, mWidgetFirstPart->getHeight()); } if (nullptr != mWidgetSecondPart) { int top = pos + mWidgetTrack->getWidth(); int height = mWidgetSecondPart->getWidth() + mWidgetSecondPart->getLeft() - top; mWidgetSecondPart->setCoord(top, mWidgetSecondPart->getTop(), height, mWidgetSecondPart->getHeight()); } } }