MCPcopy Create free account
hub / github.com/MyGUI/mygui / TrackMove

Method TrackMove

MyGUIEngine/src/MyGUI_ScrollBar.cpp:187–261  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

185 }
186
187 void ScrollBar::TrackMove(int _left, int _top)
188 {
189 if (mWidgetTrack == nullptr)
190 return;
191
192 const IntPoint& point = InputManager::getInstance().getLastPressedPosition(MouseButton::Left);
193
194 if (mVerticalAlignment)
195 {
196 // расчитываем позицию виджета
197 int start = mPreActionOffset.top + (_top - point.top);
198 if (start < (int)mSkinRangeStart)
199 start = (int)mSkinRangeStart;
200 else if (start > (getTrackPlaceLength() - (int)mSkinRangeEnd - mWidgetTrack->getHeight()))
201 start = (getTrackPlaceLength() - (int)mSkinRangeEnd - mWidgetTrack->getHeight());
202 if (mWidgetTrack->getTop() != start)
203 mWidgetTrack->setPosition(mWidgetTrack->getLeft(), start);
204
205 int pos = 0;
206 if (mScrollRange >= 2)
207 {
208 // расчитываем положение соответствующее позиции
209 // плюс пол позиции
210 pos = start - (int)mSkinRangeStart + (getLineSize() - getTrackSize()) / (((int)mScrollRange - 1) * 2);
211 // высчитываем ближайшее значение и обновляем
212 pos = pos * (int)(mScrollRange - 1) / (getLineSize() - getTrackSize());
213 }
214
215 // проверяем на выходы и изменения
216 if (pos < 0)
217 pos = 0;
218 else if (pos >= (int)mScrollRange)
219 pos = (int)mScrollRange - 1;
220 if (pos == (int)mScrollPosition)
221 return;
222
223 mScrollPosition = pos;
224 }
225 else
226 {
227 // расчитываем позицию виджета
228 int start = mPreActionOffset.left + (_left - point.left);
229 if (start < (int)mSkinRangeStart)
230 start = (int)mSkinRangeStart;
231 else if (start > (getTrackPlaceLength() - (int)mSkinRangeEnd - mWidgetTrack->getWidth()))
232 start = (getTrackPlaceLength() - (int)mSkinRangeEnd - mWidgetTrack->getWidth());
233 if (mWidgetTrack->getLeft() != start)
234 mWidgetTrack->setPosition(IntPoint(start, mWidgetTrack->getTop()));
235
236 int pos = 0;
237 if (mScrollRange >= 2)
238 {
239 // расчитываем положение соответствующее позиции
240 // плюс пол позиции
241 pos = start - (int)mSkinRangeStart + (getLineSize() - getTrackSize()) / (((int)mScrollRange - 1) * 2);
242 // высчитываем ближайшее значение и обновляем
243 pos = pos * (int)(mScrollRange - 1) / (getLineSize() - getTrackSize());
244 }

Callers

nothing calls this directly

Calls 6

getTopMethod · 0.80
getLeftMethod · 0.80
IntPointFunction · 0.50
getHeightMethod · 0.45
setPositionMethod · 0.45
getWidthMethod · 0.45

Tested by

no test coverage detected