コード例 #1
0
bool VisualViewport::didSetScaleOrLocation(float scale,
                                           const FloatPoint& location) {
  if (!mainFrame())
    return false;

  bool valuesChanged = false;

  if (scale != m_scale) {
    m_scale = scale;
    valuesChanged = true;
    frameHost().chromeClient().pageScaleFactorChanged();
    enqueueResizeEvent();
  }

  ScrollOffset clampedOffset = clampScrollOffset(toScrollOffset(location));

  if (clampedOffset != m_offset) {
    m_offset = clampedOffset;
    scrollAnimator().setCurrentOffset(m_offset);

    // SVG runs with accelerated compositing disabled so no
    // ScrollingCoordinator.
    if (ScrollingCoordinator* coordinator =
            frameHost().page().scrollingCoordinator())
      coordinator->scrollableAreaScrollLayerDidChange(this);

    if (!frameHost().settings().inertVisualViewport()) {
      if (Document* document = mainFrame()->document())
        document->enqueueScrollEventForNode(document);
    }

    enqueueScrollEvent();

    mainFrame()->view()->didChangeScrollOffset();
    valuesChanged = true;
  }

  if (!valuesChanged)
    return false;

  InspectorInstrumentation::didUpdateLayout(mainFrame());
  mainFrame()->loader().saveScrollState();

  clampToBoundaries();

  return true;
}
コード例 #2
0
void RotationViewportAnchor::restoreToAnchor() {
  float newPageScaleFactor =
      m_oldPageScaleFactor / m_oldMinimumPageScaleFactor *
      m_pageScaleConstraintsSet.finalConstraints().minimumScale;
  newPageScaleFactor =
      m_pageScaleConstraintsSet.finalConstraints().clampToConstraints(
          newPageScaleFactor);

  FloatSize visualViewportSize(m_visualViewport->size());
  visualViewportSize.scale(1 / newPageScaleFactor);

  IntPoint mainFrameOrigin;
  FloatPoint visualViewportOrigin;

  computeOrigins(visualViewportSize, mainFrameOrigin, visualViewportOrigin);

  layoutViewport().setScrollOffset(toScrollOffset(mainFrameOrigin),
                                   ProgrammaticScroll);

  // Set scale before location, since location can be clamped on setting scale.
  m_visualViewport->setScale(newPageScaleFactor);
  m_visualViewport->setLocation(visualViewportOrigin);
}
コード例 #3
0
ファイル: WebHistoryItem.cpp プロジェクト: mirror/chromium
void WebHistoryItem::setVisualViewportScrollOffset(
    const WebFloatPoint& scrollOffset) {
  m_private->setVisualViewportScrollOffset(toScrollOffset(scrollOffset));
}