Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(80)

Side by Side Diff: third_party/WebKit/Source/core/dom/Element.cpp

Issue 2387883002: Use float for scroll offset. (Closed)
Patch Set: Fix README.md Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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) 2001 Peter Kelly (pmk@post.com) 4 * (C) 2001 Peter Kelly (pmk@post.com)
5 * (C) 2001 Dirk Mueller (mueller@kde.org) 5 * (C) 2001 Dirk Mueller (mueller@kde.org)
6 * (C) 2007 David Smith (catfish.man@gmail.com) 6 * (C) 2007 David Smith (catfish.man@gmail.com)
7 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc. 7 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc.
8 * All rights reserved. 8 * All rights reserved.
9 * (C) 2007 Eric Seidel (eric@webkit.org) 9 * (C) 2007 Eric Seidel (eric@webkit.org)
10 * 10 *
(...skipping 901 matching lines...) Expand 10 before | Expand all | Expand 10 after
912 double top = 912 double top =
913 scrollToOptions.hasTop() 913 scrollToOptions.hasTop()
914 ? ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.top()) 914 ? ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.top())
915 : 0.0; 915 : 0.0;
916 916
917 ScrollBehavior scrollBehavior = ScrollBehaviorAuto; 917 ScrollBehavior scrollBehavior = ScrollBehaviorAuto;
918 ScrollableArea::scrollBehaviorFromString(scrollToOptions.behavior(), 918 ScrollableArea::scrollBehaviorFromString(scrollToOptions.behavior(),
919 scrollBehavior); 919 scrollBehavior);
920 LayoutBox* box = layoutBox(); 920 LayoutBox* box = layoutBox();
921 if (box) { 921 if (box) {
922 double currentScaledLeft = box->scrollLeft(); 922 float currentScaledLeft = box->scrollLeft().toFloat();
923 double currentScaledTop = box->scrollTop(); 923 float currentScaledTop = box->scrollTop().toFloat();
924 double newScaledLeft = 924 float newScaledLeft =
925 left * box->style()->effectiveZoom() + currentScaledLeft; 925 left * box->style()->effectiveZoom() + currentScaledLeft;
926 double newScaledTop = 926 float newScaledTop = top * box->style()->effectiveZoom() + currentScaledTop;
927 top * box->style()->effectiveZoom() + currentScaledTop; 927 box->scrollToPosition(FloatPoint(newScaledLeft, newScaledTop),
928 box->scrollToOffset(DoubleSize(newScaledLeft, newScaledTop), 928 scrollBehavior);
929 scrollBehavior);
930 } 929 }
931 } 930 }
932 931
933 void Element::scrollLayoutBoxTo(const ScrollToOptions& scrollToOptions) { 932 void Element::scrollLayoutBoxTo(const ScrollToOptions& scrollToOptions) {
934 ScrollBehavior scrollBehavior = ScrollBehaviorAuto; 933 ScrollBehavior scrollBehavior = ScrollBehaviorAuto;
935 ScrollableArea::scrollBehaviorFromString(scrollToOptions.behavior(), 934 ScrollableArea::scrollBehaviorFromString(scrollToOptions.behavior(),
936 scrollBehavior); 935 scrollBehavior);
937 936
938 LayoutBox* box = layoutBox(); 937 LayoutBox* box = layoutBox();
939 if (box) { 938 if (box) {
940 double scaledLeft = box->scrollLeft(); 939 float scaledLeft = box->scrollLeft().toFloat();
941 double scaledTop = box->scrollTop(); 940 float scaledTop = box->scrollTop().toFloat();
942 if (scrollToOptions.hasLeft()) 941 if (scrollToOptions.hasLeft())
943 scaledLeft = 942 scaledLeft =
944 ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.left()) * 943 ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.left()) *
945 box->style()->effectiveZoom(); 944 box->style()->effectiveZoom();
946 if (scrollToOptions.hasTop()) 945 if (scrollToOptions.hasTop())
947 scaledTop = 946 scaledTop =
948 ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.top()) * 947 ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.top()) *
949 box->style()->effectiveZoom(); 948 box->style()->effectiveZoom();
950 box->scrollToOffset(DoubleSize(scaledLeft, scaledTop), scrollBehavior); 949 box->scrollToPosition(FloatPoint(scaledLeft, scaledTop), scrollBehavior);
951 } 950 }
952 } 951 }
953 952
954 void Element::scrollFrameBy(const ScrollToOptions& scrollToOptions) { 953 void Element::scrollFrameBy(const ScrollToOptions& scrollToOptions) {
955 double left = 954 double left =
956 scrollToOptions.hasLeft() 955 scrollToOptions.hasLeft()
957 ? ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.left()) 956 ? ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.left())
958 : 0.0; 957 : 0.0;
959 double top = 958 double top =
960 scrollToOptions.hasTop() 959 scrollToOptions.hasTop()
961 ? ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.top()) 960 ? ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.top())
962 : 0.0; 961 : 0.0;
963 962
964 ScrollBehavior scrollBehavior = ScrollBehaviorAuto; 963 ScrollBehavior scrollBehavior = ScrollBehaviorAuto;
965 ScrollableArea::scrollBehaviorFromString(scrollToOptions.behavior(), 964 ScrollableArea::scrollBehaviorFromString(scrollToOptions.behavior(),
966 scrollBehavior); 965 scrollBehavior);
967 LocalFrame* frame = document().frame(); 966 LocalFrame* frame = document().frame();
968 if (!frame) 967 if (!frame)
969 return; 968 return;
970 ScrollableArea* viewport = 969 ScrollableArea* viewport =
971 frame->view() ? frame->view()->getScrollableArea() : 0; 970 frame->view() ? frame->view()->getScrollableArea() : 0;
972 if (!viewport) 971 if (!viewport)
973 return; 972 return;
974 973
975 double newScaledLeft = 974 float newScaledLeft =
976 left * frame->pageZoomFactor() + viewport->scrollPositionDouble().x(); 975 left * frame->pageZoomFactor() + viewport->scrollOffset().width();
977 double newScaledTop = 976 float newScaledTop =
978 top * frame->pageZoomFactor() + viewport->scrollPositionDouble().y(); 977 top * frame->pageZoomFactor() + viewport->scrollOffset().height();
979 viewport->setScrollPosition(DoublePoint(newScaledLeft, newScaledTop), 978 viewport->setScrollOffset(ScrollOffset(newScaledLeft, newScaledTop),
980 ProgrammaticScroll, scrollBehavior); 979 ProgrammaticScroll, scrollBehavior);
981 } 980 }
982 981
983 void Element::scrollFrameTo(const ScrollToOptions& scrollToOptions) { 982 void Element::scrollFrameTo(const ScrollToOptions& scrollToOptions) {
984 ScrollBehavior scrollBehavior = ScrollBehaviorAuto; 983 ScrollBehavior scrollBehavior = ScrollBehaviorAuto;
985 ScrollableArea::scrollBehaviorFromString(scrollToOptions.behavior(), 984 ScrollableArea::scrollBehaviorFromString(scrollToOptions.behavior(),
986 scrollBehavior); 985 scrollBehavior);
987 LocalFrame* frame = document().frame(); 986 LocalFrame* frame = document().frame();
988 if (!frame) 987 if (!frame)
989 return; 988 return;
990 ScrollableArea* viewport = 989 ScrollableArea* viewport =
991 frame->view() ? frame->view()->getScrollableArea() : 0; 990 frame->view() ? frame->view()->getScrollableArea() : 0;
992 if (!viewport) 991 if (!viewport)
993 return; 992 return;
994 993
995 double scaledLeft = viewport->scrollPositionDouble().x(); 994 float scaledLeft = viewport->scrollOffset().width();
996 double scaledTop = viewport->scrollPositionDouble().y(); 995 float scaledTop = viewport->scrollOffset().height();
997 if (scrollToOptions.hasLeft()) 996 if (scrollToOptions.hasLeft())
998 scaledLeft = 997 scaledLeft =
999 ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.left()) * 998 ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.left()) *
1000 frame->pageZoomFactor(); 999 frame->pageZoomFactor();
1001 if (scrollToOptions.hasTop()) 1000 if (scrollToOptions.hasTop())
1002 scaledTop = 1001 scaledTop =
1003 ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.top()) * 1002 ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.top()) *
1004 frame->pageZoomFactor(); 1003 frame->pageZoomFactor();
1005 viewport->setScrollPosition(DoublePoint(scaledLeft, scaledTop), 1004 viewport->setScrollOffset(ScrollOffset(scaledLeft, scaledTop),
1006 ProgrammaticScroll, scrollBehavior); 1005 ProgrammaticScroll, scrollBehavior);
1007 } 1006 }
1008 1007
1009 bool Element::hasCompositorProxy() const { 1008 bool Element::hasCompositorProxy() const {
1010 return hasRareData() && elementRareData()->proxiedPropertyCounts(); 1009 return hasRareData() && elementRareData()->proxiedPropertyCounts();
1011 } 1010 }
1012 1011
1013 void Element::incrementCompositorProxiedProperties(uint32_t mutableProperties) { 1012 void Element::incrementCompositorProxiedProperties(uint32_t mutableProperties) {
1014 ElementRareData& rareData = ensureElementRareData(); 1013 ElementRareData& rareData = ensureElementRareData();
1015 if (!rareData.proxiedPropertyCounts()) 1014 if (!rareData.proxiedPropertyCounts())
1016 setNeedsStyleRecalc(LocalStyleChange, 1015 setNeedsStyleRecalc(LocalStyleChange,
(...skipping 585 matching lines...) Expand 10 before | Expand all | Expand 10 after
1602 false); 1601 false);
1603 } 1602 }
1604 } 1603 }
1605 1604
1606 if (Fullscreen* fullscreen = Fullscreen::fromIfExists(document())) 1605 if (Fullscreen* fullscreen = Fullscreen::fromIfExists(document()))
1607 fullscreen->elementRemoved(*this); 1606 fullscreen->elementRemoved(*this);
1608 1607
1609 if (document().page()) 1608 if (document().page())
1610 document().page()->pointerLockController().elementRemoved(this); 1609 document().page()->pointerLockController().elementRemoved(this);
1611 1610
1612 setSavedLayerScrollOffset(IntSize()); 1611 setSavedLayerScrollOffset(ScrollOffset());
1613 1612
1614 if (insertionPoint->isInTreeScope() && treeScope() == document()) { 1613 if (insertionPoint->isInTreeScope() && treeScope() == document()) {
1615 const AtomicString& idValue = getIdAttribute(); 1614 const AtomicString& idValue = getIdAttribute();
1616 if (!idValue.isNull()) 1615 if (!idValue.isNull())
1617 updateId(insertionPoint->treeScope(), idValue, nullAtom); 1616 updateId(insertionPoint->treeScope(), idValue, nullAtom);
1618 1617
1619 const AtomicString& nameValue = getNameAttribute(); 1618 const AtomicString& nameValue = getNameAttribute();
1620 if (!nameValue.isNull()) 1619 if (!nameValue.isNull())
1621 updateName(nameValue, nullAtom); 1620 updateName(nameValue, nullAtom);
1622 } 1621 }
(...skipping 1986 matching lines...) Expand 10 before | Expand all | Expand 10 after
3609 toHTMLDocument(document()).removeExtraNamedItem(oldId); 3608 toHTMLDocument(document()).removeExtraNamedItem(oldId);
3610 3609
3611 if (!newId.isEmpty()) 3610 if (!newId.isEmpty())
3612 toHTMLDocument(document()).addExtraNamedItem(newId); 3611 toHTMLDocument(document()).addExtraNamedItem(newId);
3613 } 3612 }
3614 3613
3615 void Element::scheduleSVGFilterLayerUpdateHack() { 3614 void Element::scheduleSVGFilterLayerUpdateHack() {
3616 document().scheduleSVGFilterLayerUpdateHack(*this); 3615 document().scheduleSVGFilterLayerUpdateHack(*this);
3617 } 3616 }
3618 3617
3619 IntSize Element::savedLayerScrollOffset() const { 3618 ScrollOffset Element::savedLayerScrollOffset() const {
3620 return hasRareData() ? elementRareData()->savedLayerScrollOffset() 3619 return hasRareData() ? elementRareData()->savedLayerScrollOffset()
3621 : IntSize(); 3620 : ScrollOffset();
3622 } 3621 }
3623 3622
3624 void Element::setSavedLayerScrollOffset(const IntSize& size) { 3623 void Element::setSavedLayerScrollOffset(const ScrollOffset& size) {
3625 if (size.isZero() && !hasRareData()) 3624 if (size.isZero() && !hasRareData())
3626 return; 3625 return;
3627 ensureElementRareData().setSavedLayerScrollOffset(size); 3626 ensureElementRareData().setSavedLayerScrollOffset(size);
3628 } 3627 }
3629 3628
3630 Attr* Element::attrIfExists(const QualifiedName& name) { 3629 Attr* Element::attrIfExists(const QualifiedName& name) {
3631 if (AttrNodeList* attrNodeList = this->attrNodeList()) { 3630 if (AttrNodeList* attrNodeList = this->attrNodeList()) {
3632 bool shouldIgnoreCase = shouldIgnoreAttributeCase(); 3631 bool shouldIgnoreCase = shouldIgnoreAttributeCase();
3633 for (const auto& attr : *attrNodeList) { 3632 for (const auto& attr : *attrNodeList) {
3634 if (attr->getQualifiedName().matchesPossiblyIgnoringCase( 3633 if (attr->getQualifiedName().matchesPossiblyIgnoringCase(
(...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after
4083 } 4082 }
4084 4083
4085 DEFINE_TRACE_WRAPPERS(Element) { 4084 DEFINE_TRACE_WRAPPERS(Element) {
4086 if (hasRareData()) { 4085 if (hasRareData()) {
4087 visitor->traceWrappers(elementRareData()); 4086 visitor->traceWrappers(elementRareData());
4088 } 4087 }
4089 ContainerNode::traceWrappers(visitor); 4088 ContainerNode::traceWrappers(visitor);
4090 } 4089 }
4091 4090
4092 } // namespace blink 4091 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/dom/Element.h ('k') | third_party/WebKit/Source/core/dom/ElementRareData.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698