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

Side by Side Diff: third_party/WebKit/WebCore/rendering/RenderLayer.cpp

Issue 39293: WebKit merge 41447:41498 [third_party/WebKit] (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: remove CRLF Created 11 years, 9 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2008 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 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 RenderBox* box = renderBox(); 334 RenderBox* box = renderBox();
335 ASSERT(box); 335 ASSERT(box);
336 m_transform->makeIdentity(); 336 m_transform->makeIdentity();
337 box->style()->applyTransform(*m_transform, box->borderBoxRect().size(), RenderStyle::IncludeTransformOrigin); 337 box->style()->applyTransform(*m_transform, box->borderBoxRect().size(), RenderStyle::IncludeTransformOrigin);
338 } 338 }
339 339
340 if (had3DTransform != has3DTransform()) 340 if (had3DTransform != has3DTransform())
341 dirty3DTransformedDescendantStatus(); 341 dirty3DTransformedDescendantStatus();
342 } 342 }
343 343
344 TransformationMatrix RenderLayer::currentTransform() const
345 {
346 if (!m_transform)
347 return TransformationMatrix();
348
349 #if USE(ACCELERATED_COMPOSITING)
350 if (renderer()->style()->isRunningAcceleratedAnimation()) {
351 TransformationMatrix currTransform;
352 RefPtr<RenderStyle> style = renderer()->animation()->getAnimatedStyleFor Renderer(renderer());
353 style->applyTransform(currTransform, renderBox()->borderBoxRect().size() , RenderStyle::IncludeTransformOrigin);
354 return currTransform;
355 }
356 #endif
357
358 return *m_transform;
359 }
360
344 void RenderLayer::setHasVisibleContent(bool b) 361 void RenderLayer::setHasVisibleContent(bool b)
345 { 362 {
346 if (m_hasVisibleContent == b && !m_visibleContentStatusDirty) 363 if (m_hasVisibleContent == b && !m_visibleContentStatusDirty)
347 return; 364 return;
348 m_visibleContentStatusDirty = false; 365 m_visibleContentStatusDirty = false;
349 m_hasVisibleContent = b; 366 m_hasVisibleContent = b;
350 if (m_hasVisibleContent) { 367 if (m_hasVisibleContent) {
351 RenderBoxModelObject* repaintContainer = renderer()->containerForRepaint (); 368 RenderBoxModelObject* repaintContainer = renderer()->containerForRepaint ();
352 m_repaintRect = renderer()->clippedOverflowRectForRepaint(repaintContain er); 369 m_repaintRect = renderer()->clippedOverflowRectForRepaint(repaintContain er);
353 m_outlineBox = renderer()->outlineBoundsForRepaint(repaintContainer); 370 m_outlineBox = renderer()->outlineBoundsForRepaint(repaintContainer);
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
586 if (!renderer()->hasTransform()) 603 if (!renderer()->hasTransform())
587 return FloatPoint(); 604 return FloatPoint();
588 605
589 const IntRect borderBox = toRenderBox(renderer())->borderBoxRect(); 606 const IntRect borderBox = toRenderBox(renderer())->borderBoxRect();
590 RenderStyle* style = renderer()->style(); 607 RenderStyle* style = renderer()->style();
591 608
592 return FloatPoint(style->perspectiveOriginX().calcFloatValue(borderBox.width ()), 609 return FloatPoint(style->perspectiveOriginX().calcFloatValue(borderBox.width ()),
593 style->perspectiveOriginY().calcFloatValue(borderBox.heigh t())); 610 style->perspectiveOriginY().calcFloatValue(borderBox.heigh t()));
594 } 611 }
595 612
596 RenderLayer *RenderLayer::stackingContext() const 613 RenderLayer* RenderLayer::stackingContext() const
597 { 614 {
598 RenderLayer* curr = parent(); 615 RenderLayer* layer = parent();
599 for ( ; curr && !curr->renderer()->isRenderView() && !curr->renderer()->isRo ot() && 616 while (layer && !layer->renderer()->isRenderView() && !layer->renderer()->is Root() && layer->renderer()->style()->hasAutoZIndex())
600 curr->renderer()->style()->hasAutoZIndex(); 617 layer = layer->parent();
601 curr = curr->parent()) { } 618 return layer;
602 return curr;
603 } 619 }
604 620
605 RenderLayer* RenderLayer::enclosingPositionedAncestor() const 621 RenderLayer* RenderLayer::enclosingPositionedAncestor() const
606 { 622 {
607 RenderLayer* curr = parent(); 623 RenderLayer* curr = parent();
608 for ( ; curr && !curr->renderer()->isRenderView() && !curr->renderer()->isPo sitioned() && !curr->renderer()->isRelPositioned() && !curr->hasTransform(); 624 for ( ; curr && !curr->renderer()->isRenderView() && !curr->renderer()->isPo sitioned() && !curr->renderer()->isRelPositioned() && !curr->hasTransform();
609 curr = curr->parent()) { } 625 curr = curr->parent()) { }
610 return curr; 626 return curr;
611 } 627 }
612 628
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
746 return renderArena->allocate(sz); 762 return renderArena->allocate(sz);
747 } 763 }
748 764
749 void RenderLayer::operator delete(void* ptr, size_t sz) 765 void RenderLayer::operator delete(void* ptr, size_t sz)
750 { 766 {
751 // Stash size where destroy can find it. 767 // Stash size where destroy can find it.
752 *(size_t *)ptr = sz; 768 *(size_t *)ptr = sz;
753 } 769 }
754 770
755 void RenderLayer::destroy(RenderArena* renderArena) 771 void RenderLayer::destroy(RenderArena* renderArena)
756 { 772 {
757 delete this; 773 delete this;
758 774
759 // Recover the size left there for us by operator delete and free the memory . 775 // Recover the size left there for us by operator delete and free the memory .
760 renderArena->free(*(size_t *)this, this); 776 renderArena->free(*(size_t *)this, this);
761 } 777 }
762 778
763 void RenderLayer::addChild(RenderLayer* child, RenderLayer* beforeChild) 779 void RenderLayer::addChild(RenderLayer* child, RenderLayer* beforeChild)
764 { 780 {
765 RenderLayer* prevSibling = beforeChild ? beforeChild->previousSibling() : la stChild(); 781 RenderLayer* prevSibling = beforeChild ? beforeChild->previousSibling() : la stChild();
766 if (prevSibling) { 782 if (prevSibling) {
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
856 872
857 // Now walk our kids and reattach them to our parent. 873 // Now walk our kids and reattach them to our parent.
858 RenderLayer* current = m_first; 874 RenderLayer* current = m_first;
859 while (current) { 875 while (current) {
860 RenderLayer* next = current->nextSibling(); 876 RenderLayer* next = current->nextSibling();
861 removeChild(current); 877 removeChild(current);
862 parent->addChild(current, nextSib); 878 parent->addChild(current, nextSib);
863 current->updateLayerPositions(); 879 current->updateLayerPositions();
864 current = next; 880 current = next;
865 } 881 }
866 882
867 destroy(renderer()->renderArena()); 883 m_renderer->destroyLayer();
868 } 884 }
869 885
870 void RenderLayer::insertOnlyThisLayer() 886 void RenderLayer::insertOnlyThisLayer()
871 { 887 {
872 if (!m_parent && renderer()->parent()) { 888 if (!m_parent && renderer()->parent()) {
873 // We need to connect ourselves when our renderer() has a parent. 889 // We need to connect ourselves when our renderer() has a parent.
874 // Find our enclosingLayer and add ourselves. 890 // Find our enclosingLayer and add ourselves.
875 RenderLayer* parentLayer = renderer()->parent()->enclosingLayer(); 891 RenderLayer* parentLayer = renderer()->parent()->enclosingLayer();
876 RenderLayer* beforeChild = parentLayer->reflectionLayer() != this ? rend erer()->parent()->findNextLayer(parentLayer, renderer()) : 0; 892 RenderLayer* beforeChild = parentLayer->reflectionLayer() != this ? rend erer()->parent()->findNextLayer(parentLayer, renderer()) : 0;
877 if (parentLayer) 893 if (parentLayer)
(...skipping 886 matching lines...) Expand 10 before | Expand all | Expand 10 after
1764 1780
1765 // Paint the resizer control. 1781 // Paint the resizer control.
1766 DEFINE_STATIC_LOCAL(RefPtr<Image>, resizeCornerImage, (Image::loadPlatformRe source("textAreaResizeCorner"))); 1782 DEFINE_STATIC_LOCAL(RefPtr<Image>, resizeCornerImage, (Image::loadPlatformRe source("textAreaResizeCorner")));
1767 IntPoint imagePoint(absRect.right() - resizeCornerImage->width(), absRect.bo ttom() - resizeCornerImage->height()); 1783 IntPoint imagePoint(absRect.right() - resizeCornerImage->width(), absRect.bo ttom() - resizeCornerImage->height());
1768 context->drawImage(resizeCornerImage.get(), imagePoint); 1784 context->drawImage(resizeCornerImage.get(), imagePoint);
1769 1785
1770 // Draw a frame around the resizer (1px grey line) if there are any scrollba rs present. 1786 // Draw a frame around the resizer (1px grey line) if there are any scrollba rs present.
1771 // Clipping will exclude the right and bottom edges of this frame. 1787 // Clipping will exclude the right and bottom edges of this frame.
1772 if (m_hBar || m_vBar) { 1788 if (m_hBar || m_vBar) {
1773 context->save(); 1789 context->save();
1790 context->clip(absRect);
1774 IntRect largerCorner = absRect; 1791 IntRect largerCorner = absRect;
1775 largerCorner.setSize(IntSize(largerCorner.width() + 1, largerCorner.heig ht() + 1)); 1792 largerCorner.setSize(IntSize(largerCorner.width() + 1, largerCorner.heig ht() + 1));
1776 context->setStrokeColor(Color(makeRGB(217, 217, 217))); 1793 context->setStrokeColor(Color(makeRGB(217, 217, 217)));
1777 context->setStrokeThickness(1.0f); 1794 context->setStrokeThickness(1.0f);
1778 context->setFillColor(Color::transparent); 1795 context->setFillColor(Color::transparent);
1779 context->drawRect(largerCorner); 1796 context->drawRect(largerCorner);
1780 context->restore(); 1797 context->restore();
1781 } 1798 }
1782 } 1799 }
1783 1800
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after
2222 // layer, and the accumulated transform which lets up map through preser ve-3d layers. 2239 // layer, and the accumulated transform which lets up map through preser ve-3d layers.
2223 // 2240 //
2224 // We can't just map hitTestPoint and hitTestRect because they may have been flattened (losing z) 2241 // We can't just map hitTestPoint and hitTestRect because they may have been flattened (losing z)
2225 // by our container. 2242 // by our container.
2226 IntPoint localPoint = roundedIntPoint(newTransformState->mappedPoint()); 2243 IntPoint localPoint = roundedIntPoint(newTransformState->mappedPoint());
2227 IntRect localHitTestRect = newTransformState->mappedQuad().enclosingBoun dingBox(); 2244 IntRect localHitTestRect = newTransformState->mappedQuad().enclosingBoun dingBox();
2228 2245
2229 // Now do a hit test with the root layer shifted to be us. 2246 // Now do a hit test with the root layer shifted to be us.
2230 return hitTestLayer(this, containerLayer, request, result, localHitTestR ect, localPoint, true, newTransformState.get(), zOffset); 2247 return hitTestLayer(this, containerLayer, request, result, localHitTestR ect, localPoint, true, newTransformState.get(), zOffset);
2231 } 2248 }
2249
2250 // Ensure our lists and 3d status are up-to-date.
2251 updateLayerListsIfNeeded();
2252 update3DTransformedDescendantStatus();
2232 2253
2233 RefPtr<HitTestingTransformState> localTransformState; 2254 RefPtr<HitTestingTransformState> localTransformState;
2234 if (appliedTransform) { 2255 if (appliedTransform) {
2235 // We computed the correct state in the caller (above code), so just ref erence it. 2256 // We computed the correct state in the caller (above code), so just ref erence it.
2236 ASSERT(transformState); 2257 ASSERT(transformState);
2237 localTransformState = const_cast<HitTestingTransformState*>(transformSta te); 2258 localTransformState = const_cast<HitTestingTransformState*>(transformSta te);
2238 } else if (transformState || m_has3DTransformedDescendant) { 2259 } else if (transformState || m_has3DTransformedDescendant || preserves3D()) {
2239 // We need transform state for the first time, or to offset the containe r state, so create it here. 2260 // We need transform state for the first time, or to offset the containe r state, so create it here.
2240 localTransformState = createLocalTransformState(rootLayer, containerLaye r, hitTestRect, hitTestPoint, transformState); 2261 localTransformState = createLocalTransformState(rootLayer, containerLaye r, hitTestRect, hitTestPoint, transformState);
2241 } 2262 }
2242 2263
2243 RefPtr<HitTestingTransformState> unflattenedTransformState = localTransformS tate; 2264 RefPtr<HitTestingTransformState> unflattenedTransformState = localTransformS tate;
2244 if (localTransformState && !preserves3D()) { 2265 if (localTransformState && !preserves3D()) {
2245 // Keep a copy of the pre-flattening state, for computing z-offsets for the container 2266 // Keep a copy of the pre-flattening state, for computing z-offsets for the container
2246 unflattenedTransformState = HitTestingTransformState::create(*localTrans formState); 2267 unflattenedTransformState = HitTestingTransformState::create(*localTrans formState);
2247 // This layer is flattening, so flatten the state passed to descendants. 2268 // This layer is flattening, so flatten the state passed to descendants.
2248 localTransformState->flatten(); 2269 localTransformState->flatten();
2249 } 2270 }
2250 2271
2251 // Calculate the clip rects we should use. 2272 // Calculate the clip rects we should use.
2252 IntRect layerBounds; 2273 IntRect layerBounds;
2253 IntRect bgRect; 2274 IntRect bgRect;
2254 IntRect fgRect; 2275 IntRect fgRect;
2255 IntRect outlineRect; 2276 IntRect outlineRect;
2256 calculateRects(rootLayer, hitTestRect, layerBounds, bgRect, fgRect, outlineR ect); 2277 calculateRects(rootLayer, hitTestRect, layerBounds, bgRect, fgRect, outlineR ect);
2257 2278
2258 // Ensure our lists and 3d status are up-to-date.
2259 updateLayerListsIfNeeded();
2260 update3DTransformedDescendantStatus();
2261
2262 // The following are used for keeping track of the z-depth of the hit point of 3d-transformed 2279 // The following are used for keeping track of the z-depth of the hit point of 3d-transformed
2263 // descendants. 2280 // descendants.
2264 double localZOffset = -numeric_limits<double>::infinity(); 2281 double localZOffset = -numeric_limits<double>::infinity();
2265 double* zOffsetForDescendantsPtr = 0; 2282 double* zOffsetForDescendantsPtr = 0;
2266 double* zOffsetForContentsPtr = 0; 2283 double* zOffsetForContentsPtr = 0;
2267 2284
2268 bool depthSortDescendants = false; 2285 bool depthSortDescendants = false;
2269 if (preserves3D()) { 2286 if (preserves3D()) {
2270 depthSortDescendants = true; 2287 depthSortDescendants = true;
2271 // Our layers can depth-test with our container, so share the z depth po inter with the container, if it passed one down. 2288 // Our layers can depth-test with our container, so share the z depth po inter with the container, if it passed one down.
(...skipping 842 matching lines...) Expand 10 before | Expand all | Expand 10 after
3114 if (m_marquee) 3131 if (m_marquee)
3115 m_marquee->suspend(); 3132 m_marquee->suspend();
3116 3133
3117 for (RenderLayer* curr = firstChild(); curr; curr = curr->nextSibling()) 3134 for (RenderLayer* curr = firstChild(); curr; curr = curr->nextSibling())
3118 curr->suspendMarquees(); 3135 curr->suspendMarquees();
3119 } 3136 }
3120 3137
3121 } // namespace WebCore 3138 } // namespace WebCore
3122 3139
3123 3140
OLDNEW
« no previous file with comments | « third_party/WebKit/WebCore/rendering/RenderLayer.h ('k') | third_party/WebKit/WebCore/rendering/RenderObject.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698