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

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

Issue 134443003: Implement CSSOM Smooth Scroll API (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 5 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/dom/Element.h ('k') | Source/core/frame/FrameView.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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. All rights reserved. 7 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc. All rights reserved.
8 * (C) 2007 Eric Seidel (eric@webkit.org) 8 * (C) 2007 Eric Seidel (eric@webkit.org)
9 * 9 *
10 * This library is free software; you can redistribute it and/or 10 * This library is free software; you can redistribute it and/or
(...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after
675 675
676 if (FrameView* view = document().view()) { 676 if (FrameView* view = document().view()) {
677 if (RenderView* renderView = document().renderView()) 677 if (RenderView* renderView = document().renderView())
678 return adjustDoubleForAbsoluteZoom(view->scrollY(), *renderView) ; 678 return adjustDoubleForAbsoluteZoom(view->scrollY(), *renderView) ;
679 } 679 }
680 } 680 }
681 681
682 return 0; 682 return 0;
683 } 683 }
684 684
685 void Element::setScrollLeft(int newLeft) 685 void Element::setScrollLeftInternal(int newLeft, ScrollBehavior scrollBehavior)
686 { 686 {
687 document().updateLayoutIgnorePendingStylesheets(); 687 document().updateLayoutIgnorePendingStylesheets();
688 688
689 if (document().documentElement() != this) { 689 if (document().documentElement() != this) {
690 if (RenderBox* rend = renderBox()) 690 if (RenderBox* rend = renderBox())
691 rend->setScrollLeft(roundf(newLeft * rend->style()->effectiveZoom()) ); 691 rend->setScrollLeft(roundf(newLeft * rend->style()->effectiveZoom()) , scrollBehavior);
692 return; 692 return;
693 } 693 }
694 694
695 if (RuntimeEnabledFeatures::scrollTopLeftInteropEnabled()) { 695 if (RuntimeEnabledFeatures::scrollTopLeftInteropEnabled()) {
696 if (document().inQuirksMode()) 696 if (document().inQuirksMode())
697 return; 697 return;
698 698
699 LocalFrame* frame = document().frame(); 699 LocalFrame* frame = document().frame();
700 if (!frame) 700 if (!frame)
701 return; 701 return;
702 FrameView* view = frame->view(); 702 FrameView* view = frame->view();
703 if (!view) 703 if (!view)
704 return; 704 return;
705 705
706 view->setScrollPosition(IntPoint(roundf(newLeft * frame->pageZoomFactor( )), view->scrollY())); 706 view->setScrollPosition(IntPoint(roundf(newLeft * frame->pageZoomFactor( )), view->scrollY()), scrollBehavior);
707 } 707 }
708 } 708 }
709 709
710 void Element::setScrollLeft(const Dictionary& scrollOptionsHorizontal, Exception State& exceptionState) 710 void Element::setScrollLeft(const Dictionary& scrollOptionsHorizontal, Exception State& exceptionState)
711 { 711 {
712 String scrollBehaviorString; 712 String scrollBehaviorString;
713 ScrollBehavior scrollBehavior = ScrollBehaviorAuto; 713 ScrollBehavior scrollBehavior = ScrollBehaviorAuto;
714 if (DictionaryHelper::get(scrollOptionsHorizontal, "behavior", scrollBehavio rString)) { 714 if (DictionaryHelper::get(scrollOptionsHorizontal, "behavior", scrollBehavio rString)) {
715 if (!ScrollableArea::scrollBehaviorFromString(scrollBehaviorString, scro llBehavior)) { 715 if (!ScrollableArea::scrollBehaviorFromString(scrollBehaviorString, scro llBehavior)) {
716 exceptionState.throwTypeError("The ScrollBehavior provided is invali d."); 716 exceptionState.throwTypeError("The ScrollBehavior provided is invali d.");
717 return; 717 return;
718 } 718 }
719 } 719 }
720 720
721 int position; 721 int position;
722 if (!DictionaryHelper::get(scrollOptionsHorizontal, "x", position)) { 722 if (!DictionaryHelper::get(scrollOptionsHorizontal, "x", position)) {
723 exceptionState.throwTypeError("ScrollOptionsHorizontal must include an ' x' member."); 723 exceptionState.throwTypeError("ScrollOptionsHorizontal must include an ' x' member.");
724 return; 724 return;
725 } 725 }
726 726
727 // FIXME: Use scrollBehavior to decide whether to scroll smoothly or instant ly. 727 setScrollLeft(position, scrollBehavior);
728 setScrollLeft(position);
729 } 728 }
730 729
731 void Element::setScrollTop(int newTop) 730 void Element::setScrollTopInternal(int newTop, ScrollBehavior scrollBehavior)
732 { 731 {
733 document().updateLayoutIgnorePendingStylesheets(); 732 document().updateLayoutIgnorePendingStylesheets();
734 733
735 if (document().documentElement() != this) { 734 if (document().documentElement() != this) {
736 if (RenderBox* rend = renderBox()) 735 if (RenderBox* rend = renderBox())
737 rend->setScrollTop(roundf(newTop * rend->style()->effectiveZoom())); 736 rend->setScrollTop(roundf(newTop * rend->style()->effectiveZoom()), scrollBehavior);
738 return; 737 return;
739 } 738 }
740 739
741 if (RuntimeEnabledFeatures::scrollTopLeftInteropEnabled()) { 740 if (RuntimeEnabledFeatures::scrollTopLeftInteropEnabled()) {
742 if (document().inQuirksMode()) 741 if (document().inQuirksMode())
743 return; 742 return;
744 743
745 LocalFrame* frame = document().frame(); 744 LocalFrame* frame = document().frame();
746 if (!frame) 745 if (!frame)
747 return; 746 return;
748 FrameView* view = frame->view(); 747 FrameView* view = frame->view();
749 if (!view) 748 if (!view)
750 return; 749 return;
751 750
752 view->setScrollPosition(IntPoint(view->scrollX(), roundf(newTop * frame- >pageZoomFactor()))); 751 view->setScrollPosition(IntPoint(view->scrollX(), roundf(newTop * frame- >pageZoomFactor())), scrollBehavior);
753 } 752 }
754 } 753 }
755 754
756 void Element::setScrollTop(const Dictionary& scrollOptionsVertical, ExceptionSta te& exceptionState) 755 void Element::setScrollTop(const Dictionary& scrollOptionsVertical, ExceptionSta te& exceptionState)
757 { 756 {
758 String scrollBehaviorString; 757 String scrollBehaviorString;
759 ScrollBehavior scrollBehavior = ScrollBehaviorAuto; 758 ScrollBehavior scrollBehavior = ScrollBehaviorAuto;
760 if (DictionaryHelper::get(scrollOptionsVertical, "behavior", scrollBehaviorS tring)) { 759 if (DictionaryHelper::get(scrollOptionsVertical, "behavior", scrollBehaviorS tring)) {
761 if (!ScrollableArea::scrollBehaviorFromString(scrollBehaviorString, scro llBehavior)) { 760 if (!ScrollableArea::scrollBehaviorFromString(scrollBehaviorString, scro llBehavior)) {
762 exceptionState.throwTypeError("The ScrollBehavior provided is invali d."); 761 exceptionState.throwTypeError("The ScrollBehavior provided is invali d.");
763 return; 762 return;
764 } 763 }
765 } 764 }
766 765
767 int position; 766 int position;
768 if (!DictionaryHelper::get(scrollOptionsVertical, "y", position)) { 767 if (!DictionaryHelper::get(scrollOptionsVertical, "y", position)) {
769 exceptionState.throwTypeError("ScrollOptionsVertical must include a 'y' member."); 768 exceptionState.throwTypeError("ScrollOptionsVertical must include a 'y' member.");
770 return; 769 return;
771 } 770 }
772 771
773 // FIXME: Use scrollBehavior to decide whether to scroll smoothly or instant ly. 772 setScrollTop(position, scrollBehavior);
774 setScrollTop(position);
775 } 773 }
776 774
777 int Element::scrollWidth() 775 int Element::scrollWidth()
778 { 776 {
779 document().updateLayoutIgnorePendingStylesheets(); 777 document().updateLayoutIgnorePendingStylesheets();
780 if (RenderBox* rend = renderBox()) 778 if (RenderBox* rend = renderBox())
781 return adjustLayoutUnitForAbsoluteZoom(rend->scrollWidth(), *rend).toDou ble(); 779 return adjustLayoutUnitForAbsoluteZoom(rend->scrollWidth(), *rend).toDou ble();
782 return 0; 780 return 0;
783 } 781 }
784 782
(...skipping 2568 matching lines...) Expand 10 before | Expand all | Expand 10 after
3353 3351
3354 void Element::trace(Visitor* visitor) 3352 void Element::trace(Visitor* visitor)
3355 { 3353 {
3356 if (hasRareData()) 3354 if (hasRareData())
3357 visitor->trace(elementRareData()); 3355 visitor->trace(elementRareData());
3358 visitor->trace(m_elementData); 3356 visitor->trace(m_elementData);
3359 ContainerNode::trace(visitor); 3357 ContainerNode::trace(visitor);
3360 } 3358 }
3361 3359
3362 } // namespace WebCore 3360 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/dom/Element.h ('k') | Source/core/frame/FrameView.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698