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

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

Issue 21152: WebKit merge 40668:40722 part 1. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 10 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) 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2009 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 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 } 109 }
110 110
111 void RenderLayerBacking::updateLayerTransform() 111 void RenderLayerBacking::updateLayerTransform()
112 { 112 {
113 RenderStyle* style = renderer()->style(); 113 RenderStyle* style = renderer()->style();
114 114
115 // FIXME: This could use m_owningLayer->transform(), but that currently has transform-origin 115 // FIXME: This could use m_owningLayer->transform(), but that currently has transform-origin
116 // baked into it, and we don't want that. 116 // baked into it, and we don't want that.
117 TransformationMatrix t; 117 TransformationMatrix t;
118 if (m_owningLayer->hasTransform()) 118 if (m_owningLayer->hasTransform())
119 style->applyTransform(t, renderer()->borderBoxRect().size(), false); 119 style->applyTransform(t, toRenderBox(renderer())->borderBoxRect().size() , RenderStyle::ExcludeTransformOrigin);
120 120
121 m_graphicsLayer->setTransform(t); 121 m_graphicsLayer->setTransform(t);
122 } 122 }
123 123
124 void RenderLayerBacking::updateAfterLayout() 124 void RenderLayerBacking::updateAfterLayout()
125 { 125 {
126 invalidateDrawingOptimizations(); 126 invalidateDrawingOptimizations();
127 detectDrawingOptimizations(); 127 detectDrawingOptimizations();
128 128
129 updateGraphicsLayerGeometry(); 129 updateGraphicsLayerGeometry();
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 231
232 // If we have a layer that clips children, position it. 232 // If we have a layer that clips children, position it.
233 if (m_clippingLayer) { 233 if (m_clippingLayer) {
234 IntRect clippingBox = renderer()->getOverflowClipRect(0, 0); 234 IntRect clippingBox = renderer()->getOverflowClipRect(0, 0);
235 m_clippingLayer->setPosition(FloatPoint() + (clippingBox.location() - lo calCompositingBounds.location())); 235 m_clippingLayer->setPosition(FloatPoint() + (clippingBox.location() - lo calCompositingBounds.location()));
236 m_clippingLayer->setSize(clippingBox.size()); 236 m_clippingLayer->setSize(clippingBox.size());
237 m_clippingLayer->setOffsetFromRenderer(clippingBox.location() - IntPoint ()); 237 m_clippingLayer->setOffsetFromRenderer(clippingBox.location() - IntPoint ());
238 } 238 }
239 239
240 if (m_owningLayer->hasTransform()) { 240 if (m_owningLayer->hasTransform()) {
241 const IntRect borderBox = renderer()->borderBoxRect(); 241 const IntRect borderBox = toRenderBox(renderer())->borderBoxRect();
242 242
243 IntRect layerBounds = IntRect(m_owningLayer->xPos(), m_owningLayer->yPos (), borderBox.width(), borderBox.height()); 243 IntRect layerBounds = IntRect(m_owningLayer->xPos(), m_owningLayer->yPos (), borderBox.width(), borderBox.height());
244 // Convert to absolute coords to match bbox. 244 // Convert to absolute coords to match bbox.
245 int x = 0, y = 0; 245 int x = 0, y = 0;
246 m_owningLayer->convertToLayerCoords(compAncestor, x, y); 246 m_owningLayer->convertToLayerCoords(compAncestor, x, y);
247 layerBounds.move(x - m_owningLayer->xPos(), y - m_owningLayer->yPos()); 247 layerBounds.move(x - m_owningLayer->xPos(), y - m_owningLayer->yPos());
248 248
249 // Update properties that depend on layer dimensions 249 // Update properties that depend on layer dimensions
250 FloatPoint3D transformOrigin = computeTransformOrigin(borderBox); 250 FloatPoint3D transformOrigin = computeTransformOrigin(borderBox);
251 // Compute the anchor point, which is in the center of the renderer box unless transform-origin is set. 251 // Compute the anchor point, which is in the center of the renderer box unless transform-origin is set.
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after
587 587
588 IntRect relativeCompositingBounds = compositor()->calculateCompositedBounds( m_owningLayer, m_owningLayer); 588 IntRect relativeCompositingBounds = compositor()->calculateCompositedBounds( m_owningLayer, m_owningLayer);
589 m_compositingContentOffset = IntSize(-relativeCompositingBounds.x(), -relati veCompositingBounds.y()); 589 m_compositingContentOffset = IntSize(-relativeCompositingBounds.x(), -relati veCompositingBounds.y());
590 m_compositingContentOffsetDirty = false; 590 m_compositingContentOffsetDirty = false;
591 591
592 return m_compositingContentOffset; 592 return m_compositingContentOffset;
593 } 593 }
594 594
595 IntRect RenderLayerBacking::contentsBox(const GraphicsLayer*) 595 IntRect RenderLayerBacking::contentsBox(const GraphicsLayer*)
596 { 596 {
597 IntRect contentsRect = renderer()->contentBoxRect(); 597 if (!renderer()->isBox())
598 return IntRect();
599
600 IntRect contentsRect = toRenderBox(renderer())->contentBoxRect();
598 IntSize contentOffset = contentOffsetInCompostingLayer(); 601 IntSize contentOffset = contentOffsetInCompostingLayer();
599 contentsRect.move(contentOffset); 602 contentsRect.move(contentOffset);
600 return contentsRect; 603 return contentsRect;
601 } 604 }
602 605
603 // Map the given point from coordinates in the GraphicsLayer to RenderLayer coor dinates. 606 // Map the given point from coordinates in the GraphicsLayer to RenderLayer coor dinates.
604 FloatPoint RenderLayerBacking::graphicsLayerToContentsCoordinates(const Graphics Layer* graphicsLayer, const FloatPoint& point) 607 FloatPoint RenderLayerBacking::graphicsLayerToContentsCoordinates(const Graphics Layer* graphicsLayer, const FloatPoint& point)
605 { 608 {
606 return point + FloatSize(graphicsLayer->offsetFromRenderer()); 609 return point + FloatSize(graphicsLayer->offsetFromRenderer());
607 } 610 }
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 } 672 }
670 673
671 m_owningLayer->updateLayerListsIfNeeded(); 674 m_owningLayer->updateLayerListsIfNeeded();
672 675
673 // Calculate the clip rects we should use. 676 // Calculate the clip rects we should use.
674 IntRect layerBounds, damageRect, clipRectToApply, outlineRect; 677 IntRect layerBounds, damageRect, clipRectToApply, outlineRect;
675 m_owningLayer->calculateRects(rootLayer, paintDirtyRect, layerBounds, damage Rect, clipRectToApply, outlineRect); 678 m_owningLayer->calculateRects(rootLayer, paintDirtyRect, layerBounds, damage Rect, clipRectToApply, outlineRect);
676 679
677 int x = layerBounds.x(); // layerBounds is computed relative to rootL ayer 680 int x = layerBounds.x(); // layerBounds is computed relative to rootL ayer
678 int y = layerBounds.y(); 681 int y = layerBounds.y();
679 int tx = x - renderer()->x(); 682 int tx = x - toRenderBox(renderer())->x();
680 int ty = y - renderer()->y(); 683 int ty = y - toRenderBox(renderer())->y();
681 684
682 // If this layer's renderer is a child of the paintingRoot, we render uncond itionally, which 685 // If this layer's renderer is a child of the paintingRoot, we render uncond itionally, which
683 // is done by passing a nil paintingRoot down to our renderer (as if no pain tingRoot was ever set). 686 // is done by passing a nil paintingRoot down to our renderer (as if no pain tingRoot was ever set).
684 // Else, our renderer tree may or may not contain the painting root, so we p ass that root along 687 // Else, our renderer tree may or may not contain the painting root, so we p ass that root along
685 // so it will be tested against as we decend through the renderers. 688 // so it will be tested against as we decend through the renderers.
686 RenderObject *paintingRootForRenderer = 0; 689 RenderObject *paintingRootForRenderer = 0;
687 if (paintingRoot && !renderer()->isDescendantOf(paintingRoot)) 690 if (paintingRoot && !renderer()->isDescendantOf(paintingRoot))
688 paintingRootForRenderer = paintingRoot; 691 paintingRootForRenderer = paintingRoot;
689 692
690 if (paintingPhase & GraphicsLayerPaintBackgroundMask) { 693 if (paintingPhase & GraphicsLayerPaintBackgroundMask) {
691 // If this is the root then we need to send in a bigger bounding box 694 // If this is the root then we need to send in a bigger bounding box
692 // because we'll be painting the background as well (see RenderBox::pain tRootBoxDecorations()). 695 // because we'll be painting the background as well (see RenderBox::pain tRootBoxDecorations()).
693 IntRect paintBox = clipRectToApply; 696 IntRect paintBox = clipRectToApply;
694 697
698 // FIXME: do we need this code?
695 if (renderer()->node()->isDocumentNode() && renderer()->document()->isHT MLDocument()) { 699 if (renderer()->node()->isDocumentNode() && renderer()->document()->isHT MLDocument()) {
696 int w = renderer()->width(); 700 RenderBox* box = toRenderBox(renderer());
697 int h = renderer()->height(); 701 int w = box->width();
702 int h = box->height();
698 703
699 int rw; 704 int rw;
700 int rh; 705 int rh;
701 if (renderer()->view()->frameView()) { 706 if (box->view()->frameView()) {
702 rw = renderer()->view()->frameView()->contentsWidth(); 707 rw = box->view()->frameView()->contentsWidth();
703 rh = renderer()->view()->frameView()->contentsHeight(); 708 rh = box->view()->frameView()->contentsHeight();
704 } else { 709 } else {
705 rw = renderer()->view()->width(); 710 rw = box->view()->width();
706 rh = renderer()->view()->height(); 711 rh = box->view()->height();
707 } 712 }
708 713
709 int bx = tx - renderer()->marginLeft(); 714 int bx = tx - box->marginLeft();
710 int by = ty - renderer()->marginTop(); 715 int by = ty - box->marginTop();
711 int bw = max(w + renderer()->marginLeft() + renderer()->marginRight( ) + renderer()->borderLeft() + renderer()->borderRight(), rw); 716 int bw = max(w + box->marginLeft() + box->marginRight() + box->borde rLeft() + box->borderRight(), rw);
712 int bh = max(h + renderer()->marginTop() + renderer()->marginBottom( ) + renderer()->borderTop() + renderer()->borderBottom(), rh); 717 int bh = max(h + box->marginTop() + box->marginBottom() + box->borde rTop() + box->borderBottom(), rh);
713 paintBox = IntRect(bx, by, bw, bh); 718 paintBox = IntRect(bx, by, bw, bh);
714 } 719 }
715 720
716 // Paint our background first, before painting any child layers. 721 // Paint our background first, before painting any child layers.
717 // Establish the clip used to paint our background. 722 // Establish the clip used to paint our background.
718 setClip(context, paintDirtyRect, damageRect); 723 setClip(context, paintDirtyRect, damageRect);
719 724
720 RenderObject::PaintInfo info(context, paintBox, PaintPhaseBlockBackgroun d, false, paintingRootForRenderer, 0); 725 RenderObject::PaintInfo info(context, paintBox, PaintPhaseBlockBackgroun d, false, paintingRootForRenderer, 0);
721 renderer()->paint(info, tx, ty); 726 renderer()->paint(info, tx, ty);
722 727
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
845 if (hasTransform) 850 if (hasTransform)
846 transformVector.insert(key, &(keyframeStyle->transform()), tf); 851 transformVector.insert(key, &(keyframeStyle->transform()), tf);
847 852
848 if (hasOpacity) 853 if (hasOpacity)
849 opacityVector.insert(key, keyframeStyle->opacity(), tf); 854 opacityVector.insert(key, keyframeStyle->opacity(), tf);
850 } 855 }
851 856
852 bool didAnimateTransform = !hasTransform; 857 bool didAnimateTransform = !hasTransform;
853 bool didAnimateOpacity = !hasOpacity; 858 bool didAnimateOpacity = !hasOpacity;
854 859
855 if (hasTransform && m_graphicsLayer->animateTransform(transformVector, rende rer()->borderBoxRect().size(), anim, beginTime, false)) 860 if (hasTransform && m_graphicsLayer->animateTransform(transformVector, toRen derBox(renderer())->borderBoxRect().size(), anim, beginTime, false))
856 didAnimateTransform = true; 861 didAnimateTransform = true;
857 862
858 if (hasOpacity && m_graphicsLayer->animateFloat(AnimatedPropertyOpacity, opa cityVector, anim, beginTime)) 863 if (hasOpacity && m_graphicsLayer->animateFloat(AnimatedPropertyOpacity, opa cityVector, anim, beginTime))
859 didAnimateOpacity = true; 864 didAnimateOpacity = true;
860 865
861 return didAnimateTransform && didAnimateOpacity; 866 return didAnimateTransform && didAnimateOpacity;
862 } 867 }
863 868
864 bool RenderLayerBacking::startTransition(double beginTime, int property, const R enderStyle* fromStyle, const RenderStyle* toStyle) 869 bool RenderLayerBacking::startTransition(double beginTime, int property, const R enderStyle* fromStyle, const RenderStyle* toStyle)
865 { 870 {
(...skipping 15 matching lines...) Expand all
881 886
882 if (property == (int)CSSPropertyWebkitTransform && m_owningLayer->hasTransfo rm()) { 887 if (property == (int)CSSPropertyWebkitTransform && m_owningLayer->hasTransfo rm()) {
883 // We get a TransformOperation, which is a linked list of primitive oper ations and their arguments. 888 // We get a TransformOperation, which is a linked list of primitive oper ations and their arguments.
884 // Arguments can be floats or Length values, which need to be converted to numbers using 889 // Arguments can be floats or Length values, which need to be converted to numbers using
885 // val.calcFloatValue(renderer()->width()) (or height()). 890 // val.calcFloatValue(renderer()->width()) (or height()).
886 const Animation* transformAnim = toStyle->transitionForProperty(CSSPrope rtyWebkitTransform); 891 const Animation* transformAnim = toStyle->transitionForProperty(CSSPrope rtyWebkitTransform);
887 if (transformAnim && !transformAnim->isEmptyOrZeroDuration()) { 892 if (transformAnim && !transformAnim->isEmptyOrZeroDuration()) {
888 GraphicsLayer::TransformValueList transformVector; 893 GraphicsLayer::TransformValueList transformVector;
889 transformVector.insert(0, &fromStyle->transform(), 0); 894 transformVector.insert(0, &fromStyle->transform(), 0);
890 transformVector.insert(1, &toStyle->transform(), 0); 895 transformVector.insert(1, &toStyle->transform(), 0);
891 if (m_graphicsLayer->animateTransform(transformVector, renderer()->b orderBoxRect().size(), transformAnim, beginTime, true)) 896 if (m_graphicsLayer->animateTransform(transformVector, toRenderBox(r enderer())->borderBoxRect().size(), transformAnim, beginTime, true))
892 didAnimate = true; 897 didAnimate = true;
893 } 898 }
894 } 899 }
895 900
896 return didAnimate; 901 return didAnimate;
897 } 902 }
898 903
899 void RenderLayerBacking::notifyTransitionStarted(const GraphicsLayer*, AnimatedP ropertyID property, double time)
900 {
901 renderer()->animation()->notifyTransitionStarted(renderer(), graphicsLayerTo CSSProperty(property), time);
902 }
903
904 void RenderLayerBacking::notifyAnimationStarted(const GraphicsLayer*, double tim e) 904 void RenderLayerBacking::notifyAnimationStarted(const GraphicsLayer*, double tim e)
905 { 905 {
906 renderer()->animation()->notifyAnimationStarted(renderer(), time); 906 renderer()->animation()->notifyAnimationStarted(renderer(), time);
907 } 907 }
908 908
909 void RenderLayerBacking::animationFinished(const String& name, int index, bool r eset) 909 void RenderLayerBacking::animationFinished(const String& name, int index, bool r eset)
910 { 910 {
911 m_graphicsLayer->removeFinishedAnimations(name, index, reset); 911 m_graphicsLayer->removeFinishedAnimations(name, index, reset);
912 } 912 }
913 913
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
957 case CSSPropertyBackgroundColor: 957 case CSSPropertyBackgroundColor:
958 return AnimatedPropertyBackgroundColor; 958 return AnimatedPropertyBackgroundColor;
959 // It's fine if we see other css properties here; they are just not acce lerated. 959 // It's fine if we see other css properties here; they are just not acce lerated.
960 } 960 }
961 return AnimatedPropertyInvalid; 961 return AnimatedPropertyInvalid;
962 } 962 }
963 963
964 } // namespace WebCore 964 } // namespace WebCore
965 965
966 #endif // USE(ACCELERATED_COMPOSITING) 966 #endif // USE(ACCELERATED_COMPOSITING)
OLDNEW
« no previous file with comments | « third_party/WebKit/WebCore/rendering/RenderLayerBacking.h ('k') | third_party/WebKit/WebCore/rendering/RenderListBox.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698