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

Side by Side Diff: Source/core/rendering/RenderLayer.cpp

Issue 301843002: Store repaint rects in the coordinate space of their backing GraphicsLayer. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Changed name. Created 6 years, 6 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/rendering/RenderLayer.h ('k') | Source/core/rendering/RenderLayerRepainter.cpp » ('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) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved.
3 * 3 *
4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. 4 * Portions are Copyright (C) 1998 Netscape Communications Corporation.
5 * 5 *
6 * Other contributors: 6 * Other contributors:
7 * Robert O'Callahan <roc+@cs.cmu.edu> 7 * Robert O'Callahan <roc+@cs.cmu.edu>
8 * David Baron <dbaron@fas.harvard.edu> 8 * David Baron <dbaron@fas.harvard.edu>
9 * Christian Biesinger <cbiesinger@web.de> 9 * Christian Biesinger <cbiesinger@web.de>
10 * Randall Jesup <rjesup@wgate.com> 10 * Randall Jesup <rjesup@wgate.com>
(...skipping 691 matching lines...) Expand 10 before | Expand all | Expand 10 after
702 for (RenderLayer* curr = parent(); curr; curr = curr->parent()) { 702 for (RenderLayer* curr = parent(); curr; curr = curr->parent()) {
703 if (curr->renderer()->hasColumns()) { 703 if (curr->renderer()->hasColumns()) {
704 m_isPaginated = checkContainingBlockChainForPagination(renderer(), c urr->renderBox()); 704 m_isPaginated = checkContainingBlockChainForPagination(renderer(), c urr->renderBox());
705 return; 705 return;
706 } 706 }
707 if (curr->stackingNode() == ancestorStackingContextNode) 707 if (curr->stackingNode() == ancestorStackingContextNode)
708 return; 708 return;
709 } 709 }
710 } 710 }
711 711
712 void RenderLayer::mapRectToRepaintBacking(const RenderLayerModelObject* repaintC ontainer, LayoutRect& rect) const
713 {
714 if (!repaintContainer->groupedMapping()) {
715 m_renderer->mapRectToRepaintBacking(repaintContainer, rect);
716 return;
717 }
718
719 ASSERT(enclosingTransformedAncestor());
720 ASSERT(enclosingTransformedAncestor()->renderer());
721
722 // FIXME: this defensive code should not have to exist. None of these pointe rs should ever be 0. See crbug.com/370410.
723 RenderLayerModelObject* transformedAncestor = 0;
724 if (RenderLayer* ancestor = repaintContainer->layer()->enclosingTransformedA ncestor())
725 transformedAncestor = ancestor->renderer();
726 if (!transformedAncestor)
727 return;
728
729 // If the transformedAncestor is actually the RenderView, we might get
730 // confused and think that we can use LayoutState. Ideally, we'd made
731 // LayoutState work for all composited layers as well, but until then
732 // we need to disable LayoutState for squashed layers.
733 LayoutStateDisabler layoutStateDisabler(*transformedAncestor);
734
735 // This code adjusts the repaint rectangle to be in the space of the transfo rmed ancestor of the grouped (i.e. squashed)
736 // layer. This is because all layers that squash together need to repaint w. r.t. a single container that is
737 // an ancestor of all of them, in order to properly take into account any lo cal transforms etc.
738 // FIXME: remove this special-case code that works around the repainting cod e structure.
739 m_renderer->mapRectToRepaintBacking(transformedAncestor, rect);
740 rect.moveBy(-repaintContainer->groupedMapping()->squashingOffsetFromTransfor medAncestor());
741
742 return;
743 }
744
745 LayoutRect RenderLayer::computeRepaintRect(const RenderLayerModelObject* repaint Container) const
746 {
747 if (!repaintContainer->groupedMapping())
748 return m_renderer->computeRepaintRect(repaintContainer);
749 LayoutRect rect = renderer()->clippedOverflowRectForRepaint(repaintContainer );
750 repaintContainer->layer()->mapRectToRepaintBacking(repaintContainer, rect);
751 return rect;
752 }
753
712 void RenderLayer::setHasVisibleContent() 754 void RenderLayer::setHasVisibleContent()
713 { 755 {
714 if (m_hasVisibleContent && !m_visibleContentStatusDirty) { 756 if (m_hasVisibleContent && !m_visibleContentStatusDirty) {
715 ASSERT(!parent() || parent()->hasVisibleDescendant()); 757 ASSERT(!parent() || parent()->hasVisibleDescendant());
716 return; 758 return;
717 } 759 }
718 760
719 m_hasVisibleContent = true; 761 m_hasVisibleContent = true;
720 m_visibleContentStatusDirty = false; 762 m_visibleContentStatusDirty = false;
721 763
(...skipping 3299 matching lines...) Expand 10 before | Expand all | Expand 10 after
4021 } 4063 }
4022 } 4064 }
4023 4065
4024 void showLayerTree(const WebCore::RenderObject* renderer) 4066 void showLayerTree(const WebCore::RenderObject* renderer)
4025 { 4067 {
4026 if (!renderer) 4068 if (!renderer)
4027 return; 4069 return;
4028 showLayerTree(renderer->enclosingLayer()); 4070 showLayerTree(renderer->enclosingLayer());
4029 } 4071 }
4030 #endif 4072 #endif
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderLayer.h ('k') | Source/core/rendering/RenderLayerRepainter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698