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

Side by Side Diff: sky/engine/core/rendering/compositing/RenderLayerCompositor.cpp

Issue 646273006: Get rid of ScrollView. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: merge to ToT Created 6 years, 1 month 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) 2009, 2010 Apple Inc. All rights reserved. 2 * Copyright (C) 2009, 2010 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 }; 400 };
401 401
402 void RenderLayerCompositor::frameViewDidScroll() 402 void RenderLayerCompositor::frameViewDidScroll()
403 { 403 {
404 FrameView* frameView = m_renderView.frameView(); 404 FrameView* frameView = m_renderView.frameView();
405 IntPoint scrollPosition = frameView->scrollPosition(); 405 IntPoint scrollPosition = frameView->scrollPosition();
406 406
407 if (!m_scrollLayer) 407 if (!m_scrollLayer)
408 return; 408 return;
409 409
410 bool scrollingCoordinatorHandlesOffset = false;
411 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordinator( )) {
412 scrollingCoordinatorHandlesOffset = scrollingCoordinator->scrollableArea ScrollLayerDidChange(frameView);
413 }
414
415 // Scroll position = scroll minimum + scroll offset. Adjust the layer's 410 // Scroll position = scroll minimum + scroll offset. Adjust the layer's
416 // position to handle whatever the scroll coordinator isn't handling. 411 // position to handle whatever the scroll coordinator isn't handling.
417 // The minimum scroll position is non-zero for RTL pages with overflow. 412 // The minimum scroll position is non-zero for RTL pages with overflow.
418 if (scrollingCoordinatorHandlesOffset) 413 m_scrollLayer->setPosition(-scrollPosition);
419 m_scrollLayer->setPosition(-frameView->minimumScrollPosition());
420 else
421 m_scrollLayer->setPosition(-scrollPosition);
422 414
423 415
424 Platform::current()->histogramEnumeration("Renderer.AcceleratedFixedRootBack ground", 416 Platform::current()->histogramEnumeration("Renderer.AcceleratedFixedRootBack ground",
425 ScrolledMainFrameBucket, 417 ScrolledMainFrameBucket,
426 AcceleratedFixedRootBackgroundHistogramMax); 418 AcceleratedFixedRootBackgroundHistogramMax);
427 } 419 }
428 420
429 void RenderLayerCompositor::frameViewScrollbarsExistenceDidChange() 421 void RenderLayerCompositor::frameViewScrollbarsExistenceDidChange()
430 { 422 {
431 if (m_containerLayer) 423 if (m_containerLayer)
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
632 } 624 }
633 625
634 // If an element has negative z-index children, those children render in front o f the 626 // If an element has negative z-index children, those children render in front o f the
635 // layer background, so we need an extra 'contents' layer for the foreground of the layer 627 // layer background, so we need an extra 'contents' layer for the foreground of the layer
636 // object. 628 // object.
637 bool RenderLayerCompositor::needsContentsCompositingLayer(const RenderLayer* lay er) const 629 bool RenderLayerCompositor::needsContentsCompositingLayer(const RenderLayer* lay er) const
638 { 630 {
639 return layer->stackingNode()->hasNegativeZOrderList(); 631 return layer->stackingNode()->hasNegativeZOrderList();
640 } 632 }
641 633
642 static void paintScrollbar(Scrollbar* scrollbar, GraphicsContext& context, const IntRect& clip)
643 {
644 if (!scrollbar)
645 return;
646
647 context.save();
648 const IntRect& scrollbarRect = scrollbar->frameRect();
649 context.translate(-scrollbarRect.x(), -scrollbarRect.y());
650 IntRect transformedClip = clip;
651 transformedClip.moveBy(scrollbarRect.location());
652 scrollbar->paint(&context, transformedClip);
653 context.restore();
654 }
655
656 void RenderLayerCompositor::paintContents(const GraphicsLayer* graphicsLayer, Gr aphicsContext& context, GraphicsLayerPaintingPhase, const IntRect& clip) 634 void RenderLayerCompositor::paintContents(const GraphicsLayer* graphicsLayer, Gr aphicsContext& context, GraphicsLayerPaintingPhase, const IntRect& clip)
657 { 635 {
658 if (graphicsLayer == layerForHorizontalScrollbar()) 636 // FIXME(sky): Remove.
659 paintScrollbar(m_renderView.frameView()->horizontalScrollbar(), context, clip);
660 else if (graphicsLayer == layerForVerticalScrollbar())
661 paintScrollbar(m_renderView.frameView()->verticalScrollbar(), context, c lip);
662 else if (graphicsLayer == layerForScrollCorner()) {
663 const IntRect& scrollCorner = m_renderView.frameView()->scrollCornerRect ();
664 context.save();
665 context.translate(-scrollCorner.x(), -scrollCorner.y());
666 IntRect transformedClip = clip;
667 transformedClip.moveBy(scrollCorner.location());
668 m_renderView.frameView()->paintScrollCorner(&context, transformedClip);
669 context.restore();
670 }
671 } 637 }
672 638
673 bool RenderLayerCompositor::supportsFixedRootBackgroundCompositing() const 639 bool RenderLayerCompositor::supportsFixedRootBackgroundCompositing() const
674 { 640 {
675 if (Settings* settings = m_renderView.document().settings()) 641 if (Settings* settings = m_renderView.document().settings())
676 return settings->preferCompositingToLCDTextEnabled(); 642 return settings->preferCompositingToLCDTextEnabled();
677 return false; 643 return false;
678 } 644 }
679 645
680 bool RenderLayerCompositor::needsFixedRootBackgroundLayer(const RenderLayer* lay er) const 646 bool RenderLayerCompositor::needsFixedRootBackgroundLayer(const RenderLayer* lay er) const
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
725 { 691 {
726 ASSERT(lifecycle().state() == DocumentLifecycle::PaintInvalidationClean); 692 ASSERT(lifecycle().state() == DocumentLifecycle::PaintInvalidationClean);
727 m_isTrackingPaintInvalidations = tracksPaintInvalidations; 693 m_isTrackingPaintInvalidations = tracksPaintInvalidations;
728 } 694 }
729 695
730 bool RenderLayerCompositor::isTrackingPaintInvalidations() const 696 bool RenderLayerCompositor::isTrackingPaintInvalidations() const
731 { 697 {
732 return m_isTrackingPaintInvalidations; 698 return m_isTrackingPaintInvalidations;
733 } 699 }
734 700
735 static bool shouldCompositeOverflowControls(FrameView* view)
736 {
737 if (Page* page = view->frame().page()) {
738 if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordina tor())
739 if (scrollingCoordinator->coordinatesScrollingForFrameView(view))
740 return true;
741 }
742
743 return true;
744 }
745
746 bool RenderLayerCompositor::requiresHorizontalScrollbarLayer() const 701 bool RenderLayerCompositor::requiresHorizontalScrollbarLayer() const
747 { 702 {
748 FrameView* view = m_renderView.frameView(); 703 // FIXME(sky): Remove
749 return shouldCompositeOverflowControls(view) && view->horizontalScrollbar(); 704 return false;
750 } 705 }
751 706
752 bool RenderLayerCompositor::requiresVerticalScrollbarLayer() const 707 bool RenderLayerCompositor::requiresVerticalScrollbarLayer() const
753 { 708 {
754 FrameView* view = m_renderView.frameView(); 709 // FIXME(sky): Remove
755 return shouldCompositeOverflowControls(view) && view->verticalScrollbar(); 710 return false;
756 } 711 }
757 712
758 bool RenderLayerCompositor::requiresScrollCornerLayer() const 713 bool RenderLayerCompositor::requiresScrollCornerLayer() const
759 { 714 {
760 FrameView* view = m_renderView.frameView(); 715 // FIXME(sky): Remove
761 return shouldCompositeOverflowControls(view) && view->isScrollCornerVisible( ); 716 return false;
762 } 717 }
763 718
764 void RenderLayerCompositor::updateOverflowControlsLayers() 719 void RenderLayerCompositor::updateOverflowControlsLayers()
765 { 720 {
766 GraphicsLayer* controlsParent = m_rootTransformLayer.get() ? m_rootTransform Layer.get() : m_overflowControlsHostLayer.get(); 721 GraphicsLayer* controlsParent = m_rootTransformLayer.get() ? m_rootTransform Layer.get() : m_overflowControlsHostLayer.get();
767 722
768 if (requiresHorizontalScrollbarLayer()) { 723 if (requiresHorizontalScrollbarLayer()) {
769 if (!m_layerForHorizontalScrollbar) { 724 if (!m_layerForHorizontalScrollbar) {
770 m_layerForHorizontalScrollbar = GraphicsLayer::create(graphicsLayerF actory(), this); 725 m_layerForHorizontalScrollbar = GraphicsLayer::create(graphicsLayerF actory(), this);
771 } 726 }
772 727
773 if (m_layerForHorizontalScrollbar->parent() != controlsParent) { 728 if (m_layerForHorizontalScrollbar->parent() != controlsParent) {
774 controlsParent->addChild(m_layerForHorizontalScrollbar.get()); 729 controlsParent->addChild(m_layerForHorizontalScrollbar.get());
775
776 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoor dinator())
777 scrollingCoordinator->scrollableAreaScrollbarLayerDidChange(m_re nderView.frameView(), HorizontalScrollbar);
778 } 730 }
779 } else if (m_layerForHorizontalScrollbar) { 731 } else if (m_layerForHorizontalScrollbar) {
780 m_layerForHorizontalScrollbar->removeFromParent(); 732 m_layerForHorizontalScrollbar->removeFromParent();
781 m_layerForHorizontalScrollbar = nullptr; 733 m_layerForHorizontalScrollbar = nullptr;
782
783 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordina tor())
784 scrollingCoordinator->scrollableAreaScrollbarLayerDidChange(m_render View.frameView(), HorizontalScrollbar);
785 } 734 }
786 735
787 if (requiresVerticalScrollbarLayer()) { 736 if (requiresVerticalScrollbarLayer()) {
788 if (!m_layerForVerticalScrollbar) { 737 if (!m_layerForVerticalScrollbar) {
789 m_layerForVerticalScrollbar = GraphicsLayer::create(graphicsLayerFac tory(), this); 738 m_layerForVerticalScrollbar = GraphicsLayer::create(graphicsLayerFac tory(), this);
790 } 739 }
791 740
792 if (m_layerForVerticalScrollbar->parent() != controlsParent) { 741 if (m_layerForVerticalScrollbar->parent() != controlsParent) {
793 controlsParent->addChild(m_layerForVerticalScrollbar.get()); 742 controlsParent->addChild(m_layerForVerticalScrollbar.get());
794
795 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoor dinator())
796 scrollingCoordinator->scrollableAreaScrollbarLayerDidChange(m_re nderView.frameView(), VerticalScrollbar);
797 } 743 }
798 } else if (m_layerForVerticalScrollbar) { 744 } else if (m_layerForVerticalScrollbar) {
799 m_layerForVerticalScrollbar->removeFromParent(); 745 m_layerForVerticalScrollbar->removeFromParent();
800 m_layerForVerticalScrollbar = nullptr; 746 m_layerForVerticalScrollbar = nullptr;
801
802 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordina tor())
803 scrollingCoordinator->scrollableAreaScrollbarLayerDidChange(m_render View.frameView(), VerticalScrollbar);
804 } 747 }
805 748
806 if (requiresScrollCornerLayer()) { 749 if (requiresScrollCornerLayer()) {
807 if (!m_layerForScrollCorner) { 750 if (!m_layerForScrollCorner) {
808 m_layerForScrollCorner = GraphicsLayer::create(graphicsLayerFactory( ), this); 751 m_layerForScrollCorner = GraphicsLayer::create(graphicsLayerFactory( ), this);
809 controlsParent->addChild(m_layerForScrollCorner.get()); 752 controlsParent->addChild(m_layerForScrollCorner.get());
810 } 753 }
811 } else if (m_layerForScrollCorner) { 754 } else if (m_layerForScrollCorner) {
812 m_layerForScrollCorner->removeFromParent(); 755 m_layerForScrollCorner->removeFromParent();
813 m_layerForScrollCorner = nullptr; 756 m_layerForScrollCorner = nullptr;
814 } 757 }
815
816 m_renderView.frameView()->positionScrollbarLayers();
817 } 758 }
818 759
819 void RenderLayerCompositor::ensureRootLayer() 760 void RenderLayerCompositor::ensureRootLayer()
820 { 761 {
821 RootLayerAttachment expectedAttachment = RootLayerAttachedViaChromeClient; 762 RootLayerAttachment expectedAttachment = RootLayerAttachedViaChromeClient;
822 if (expectedAttachment == m_rootLayerAttachment) 763 if (expectedAttachment == m_rootLayerAttachment)
823 return; 764 return;
824 765
825 if (!m_rootContentLayer) { 766 if (!m_rootContentLayer) {
826 m_rootContentLayer = GraphicsLayer::create(graphicsLayerFactory(), this) ; 767 m_rootContentLayer = GraphicsLayer::create(graphicsLayerFactory(), this) ;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
871 void RenderLayerCompositor::destroyRootLayer() 812 void RenderLayerCompositor::destroyRootLayer()
872 { 813 {
873 if (!m_rootContentLayer) 814 if (!m_rootContentLayer)
874 return; 815 return;
875 816
876 detachRootLayer(); 817 detachRootLayer();
877 818
878 if (m_layerForHorizontalScrollbar) { 819 if (m_layerForHorizontalScrollbar) {
879 m_layerForHorizontalScrollbar->removeFromParent(); 820 m_layerForHorizontalScrollbar->removeFromParent();
880 m_layerForHorizontalScrollbar = nullptr; 821 m_layerForHorizontalScrollbar = nullptr;
881 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordina tor())
882 scrollingCoordinator->scrollableAreaScrollbarLayerDidChange(m_render View.frameView(), HorizontalScrollbar);
883 if (Scrollbar* horizontalScrollbar = m_renderView.frameView()->verticalS crollbar())
884 m_renderView.frameView()->invalidateScrollbar(horizontalScrollbar, I ntRect(IntPoint(0, 0), horizontalScrollbar->frameRect().size()));
885 } 822 }
886 823
887 if (m_layerForVerticalScrollbar) { 824 if (m_layerForVerticalScrollbar) {
888 m_layerForVerticalScrollbar->removeFromParent(); 825 m_layerForVerticalScrollbar->removeFromParent();
889 m_layerForVerticalScrollbar = nullptr; 826 m_layerForVerticalScrollbar = nullptr;
890 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordina tor())
891 scrollingCoordinator->scrollableAreaScrollbarLayerDidChange(m_render View.frameView(), VerticalScrollbar);
892 if (Scrollbar* verticalScrollbar = m_renderView.frameView()->verticalScr ollbar())
893 m_renderView.frameView()->invalidateScrollbar(verticalScrollbar, Int Rect(IntPoint(0, 0), verticalScrollbar->frameRect().size()));
894 } 827 }
895 828
896 if (m_layerForScrollCorner) { 829 if (m_layerForScrollCorner) {
897 m_layerForScrollCorner = nullptr; 830 m_layerForScrollCorner = nullptr;
898 m_renderView.frameView()->invalidateScrollCorner(m_renderView.frameView( )->scrollCornerRect());
899 } 831 }
900 832
901 if (m_overflowControlsHostLayer) { 833 if (m_overflowControlsHostLayer) {
902 m_overflowControlsHostLayer = nullptr; 834 m_overflowControlsHostLayer = nullptr;
903 m_containerLayer = nullptr; 835 m_containerLayer = nullptr;
904 m_scrollLayer = nullptr; 836 m_scrollLayer = nullptr;
905 } 837 }
906 ASSERT(!m_scrollLayer); 838 ASSERT(!m_scrollLayer);
907 m_rootContentLayer = nullptr; 839 m_rootContentLayer = nullptr;
908 m_rootTransformLayer = nullptr; 840 m_rootTransformLayer = nullptr;
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
1007 } else if (graphicsLayer == m_scrollLayer.get()) { 939 } else if (graphicsLayer == m_scrollLayer.get()) {
1008 name = "LocalFrame Scrolling Layer"; 940 name = "LocalFrame Scrolling Layer";
1009 } else { 941 } else {
1010 ASSERT_NOT_REACHED(); 942 ASSERT_NOT_REACHED();
1011 } 943 }
1012 944
1013 return name; 945 return name;
1014 } 946 }
1015 947
1016 } // namespace blink 948 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698