| 1160 | directionAgnosticVelocityFromDirectionDependentVelocity(directionDependentVelocity); |
| 1161 | handleOnScroll( |
| 1162 | directionDependentContentOffset, directionDependentUnclampedContentOffset, directionAgnosticVelocity); |
| 1163 | |
| 1164 | return {scrollState.getDirectionDependentContentOffset()}; |
| 1165 | } |
| 1166 | |
| 1167 | void ViewNode::onScrollEnd(const Point& directionDependentContentOffset, |
| 1168 | const Point& directionDependentUnclampedContentOffset) { |
| 1169 | if (isUpdatingScrollSpecs()) { |
| 1170 | return; |
| 1171 | } |
| 1172 | |
| 1173 | auto& scrollState = getOrCreateScrollState(); |
| 1174 | |
| 1175 | // Make sure everyone is notified that we are not animating anymore |
| 1176 | scrollState.setCurrentlyAnimating(false); |
| 1177 | |
| 1178 | // Trigger typescript's onScrollEnd |
| 1179 | |
| 1180 | auto directionAgnosticContentOffset = |
| 1181 | scrollState.resolveDirectionAgnosticContentOffset(directionDependentContentOffset); |
| 1182 | auto directionAgnosticUnclampedContentOffset = |
| 1183 | scrollState.resolveDirectionAgnosticContentOffset(directionDependentUnclampedContentOffset); |
| 1184 | |
| 1185 | scrollState.notifyOnScrollEnd(directionAgnosticContentOffset, directionAgnosticUnclampedContentOffset); |
| 1186 | } |
| 1187 | |
| 1188 | Point ViewNode::directionAgnosticVelocityFromDirectionDependentVelocity(const Point& directionDependentVelocity) { |
| 1189 | if (isHorizontal()) { |
| 1190 | auto resolvedVelocityX = isRightToLeft() ? directionDependentVelocity.x * -1 : directionDependentVelocity.x; |
| 1191 | return Point(resolvedVelocityX, 0); |
| 1192 | } else { |
| 1193 | return Point(0, directionDependentVelocity.y); |