OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) | 4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) |
5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) | 5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) |
6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv
ed. | 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv
ed. |
7 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. | 7 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. |
8 * | 8 * |
9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
(...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
558 } | 558 } |
559 return false; | 559 return false; |
560 } | 560 } |
561 | 561 |
562 void LayoutBox::scrollRectToVisible(const LayoutRect& rect, const ScrollAlignmen
t& alignX, const ScrollAlignment& alignY, ScrollType scrollType, bool makeVisibl
eInVisualViewport) | 562 void LayoutBox::scrollRectToVisible(const LayoutRect& rect, const ScrollAlignmen
t& alignX, const ScrollAlignment& alignY, ScrollType scrollType, bool makeVisibl
eInVisualViewport) |
563 { | 563 { |
564 ASSERT(scrollType == ProgrammaticScroll || scrollType == UserScroll); | 564 ASSERT(scrollType == ProgrammaticScroll || scrollType == UserScroll); |
565 // Presumably the same issue as in setScrollTop. See crbug.com/343132. | 565 // Presumably the same issue as in setScrollTop. See crbug.com/343132. |
566 DisableCompositingQueryAsserts disabler; | 566 DisableCompositingQueryAsserts disabler; |
567 | 567 |
| 568 LayoutRect rectToScroll = rect; |
| 569 if (rectToScroll.width() <= 0) |
| 570 rectToScroll.setWidth(LayoutUnit(1)); |
| 571 if (rectToScroll.height() <= 0) |
| 572 rectToScroll.setHeight(LayoutUnit(1)); |
| 573 |
568 LayoutBox* parentBox = nullptr; | 574 LayoutBox* parentBox = nullptr; |
569 LayoutRect newRect = rect; | 575 LayoutRect newRect = rectToScroll; |
570 | 576 |
571 bool restrictedByLineClamp = false; | 577 bool restrictedByLineClamp = false; |
572 if (parent()) { | 578 if (parent()) { |
573 parentBox = parent()->enclosingBox(); | 579 parentBox = parent()->enclosingBox(); |
574 restrictedByLineClamp = !parent()->style()->lineClamp().isNone(); | 580 restrictedByLineClamp = !parent()->style()->lineClamp().isNone(); |
575 } | 581 } |
576 | 582 |
577 if (hasOverflowClip() && !restrictedByLineClamp) { | 583 if (hasOverflowClip() && !restrictedByLineClamp) { |
578 // Don't scroll to reveal an overflow layer that is restricted by the -w
ebkit-line-clamp property. | 584 // Don't scroll to reveal an overflow layer that is restricted by the -w
ebkit-line-clamp property. |
579 // This will prevent us from revealing text hidden by the slider in Safa
ri RSS. | 585 // This will prevent us from revealing text hidden by the slider in Safa
ri RSS. |
580 newRect = getScrollableArea()->scrollIntoView(rect, alignX, alignY, scro
llType); | 586 newRect = getScrollableArea()->scrollIntoView(rectToScroll, alignX, alig
nY, scrollType); |
581 if (newRect.isEmpty()) | 587 if (newRect.isEmpty()) |
582 return; | 588 return; |
583 } else if (!parentBox && canBeProgramaticallyScrolled()) { | 589 } else if (!parentBox && canBeProgramaticallyScrolled()) { |
584 if (FrameView* frameView = this->frameView()) { | 590 if (FrameView* frameView = this->frameView()) { |
585 HTMLFrameOwnerElement* ownerElement = document().localOwner(); | 591 HTMLFrameOwnerElement* ownerElement = document().localOwner(); |
586 if (!isDisallowedAutoscroll(ownerElement, frameView)) { | 592 if (!isDisallowedAutoscroll(ownerElement, frameView)) { |
587 if (makeVisibleInVisualViewport) { | 593 if (makeVisibleInVisualViewport) { |
588 frameView->getScrollableArea()->scrollIntoView(rect, alignX,
alignY, scrollType); | 594 frameView->getScrollableArea()->scrollIntoView(rectToScroll,
alignX, alignY, scrollType); |
589 } else { | 595 } else { |
590 frameView->layoutViewportScrollableArea()->scrollIntoView(re
ct, alignX, alignY, scrollType); | 596 frameView->layoutViewportScrollableArea()->scrollIntoView(re
ctToScroll, alignX, alignY, scrollType); |
591 } | 597 } |
592 if (ownerElement && ownerElement->layoutObject()) { | 598 if (ownerElement && ownerElement->layoutObject()) { |
593 if (frameView->safeToPropagateScrollToParent()) { | 599 if (frameView->safeToPropagateScrollToParent()) { |
594 parentBox = ownerElement->layoutObject()->enclosingBox()
; | 600 parentBox = ownerElement->layoutObject()->enclosingBox()
; |
595 LayoutView* parentView = ownerElement->layoutObject()->v
iew(); | 601 LayoutView* parentView = ownerElement->layoutObject()->v
iew(); |
596 newRect = enclosingLayoutRect(view()->localToAncestorQua
d(FloatRect(rect), parentView, UseTransforms | TraverseDocumentBoundaries).bound
ingBox()); | 602 newRect = enclosingLayoutRect(view()->localToAncestorQua
d(FloatRect(rectToScroll), parentView, UseTransforms | TraverseDocumentBoundarie
s).boundingBox()); |
597 } else { | 603 } else { |
598 parentBox = nullptr; | 604 parentBox = nullptr; |
599 } | 605 } |
600 } | 606 } |
601 } | 607 } |
602 } | 608 } |
603 } | 609 } |
604 | 610 |
605 // If we are fixed-position, it is useless to scroll the parent. | 611 // If we are fixed-position, it is useless to scroll the parent. |
606 if (hasLayer() && layer()->scrollsWithViewport()) | 612 if (hasLayer() && layer()->scrollsWithViewport()) |
(...skipping 4243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4850 m_rareData->m_snapAreas->remove(&snapArea); | 4856 m_rareData->m_snapAreas->remove(&snapArea); |
4851 } | 4857 } |
4852 } | 4858 } |
4853 | 4859 |
4854 SnapAreaSet* LayoutBox::snapAreas() const | 4860 SnapAreaSet* LayoutBox::snapAreas() const |
4855 { | 4861 { |
4856 return m_rareData ? m_rareData->m_snapAreas.get() : nullptr; | 4862 return m_rareData ? m_rareData->m_snapAreas.get() : nullptr; |
4857 } | 4863 } |
4858 | 4864 |
4859 } // namespace blink | 4865 } // namespace blink |
OLD | NEW |