| 109 | } |
| 110 | |
| 111 | void SnapDrawingViewTransaction::setViewFrame(const Ref<View>& view, |
| 112 | const Frame& newFrame, |
| 113 | bool isRightToLeft, |
| 114 | const Ref<Animator>& animator) { |
| 115 | auto layer = toLayer(view); |
| 116 | if (layer == nullptr) { |
| 117 | return; |
| 118 | } |
| 119 | auto frame = makeViewFrame(newFrame, layer->getResources()->getDisplayScale()); |
| 120 | |
| 121 | auto typedAnimator = |
| 122 | Valdi::castOrNull<ValdiAnimator>(animator != nullptr ? animator->getNativeAnimator() : nullptr); |
| 123 | if (typedAnimator != nullptr) { |
| 124 | auto fromFrame = layer->getFrame(); |
| 125 | |
| 126 | Ref<IAnimation> animation; |
| 127 | if (typedAnimator->isSpringAnimation()) { |
| 128 | animation = Valdi::makeShared<SpringAnimation>(typedAnimator->getStiffness(), |
| 129 | typedAnimator->getDamping(), |
| 130 | MIN_VISIBLE_CHANGE_PIXEL, |
| 131 | [frame, fromFrame](Layer& view, double ratio) { |
| 132 | view.setFrame(interpolateValue(fromFrame, frame, ratio)); |
| 133 | }); |
| 134 | } else { |
| 135 | animation = Valdi::makeShared<Animation>(typedAnimator->getDuration(), |
| 136 | typedAnimator->getInterpolationFunction(), |
| 137 | [frame, fromFrame](Layer& view, double ratio) { |
| 138 | view.setFrame(interpolateValue(fromFrame, frame, ratio)); |
| 139 | }); |
| 140 | } |
| 141 | |
| 142 | typedAnimator->appendAnimation(layer, animation, STRING_LITERAL("frame")); |
| 143 | } else { |
| 144 | layer->setFrame(frame); |
| 145 | } |
| 146 | |
| 147 | layer->setRightToLeft(isRightToLeft); |
| 148 | } |
| 149 | |
| 150 | void SnapDrawingViewTransaction::setViewScrollSpecs(const Ref<View>& view, |
| 151 | const Valdi::Point& directionDependentContentOffset, |
no test coverage detected