| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "config.h" | 5 #include "config.h" |
| 6 | 6 |
| 7 #include "cc/page_scale_animation.h" | 7 #include "cc/page_scale_animation.h" |
| 8 |
| 9 #include "cc/geometry.h" |
| 8 #include "ui/gfx/point_f.h" | 10 #include "ui/gfx/point_f.h" |
| 9 #include "ui/gfx/rect_f.h" | 11 #include "ui/gfx/rect_f.h" |
| 10 | 12 |
| 11 #include <algorithm> | |
| 12 #include <math.h> | 13 #include <math.h> |
| 13 | 14 |
| 14 namespace { | 15 namespace { |
| 15 | 16 |
| 16 gfx::PointF toPointF(const gfx::Vector2dF& vector) | 17 gfx::PointF toPointF(const gfx::Vector2dF& vector) |
| 17 { | 18 { |
| 18 return gfx::PointF(vector.x(), vector.y()); | 19 return gfx::PointF(vector.x(), vector.y()); |
| 19 } | 20 } |
| 20 | 21 |
| 21 // This takes a viewport-relative vector and returns a vector whose values are | 22 // This takes a viewport-relative vector and returns a vector whose values are |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 131 // where both anchor{x,y} and normalized{x,y} begin as unknowns. Solving | 132 // where both anchor{x,y} and normalized{x,y} begin as unknowns. Solving |
| 132 // for the normalized, we get the following formulas: | 133 // for the normalized, we get the following formulas: |
| 133 gfx::Vector2dF normalized; | 134 gfx::Vector2dF normalized; |
| 134 normalized.set_x((startRect.x() - targetRect.x()) / (targetRect.width() - st
artRect.width())); | 135 normalized.set_x((startRect.x() - targetRect.x()) / (targetRect.width() - st
artRect.width())); |
| 135 normalized.set_y((startRect.y() - targetRect.y()) / (targetRect.height() - s
tartRect.height())); | 136 normalized.set_y((startRect.y() - targetRect.y()) / (targetRect.height() - s
tartRect.height())); |
| 136 m_targetAnchor = m_targetScrollOffset + denormalizeToViewport(normalized, vi
ewportSizeAtScale(m_targetPageScaleFactor)); | 137 m_targetAnchor = m_targetScrollOffset + denormalizeToViewport(normalized, vi
ewportSizeAtScale(m_targetPageScaleFactor)); |
| 137 } | 138 } |
| 138 | 139 |
| 139 void PageScaleAnimation::clampTargetScrollOffset() | 140 void PageScaleAnimation::clampTargetScrollOffset() |
| 140 { | 141 { |
| 141 gfx::Vector2dF maxScrollPosition; | 142 gfx::Vector2dF maxScrollOffset = BottomRight(gfx::RectF(m_rootLayerSize)) -
BottomRight(gfx::RectF(viewportSizeAtScale(m_targetPageScaleFactor))); |
| 142 maxScrollPosition.set_x(m_rootLayerSize.width() - viewportSizeAtScale(m_targ
etPageScaleFactor).width()); | 143 m_targetScrollOffset.ClampToMin(gfx::Vector2dF()); |
| 143 maxScrollPosition.set_y(m_rootLayerSize.height() - viewportSizeAtScale(m_tar
getPageScaleFactor).height()); | 144 m_targetScrollOffset.ClampToMax(maxScrollOffset); |
| 144 m_targetScrollOffset.set_x(std::max<float>(0, m_targetScrollOffset.x())); | |
| 145 m_targetScrollOffset.set_y(std::max<float>(0, m_targetScrollOffset.y())); | |
| 146 m_targetScrollOffset.set_x(std::min<float>(maxScrollPosition.x(), m_targetSc
rollOffset.x())); | |
| 147 m_targetScrollOffset.set_y(std::min<float>(maxScrollPosition.y(), m_targetSc
rollOffset.y())); | |
| 148 } | 145 } |
| 149 | 146 |
| 150 gfx::Vector2dF PageScaleAnimation::scrollOffsetAtTime(double time) const | 147 gfx::Vector2dF PageScaleAnimation::scrollOffsetAtTime(double time) const |
| 151 { | 148 { |
| 152 return scrollOffsetAt(interpAtTime(time)); | 149 return scrollOffsetAt(interpAtTime(time)); |
| 153 } | 150 } |
| 154 | 151 |
| 155 float PageScaleAnimation::pageScaleFactorAtTime(double time) const | 152 float PageScaleAnimation::pageScaleFactorAtTime(double time) const |
| 156 { | 153 { |
| 157 return pageScaleFactorAt(interpAtTime(time)); | 154 return pageScaleFactorAt(interpAtTime(time)); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 | 209 |
| 213 // Linearly interpolate the magnitude in log scale. | 210 // Linearly interpolate the magnitude in log scale. |
| 214 float diff = m_targetPageScaleFactor / m_startPageScaleFactor; | 211 float diff = m_targetPageScaleFactor / m_startPageScaleFactor; |
| 215 float logDiff = log(diff); | 212 float logDiff = log(diff); |
| 216 logDiff *= interp; | 213 logDiff *= interp; |
| 217 diff = exp(logDiff); | 214 diff = exp(logDiff); |
| 218 return m_startPageScaleFactor * diff; | 215 return m_startPageScaleFactor * diff; |
| 219 } | 216 } |
| 220 | 217 |
| 221 } // namespace cc | 218 } // namespace cc |
| OLD | NEW |