44 bool update(
float localX,
float localY,
bool down,
bool live)
47 if (live && _count > 0 && _onReorder)
49 if (down && !_prevDown)
51 if (localX >= _hitX0 && localX <= _hitX1
52 && localY >= _rowTop && localY < _rowTop + _count * _rowH)
53 { _dragIdx = (int)((localY - _rowTop) / _rowH); _startY = localY; _dragging =
false; }
55 else if (down && _dragIdx >= 0)
57 if (!_dragging && std::abs(localY - _startY) >
kDragThreshold) { _dragging =
true; _dropIdx = _dragIdx; changed =
true; }
61 _dropIdx = std::max(0, std::min((
int)((localY - _rowTop + _rowH * 0.5f) / _rowH), _count - 1));
65 else if (!down && _prevDown && _dragIdx >= 0)
67 if (_dragging) {
if (_dropIdx != _dragIdx && _dropIdx >= 0) _onReorder(_dragIdx, _dropIdx); }
68 else if (_onTap) _onTap(_dragIdx);
69 _dragIdx = _dropIdx = -1; _dragging =
false; changed =
true;
72 else if (!down) { _dragIdx = _dropIdx = -1; _dragging =
false; }
82 std::vector<int> order(count);
83 for (
int i = 0; i < count; ++i) order[i] = i;
84 if (_dragging && _dragIdx >= 0 && _dragIdx < count
85 && _dropIdx >= 0 && _dropIdx < count && _dropIdx != _dragIdx)
87 order.erase(order.begin() + _dragIdx);
88 order.insert(order.begin() + _dropIdx, _dragIdx);
105 float _hitX0 = 0.f, _hitX1 = 0.f, _rowTop = 0.f, _rowH = 44.f;