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

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

Issue 22900008: Make vw/vh units to work in css transforms. Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years, 4 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009, 2010, 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2009, 2010, 2011 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 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 { 241 {
242 m_graphicsLayer->setOpacity(compositingOpacity(style->opacity())); 242 m_graphicsLayer->setOpacity(compositingOpacity(style->opacity()));
243 } 243 }
244 244
245 void RenderLayerBacking::updateTransform(const RenderStyle* style) 245 void RenderLayerBacking::updateTransform(const RenderStyle* style)
246 { 246 {
247 // FIXME: This could use m_owningLayer->transform(), but that currently has transform-origin 247 // FIXME: This could use m_owningLayer->transform(), but that currently has transform-origin
248 // baked into it, and we don't want that. 248 // baked into it, and we don't want that.
249 TransformationMatrix t; 249 TransformationMatrix t;
250 if (m_owningLayer->hasTransform()) { 250 if (m_owningLayer->hasTransform()) {
251 style->applyTransform(t, toRenderBox(renderer())->pixelSnappedBorderBoxR ect().size(), RenderStyle::ExcludeTransformOrigin); 251 style->applyTransform(t, toRenderBox(renderer())->pixelSnappedBorderBoxR ect().size(), RenderStyle::ExcludeTransformOrigin, renderer()->view());
252 makeMatrixRenderable(t, compositor()->canRender3DTransforms()); 252 makeMatrixRenderable(t, compositor()->canRender3DTransforms());
253 } 253 }
254 254
255 m_graphicsLayer->setTransform(t); 255 m_graphicsLayer->setTransform(t);
256 } 256 }
257 257
258 void RenderLayerBacking::updateFilters(const RenderStyle* style) 258 void RenderLayerBacking::updateFilters(const RenderStyle* style)
259 { 259 {
260 bool didCompositeFilters = m_canCompositeFilters; 260 bool didCompositeFilters = m_canCompositeFilters;
261 m_canCompositeFilters = m_graphicsLayer->setFilters(owningLayer()->computeFi lterOperations(style)); 261 m_canCompositeFilters = m_graphicsLayer->setFilters(owningLayer()->computeFi lterOperations(style));
(...skipping 1459 matching lines...) Expand 10 before | Expand all | Expand 10 after
1721 transformVector.insert(adoptPtr(new TransformAnimationValue(key, &(k eyframeStyle->transform()), tf))); 1721 transformVector.insert(adoptPtr(new TransformAnimationValue(key, &(k eyframeStyle->transform()), tf)));
1722 1722
1723 if ((hasOpacity && isFirstOrLastKeyframe) || currentKeyframe.containsPro perty(CSSPropertyOpacity)) 1723 if ((hasOpacity && isFirstOrLastKeyframe) || currentKeyframe.containsPro perty(CSSPropertyOpacity))
1724 opacityVector.insert(adoptPtr(new FloatAnimationValue(key, keyframeS tyle->opacity(), tf))); 1724 opacityVector.insert(adoptPtr(new FloatAnimationValue(key, keyframeS tyle->opacity(), tf)));
1725 1725
1726 if ((hasFilter && isFirstOrLastKeyframe) || currentKeyframe.containsProp erty(CSSPropertyWebkitFilter)) 1726 if ((hasFilter && isFirstOrLastKeyframe) || currentKeyframe.containsProp erty(CSSPropertyWebkitFilter))
1727 filterVector.insert(adoptPtr(new FilterAnimationValue(key, &(keyfram eStyle->filter()), tf))); 1727 filterVector.insert(adoptPtr(new FilterAnimationValue(key, &(keyfram eStyle->filter()), tf)));
1728 } 1728 }
1729 1729
1730 bool didAnimate = false; 1730 bool didAnimate = false;
1731 RenderView* view = m_owningLayer->renderer()->view();
1731 1732
1732 if (hasTransform && m_graphicsLayer->addAnimation(transformVector, toRenderB ox(renderer())->pixelSnappedBorderBoxRect().size(), anim, keyframes.animationNam e(), timeOffset)) 1733 if (hasTransform && m_graphicsLayer->addAnimation(transformVector, toRenderB ox(renderer())->pixelSnappedBorderBoxRect().size(), anim, keyframes.animationNam e(), timeOffset, view))
1733 didAnimate = true; 1734 didAnimate = true;
1734 1735
1735 if (hasOpacity && m_graphicsLayer->addAnimation(opacityVector, IntSize(), an im, keyframes.animationName(), timeOffset)) 1736 if (hasOpacity && m_graphicsLayer->addAnimation(opacityVector, IntSize(), an im, keyframes.animationName(), timeOffset, view))
1736 didAnimate = true; 1737 didAnimate = true;
1737 1738
1738 if (hasFilter && m_graphicsLayer->addAnimation(filterVector, IntSize(), anim , keyframes.animationName(), timeOffset)) 1739 if (hasFilter && m_graphicsLayer->addAnimation(filterVector, IntSize(), anim , keyframes.animationName(), timeOffset, view))
1739 didAnimate = true; 1740 didAnimate = true;
1740 1741
1741 return didAnimate; 1742 return didAnimate;
1742 } 1743 }
1743 1744
1744 void RenderLayerBacking::animationPaused(double timeOffset, const String& animat ionName) 1745 void RenderLayerBacking::animationPaused(double timeOffset, const String& animat ionName)
1745 { 1746 {
1746 m_graphicsLayer->pauseAnimation(animationName, timeOffset); 1747 m_graphicsLayer->pauseAnimation(animationName, timeOffset);
1747 } 1748 }
1748 1749
1749 void RenderLayerBacking::animationFinished(const String& animationName) 1750 void RenderLayerBacking::animationFinished(const String& animationName)
1750 { 1751 {
1751 m_graphicsLayer->removeAnimation(animationName); 1752 m_graphicsLayer->removeAnimation(animationName);
1752 } 1753 }
1753 1754
1754 bool RenderLayerBacking::startTransition(double timeOffset, CSSPropertyID proper ty, const RenderStyle* fromStyle, const RenderStyle* toStyle) 1755 bool RenderLayerBacking::startTransition(double timeOffset, CSSPropertyID proper ty, const RenderStyle* fromStyle, const RenderStyle* toStyle)
1755 { 1756 {
1756 bool didAnimate = false; 1757 bool didAnimate = false;
1758 RenderView* view = m_owningLayer->renderer()->view();
1757 1759
1758 ASSERT(property != CSSPropertyInvalid); 1760 ASSERT(property != CSSPropertyInvalid);
1759 1761
1760 if (property == CSSPropertyOpacity) { 1762 if (property == CSSPropertyOpacity) {
1761 const CSSAnimationData* opacityAnim = toStyle->transitionForProperty(CSS PropertyOpacity); 1763 const CSSAnimationData* opacityAnim = toStyle->transitionForProperty(CSS PropertyOpacity);
1762 if (opacityAnim && !opacityAnim->isEmptyOrZeroDuration()) { 1764 if (opacityAnim && !opacityAnim->isEmptyOrZeroDuration()) {
1763 KeyframeValueList opacityVector(AnimatedPropertyOpacity); 1765 KeyframeValueList opacityVector(AnimatedPropertyOpacity);
1764 opacityVector.insert(adoptPtr(new FloatAnimationValue(0, compositing Opacity(fromStyle->opacity())))); 1766 opacityVector.insert(adoptPtr(new FloatAnimationValue(0, compositing Opacity(fromStyle->opacity()))));
1765 opacityVector.insert(adoptPtr(new FloatAnimationValue(1, compositing Opacity(toStyle->opacity())))); 1767 opacityVector.insert(adoptPtr(new FloatAnimationValue(1, compositing Opacity(toStyle->opacity()))));
1766 // The boxSize param is only used for transform animations (which ca n only run on RenderBoxes), so we pass an empty size here. 1768 // The boxSize param is only used for transform animations (which ca n only run on RenderBoxes), so we pass an empty size here.
1767 if (m_graphicsLayer->addAnimation(opacityVector, IntSize(), opacityA nim, GraphicsLayer::animationNameForTransition(AnimatedPropertyOpacity), timeOff set)) { 1769 if (m_graphicsLayer->addAnimation(opacityVector, IntSize(), opacityA nim, GraphicsLayer::animationNameForTransition(AnimatedPropertyOpacity), timeOff set, view)) {
1768 // To ensure that the correct opacity is visible when the animat ion ends, also set the final opacity. 1770 // To ensure that the correct opacity is visible when the animat ion ends, also set the final opacity.
1769 updateOpacity(toStyle); 1771 updateOpacity(toStyle);
1770 didAnimate = true; 1772 didAnimate = true;
1771 } 1773 }
1772 } 1774 }
1773 } 1775 }
1774 1776
1775 if (property == CSSPropertyWebkitTransform && m_owningLayer->hasTransform()) { 1777 if (property == CSSPropertyWebkitTransform && m_owningLayer->hasTransform()) {
1776 const CSSAnimationData* transformAnim = toStyle->transitionForProperty(C SSPropertyWebkitTransform); 1778 const CSSAnimationData* transformAnim = toStyle->transitionForProperty(C SSPropertyWebkitTransform);
1777 if (transformAnim && !transformAnim->isEmptyOrZeroDuration()) { 1779 if (transformAnim && !transformAnim->isEmptyOrZeroDuration()) {
1778 KeyframeValueList transformVector(AnimatedPropertyWebkitTransform); 1780 KeyframeValueList transformVector(AnimatedPropertyWebkitTransform);
1779 transformVector.insert(adoptPtr(new TransformAnimationValue(0, &from Style->transform()))); 1781 transformVector.insert(adoptPtr(new TransformAnimationValue(0, &from Style->transform())));
1780 transformVector.insert(adoptPtr(new TransformAnimationValue(1, &toSt yle->transform()))); 1782 transformVector.insert(adoptPtr(new TransformAnimationValue(1, &toSt yle->transform())));
1781 if (m_graphicsLayer->addAnimation(transformVector, toRenderBox(rende rer())->pixelSnappedBorderBoxRect().size(), transformAnim, GraphicsLayer::animat ionNameForTransition(AnimatedPropertyWebkitTransform), timeOffset)) { 1783 if (m_graphicsLayer->addAnimation(transformVector, toRenderBox(rende rer())->pixelSnappedBorderBoxRect().size(), transformAnim, GraphicsLayer::animat ionNameForTransition(AnimatedPropertyWebkitTransform), timeOffset, view)) {
1782 // To ensure that the correct transform is visible when the anim ation ends, also set the final transform. 1784 // To ensure that the correct transform is visible when the anim ation ends, also set the final transform.
1783 updateTransform(toStyle); 1785 updateTransform(toStyle);
1784 didAnimate = true; 1786 didAnimate = true;
1785 } 1787 }
1786 } 1788 }
1787 } 1789 }
1788 1790
1789 if (property == CSSPropertyWebkitFilter && m_owningLayer->hasFilter()) { 1791 if (property == CSSPropertyWebkitFilter && m_owningLayer->hasFilter()) {
1790 const CSSAnimationData* filterAnim = toStyle->transitionForProperty(CSSP ropertyWebkitFilter); 1792 const CSSAnimationData* filterAnim = toStyle->transitionForProperty(CSSP ropertyWebkitFilter);
1791 if (filterAnim && !filterAnim->isEmptyOrZeroDuration()) { 1793 if (filterAnim && !filterAnim->isEmptyOrZeroDuration()) {
1792 KeyframeValueList filterVector(AnimatedPropertyWebkitFilter); 1794 KeyframeValueList filterVector(AnimatedPropertyWebkitFilter);
1793 filterVector.insert(adoptPtr(new FilterAnimationValue(0, &fromStyle- >filter()))); 1795 filterVector.insert(adoptPtr(new FilterAnimationValue(0, &fromStyle- >filter())));
1794 filterVector.insert(adoptPtr(new FilterAnimationValue(1, &toStyle->f ilter()))); 1796 filterVector.insert(adoptPtr(new FilterAnimationValue(1, &toStyle->f ilter())));
1795 if (m_graphicsLayer->addAnimation(filterVector, IntSize(), filterAni m, GraphicsLayer::animationNameForTransition(AnimatedPropertyWebkitFilter), time Offset)) { 1797 if (m_graphicsLayer->addAnimation(filterVector, IntSize(), filterAni m, GraphicsLayer::animationNameForTransition(AnimatedPropertyWebkitFilter), time Offset, view)) {
1796 // To ensure that the correct filter is visible when the animati on ends, also set the final filter. 1798 // To ensure that the correct filter is visible when the animati on ends, also set the final filter.
1797 updateFilters(toStyle); 1799 updateFilters(toStyle);
1798 didAnimate = true; 1800 didAnimate = true;
1799 } 1801 }
1800 } 1802 }
1801 } 1803 }
1802 1804
1803 return didAnimate; 1805 return didAnimate;
1804 } 1806 }
1805 1807
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
1916 if (m_layerForVerticalScrollbar) 1918 if (m_layerForVerticalScrollbar)
1917 backingMemory += m_layerForVerticalScrollbar->backingStoreMemoryEstimate (); 1919 backingMemory += m_layerForVerticalScrollbar->backingStoreMemoryEstimate ();
1918 1920
1919 if (m_layerForScrollCorner) 1921 if (m_layerForScrollCorner)
1920 backingMemory += m_layerForScrollCorner->backingStoreMemoryEstimate(); 1922 backingMemory += m_layerForScrollCorner->backingStoreMemoryEstimate();
1921 1923
1922 return backingMemory; 1924 return backingMemory;
1923 } 1925 }
1924 1926
1925 } // namespace WebCore 1927 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698