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

Side by Side Diff: Source/core/rendering/CompositedLayerMapping.h

Issue 20723003: Fix pixel snapping issues when layers become composited (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Bring up to ToT again... Created 6 years, 11 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, 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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 NormalCompositingLayer, // non-tiled layer with backing store 43 NormalCompositingLayer, // non-tiled layer with backing store
44 MediaCompositingLayer, // layer that contains an image, video, webGL or plug in 44 MediaCompositingLayer, // layer that contains an image, video, webGL or plug in
45 ContainerCompositingLayer // layer with no backing store 45 ContainerCompositingLayer // layer with no backing store
46 }; 46 };
47 47
48 48
49 // A GraphicsLayerPaintInfo contains all the info needed to paint a partial subt ree of RenderLayers into a GraphicsLayer. 49 // A GraphicsLayerPaintInfo contains all the info needed to paint a partial subt ree of RenderLayers into a GraphicsLayer.
50 struct GraphicsLayerPaintInfo { 50 struct GraphicsLayerPaintInfo {
51 RenderLayer* renderLayer; 51 RenderLayer* renderLayer;
52 52
53 IntRect compositedBounds; 53 LayoutRect compositedBounds;
54 54
55 // A temporary offset used for squashing layers, when the origin of the 55 // A temporary offset used for squashing layers, when the origin of the
56 // squashing layer is not yet known. 56 // squashing layer is not yet known.
57 IntSize offsetFromBackingRoot; 57 IntSize offsetFromBackingRoot;
58 58
59 IntSize offsetFromRenderer; 59 IntSize offsetFromRenderer;
60 60
61 GraphicsLayerPaintingPhase paintingPhase; 61 GraphicsLayerPaintingPhase paintingPhase;
62 62
63 bool isBackgroundLayer; 63 bool isBackgroundLayer;
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 143
144 // Interface to start, finish, suspend and resume animations and transitions 144 // Interface to start, finish, suspend and resume animations and transitions
145 bool startTransition(double, CSSPropertyID, const RenderStyle* fromStyle, co nst RenderStyle* toStyle); 145 bool startTransition(double, CSSPropertyID, const RenderStyle* fromStyle, co nst RenderStyle* toStyle);
146 void transitionPaused(double timeOffset, CSSPropertyID); 146 void transitionPaused(double timeOffset, CSSPropertyID);
147 void transitionFinished(CSSPropertyID); 147 void transitionFinished(CSSPropertyID);
148 148
149 bool startAnimation(double timeOffset, const CSSAnimationData*, const Keyfra meList& keyframes); 149 bool startAnimation(double timeOffset, const CSSAnimationData*, const Keyfra meList& keyframes);
150 void animationPaused(double timeOffset, const String& name); 150 void animationPaused(double timeOffset, const String& name);
151 void animationFinished(const String& name); 151 void animationFinished(const String& name);
152 152
153 IntRect compositedBounds() const; 153 LayoutRect compositedBounds() const;
154 void setCompositedBounds(const IntRect&); 154 void setCompositedBounds(const LayoutRect&);
155 void updateCompositedBounds(); 155 void updateCompositedBounds();
156 156
157 void updateAfterWidgetResize(); 157 void updateAfterWidgetResize();
158 void positionOverflowControlsLayers(const IntSize& offsetFromRoot); 158 void positionOverflowControlsLayers(const IntSize& offsetFromRoot);
159 bool hasUnpositionedOverflowControlsLayers() const; 159 bool hasUnpositionedOverflowControlsLayers() const;
160 160
161 void addRenderLayerToSquashingGraphicsLayer(RenderLayer*, IntSize offsetFrom TargetBacking, size_t nextSquashedLayerIndex); 161 void addRenderLayerToSquashingGraphicsLayer(RenderLayer*, IntSize offsetFrom TargetBacking, size_t nextSquashedLayerIndex);
162 void finishAccumulatingSquashingLayers(size_t nextSquashedLayerIndex); 162 void finishAccumulatingSquashingLayers(size_t nextSquashedLayerIndex);
163 163
164 // GraphicsLayerClient interface 164 // GraphicsLayerClient interface
165 virtual void notifyAnimationStarted(const GraphicsLayer*, double wallClockTi me, double monotonicTime) OVERRIDE; 165 virtual void notifyAnimationStarted(const GraphicsLayer*, double wallClockTi me, double monotonicTime) OVERRIDE;
166 virtual void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsL ayerPaintingPhase, const IntRect& clip) OVERRIDE; 166 virtual void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsL ayerPaintingPhase, const IntRect& clip) OVERRIDE;
167 virtual bool isTrackingRepaints() const OVERRIDE; 167 virtual bool isTrackingRepaints() const OVERRIDE;
168 168
169 PassOwnPtr<Vector<FloatRect> > collectTrackedRepaintRects() const; 169 PassOwnPtr<Vector<FloatRect> > collectTrackedRepaintRects() const;
170 170
171 #ifndef NDEBUG 171 #ifndef NDEBUG
172 virtual void verifyNotPainting(); 172 virtual void verifyNotPainting();
173 #endif 173 #endif
174 174
175 IntRect contentsBox() const; 175 LayoutRect contentsBox() const;
176 IntRect backgroundBox() const; 176 IntRect backgroundBox() const;
177 177
178 // For informative purposes only. 178 // For informative purposes only.
179 CompositingLayerType compositingLayerType() const; 179 CompositingLayerType compositingLayerType() const;
180 180
181 GraphicsLayer* layerForHorizontalScrollbar() const { return m_layerForHorizo ntalScrollbar.get(); } 181 GraphicsLayer* layerForHorizontalScrollbar() const { return m_layerForHorizo ntalScrollbar.get(); }
182 GraphicsLayer* layerForVerticalScrollbar() const { return m_layerForVertical Scrollbar.get(); } 182 GraphicsLayer* layerForVerticalScrollbar() const { return m_layerForVertical Scrollbar.get(); }
183 GraphicsLayer* layerForScrollCorner() const { return m_layerForScrollCorner. get(); } 183 GraphicsLayer* layerForScrollCorner() const { return m_layerForScrollCorner. get(); }
184 184
185 void updateFilters(const RenderStyle*); 185 void updateFilters(const RenderStyle*);
186 bool canCompositeFilters() const { return m_canCompositeFilters; } 186 bool canCompositeFilters() const { return m_canCompositeFilters; }
187 187
188 // Return an estimate of the backing store area (in pixels) allocated by thi s object's GraphicsLayers. 188 // Return an estimate of the backing store area (in pixels) allocated by thi s object's GraphicsLayers.
189 double backingStoreMemoryEstimate() const; 189 double backingStoreMemoryEstimate() const;
190 190
191 void setBlendMode(blink::WebBlendMode); 191 void setBlendMode(blink::WebBlendMode);
192 192
193 virtual String debugName(const GraphicsLayer*) OVERRIDE; 193 virtual String debugName(const GraphicsLayer*) OVERRIDE;
194 194
195 LayoutSize subpixelAccumulation() const { return m_subpixelAccumulation; }
195 private: 196 private:
196 void createPrimaryGraphicsLayer(); 197 void createPrimaryGraphicsLayer();
197 void destroyGraphicsLayers(); 198 void destroyGraphicsLayers();
198 199
199 PassOwnPtr<GraphicsLayer> createGraphicsLayer(CompositingReasons); 200 PassOwnPtr<GraphicsLayer> createGraphicsLayer(CompositingReasons);
200 201
201 RenderLayerModelObject* renderer() const { return m_owningLayer->renderer(); } 202 RenderLayerModelObject* renderer() const { return m_owningLayer->renderer(); }
202 RenderLayerCompositor* compositor() const { return m_owningLayer->compositor (); } 203 RenderLayerCompositor* compositor() const { return m_owningLayer->compositor (); }
203 204
204 void updateInternalHierarchy(); 205 void updateInternalHierarchy();
205 bool updateClippingLayers(bool needsAncestorClip, bool needsDescendantClip); 206 bool updateClippingLayers(bool needsAncestorClip, bool needsDescendantClip);
206 bool updateOverflowControlsLayers(bool needsHorizontalScrollbarLayer, bool n eedsVerticalScrollbarLayer, bool needsScrollCornerLayer); 207 bool updateOverflowControlsLayers(bool needsHorizontalScrollbarLayer, bool n eedsVerticalScrollbarLayer, bool needsScrollCornerLayer);
207 bool updateForegroundLayer(bool needsForegroundLayer); 208 bool updateForegroundLayer(bool needsForegroundLayer);
208 bool updateBackgroundLayer(bool needsBackgroundLayer); 209 bool updateBackgroundLayer(bool needsBackgroundLayer);
209 bool updateMaskLayer(bool needsMaskLayer); 210 bool updateMaskLayer(bool needsMaskLayer);
210 bool updateClippingMaskLayers(bool needsChildClippingMaskLayer); 211 bool updateClippingMaskLayers(bool needsChildClippingMaskLayer);
211 bool requiresHorizontalScrollbarLayer() const { return m_owningLayer->scroll ableArea() && m_owningLayer->scrollableArea()->horizontalScrollbar(); } 212 bool requiresHorizontalScrollbarLayer() const { return m_owningLayer->scroll ableArea() && m_owningLayer->scrollableArea()->horizontalScrollbar(); }
212 bool requiresVerticalScrollbarLayer() const { return m_owningLayer->scrollab leArea() && m_owningLayer->scrollableArea()->verticalScrollbar(); } 213 bool requiresVerticalScrollbarLayer() const { return m_owningLayer->scrollab leArea() && m_owningLayer->scrollableArea()->verticalScrollbar(); }
213 bool requiresScrollCornerLayer() const { return m_owningLayer->scrollableAre a() && !m_owningLayer->scrollableArea()->scrollCornerAndResizerRect().isEmpty(); } 214 bool requiresScrollCornerLayer() const { return m_owningLayer->scrollableAre a() && !m_owningLayer->scrollableArea()->scrollCornerAndResizerRect().isEmpty(); }
214 bool updateScrollingLayers(bool scrollingLayers); 215 bool updateScrollingLayers(bool scrollingLayers);
215 void updateScrollParent(RenderLayer*); 216 void updateScrollParent(RenderLayer*);
216 void updateClipParent(RenderLayer*); 217 void updateClipParent(RenderLayer*);
217 bool updateSquashingLayers(bool needsSquashingLayers); 218 bool updateSquashingLayers(bool needsSquashingLayers);
218 void updateDrawsContent(bool isSimpleContainer); 219 void updateDrawsContent(bool isSimpleContainer);
219 void registerScrollingLayers(); 220 void registerScrollingLayers();
220 221
222 void adjustBoundsForSubPixelAccumulation(const RenderLayer* compositedAncest or, IntRect& localCompositingBounds, IntRect& relativeCompositingBounds, IntPoin t& delta);
223
221 void setBackgroundLayerPaintsFixedRootBackground(bool); 224 void setBackgroundLayerPaintsFixedRootBackground(bool);
222 225
223 GraphicsLayerPaintingPhase paintingPhaseForPrimaryLayer() const; 226 GraphicsLayerPaintingPhase paintingPhaseForPrimaryLayer() const;
224 227
225 IntSize contentOffsetInCompostingLayer() const; 228 LayoutSize contentOffsetInCompostingLayer() const;
226 // Result is transform origin in pixels. 229 // Result is transform origin in pixels.
227 FloatPoint3D computeTransformOrigin(const IntRect& borderBox) const; 230 FloatPoint3D computeTransformOrigin(const IntRect& borderBox) const;
228 // Result is perspective origin in pixels. 231 // Result is perspective origin in pixels.
229 FloatPoint computePerspectiveOrigin(const IntRect& borderBox) const; 232 FloatPoint computePerspectiveOrigin(const IntRect& borderBox) const;
230 233
231 void updateOpacity(const RenderStyle*); 234 void updateOpacity(const RenderStyle*);
232 void updateTransform(const RenderStyle*); 235 void updateTransform(const RenderStyle*);
233 void updateLayerBlendMode(const RenderStyle*); 236 void updateLayerBlendMode(const RenderStyle*);
234 void updateIsRootForIsolatedGroup(); 237 void updateIsRootForIsolatedGroup();
235 // Return the opacity value that this layer should use for compositing. 238 // Return the opacity value that this layer should use for compositing.
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 OwnPtr<GraphicsLayer> m_layerForHorizontalScrollbar; 334 OwnPtr<GraphicsLayer> m_layerForHorizontalScrollbar;
332 OwnPtr<GraphicsLayer> m_layerForVerticalScrollbar; 335 OwnPtr<GraphicsLayer> m_layerForVerticalScrollbar;
333 OwnPtr<GraphicsLayer> m_layerForScrollCorner; 336 OwnPtr<GraphicsLayer> m_layerForScrollCorner;
334 337
335 OwnPtr<WebAnimationProvider> m_animationProvider; 338 OwnPtr<WebAnimationProvider> m_animationProvider;
336 339
337 OwnPtr<GraphicsLayer> m_squashingContainmentLayer; // Only used if any squas hed layers exist, to contain the squashed layers as siblings to the rest of the GraphicsLayer tree chunk. 340 OwnPtr<GraphicsLayer> m_squashingContainmentLayer; // Only used if any squas hed layers exist, to contain the squashed layers as siblings to the rest of the GraphicsLayer tree chunk.
338 OwnPtr<GraphicsLayer> m_squashingLayer; // Only used if any squashed layers exist, this is the backing that squashed layers paint into. 341 OwnPtr<GraphicsLayer> m_squashingLayer; // Only used if any squashed layers exist, this is the backing that squashed layers paint into.
339 Vector<GraphicsLayerPaintInfo> m_squashedLayers; 342 Vector<GraphicsLayerPaintInfo> m_squashedLayers;
340 343
341 IntRect m_compositedBounds; 344 LayoutRect m_compositedBounds;
345 LayoutSize m_subpixelAccumulation; // The accumulated subpixel offset of the compositedBounds compared to absolute coordinates.
342 346
343 bool m_artificiallyInflatedBounds; // bounds had to be made non-zero to make transform-origin work 347 bool m_artificiallyInflatedBounds; // bounds had to be made non-zero to make transform-origin work
344 bool m_boundsConstrainedByClipping; 348 bool m_boundsConstrainedByClipping;
345 bool m_isMainFrameRenderViewLayer; 349 bool m_isMainFrameRenderViewLayer;
346 bool m_requiresOwnBackingStoreForIntrinsicReasons; 350 bool m_requiresOwnBackingStoreForIntrinsicReasons;
347 bool m_requiresOwnBackingStoreForAncestorReasons; 351 bool m_requiresOwnBackingStoreForAncestorReasons;
348 bool m_canCompositeFilters; 352 bool m_canCompositeFilters;
349 bool m_backgroundLayerPaintsFixedRootBackground; 353 bool m_backgroundLayerPaintsFixedRootBackground;
350 }; 354 };
351 355
352 } // namespace WebCore 356 } // namespace WebCore
353 357
354 #endif // CompositedLayerMapping_h 358 #endif // CompositedLayerMapping_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698