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

Side by Side Diff: third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp

Issue 2258523006: Convert Settings::rootLayerScrolls to RuntimeEnabledFeatures (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add RAII-style helper to toggle REF. Rebase. Created 4 years, 3 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 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/paint/PaintPropertyTreeBuilder.h" 5 #include "core/paint/PaintPropertyTreeBuilder.h"
6 6
7 #include "core/frame/FrameView.h" 7 #include "core/frame/FrameView.h"
8 #include "core/frame/LocalFrame.h" 8 #include "core/frame/LocalFrame.h"
9 #include "core/frame/Settings.h" 9 #include "core/frame/Settings.h"
10 #include "core/layout/LayoutInline.h" 10 #include "core/layout/LayoutInline.h"
11 #include "core/layout/LayoutPart.h" 11 #include "core/layout/LayoutPart.h"
12 #include "core/layout/svg/LayoutSVGRoot.h" 12 #include "core/layout/svg/LayoutSVGRoot.h"
13 #include "core/paint/ObjectPaintProperties.h" 13 #include "core/paint/ObjectPaintProperties.h"
14 #include "core/paint/PaintLayer.h" 14 #include "core/paint/PaintLayer.h"
15 #include "core/paint/SVGRootPainter.h" 15 #include "core/paint/SVGRootPainter.h"
16 #include "platform/transforms/TransformationMatrix.h" 16 #include "platform/transforms/TransformationMatrix.h"
17 #include "wtf/PtrUtil.h" 17 #include "wtf/PtrUtil.h"
18 #include <memory> 18 #include <memory>
19 19
20 namespace blink { 20 namespace blink {
21 21
22 void PaintPropertyTreeBuilder::buildTreeRootNodes(FrameView& rootFrame, PaintPro pertyTreeBuilderContext& context) 22 void PaintPropertyTreeBuilder::buildTreeRootNodes(FrameView& rootFrame, PaintPro pertyTreeBuilderContext& context)
23 { 23 {
24 Settings* settings = rootFrame.frame().settings(); 24 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled())
25 if (settings && settings->rootLayerScrolls())
26 return; 25 return;
27 26
28 if (!rootFrame.rootTransform() || rootFrame.rootTransform()->parent()) { 27 if (!rootFrame.rootTransform() || rootFrame.rootTransform()->parent()) {
29 rootFrame.setRootTransform(TransformPaintPropertyNode::create(nullptr, T ransformationMatrix(), FloatPoint3D())); 28 rootFrame.setRootTransform(TransformPaintPropertyNode::create(nullptr, T ransformationMatrix(), FloatPoint3D()));
30 rootFrame.setRootClip(ClipPaintPropertyNode::create(nullptr, rootFrame.r ootTransform(), FloatRoundedRect(LayoutRect::infiniteIntRect()))); 29 rootFrame.setRootClip(ClipPaintPropertyNode::create(nullptr, rootFrame.r ootTransform(), FloatRoundedRect(LayoutRect::infiniteIntRect())));
31 rootFrame.setRootEffect(EffectPaintPropertyNode::create(nullptr, 1.0)); 30 rootFrame.setRootEffect(EffectPaintPropertyNode::create(nullptr, 1.0));
32 } else { 31 } else {
33 DCHECK(rootFrame.rootClip() && !rootFrame.rootClip()->parent()); 32 DCHECK(rootFrame.rootClip() && !rootFrame.rootClip()->parent());
34 DCHECK(rootFrame.rootEffect() && !rootFrame.rootEffect()->parent()); 33 DCHECK(rootFrame.rootEffect() && !rootFrame.rootEffect()->parent());
35 } 34 }
36 35
37 context.current.transform = context.absolutePosition.transform = context.fix edPosition.transform = rootFrame.rootTransform(); 36 context.current.transform = context.absolutePosition.transform = context.fix edPosition.transform = rootFrame.rootTransform();
38 context.current.clip = context.absolutePosition.clip = context.fixedPosition .clip = rootFrame.rootClip(); 37 context.current.clip = context.absolutePosition.clip = context.fixedPosition .clip = rootFrame.rootClip();
39 context.currentEffect = rootFrame.rootEffect(); 38 context.currentEffect = rootFrame.rootEffect();
40 } 39 }
41 40
42 void PaintPropertyTreeBuilder::buildTreeNodes(FrameView& frameView, PaintPropert yTreeBuilderContext& context) 41 void PaintPropertyTreeBuilder::buildTreeNodes(FrameView& frameView, PaintPropert yTreeBuilderContext& context)
43 { 42 {
44 Settings* settings = frameView.frame().settings(); 43 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) {
45 if (settings && settings->rootLayerScrolls()) {
46 LayoutView* layoutView = frameView.layoutView(); 44 LayoutView* layoutView = frameView.layoutView();
47 if (!layoutView) 45 if (!layoutView)
48 return; 46 return;
49 47
50 TransformationMatrix frameTranslate; 48 TransformationMatrix frameTranslate;
51 frameTranslate.translate( 49 frameTranslate.translate(
52 frameView.x() + layoutView->location().x() + context.current.paintOf fset.x(), 50 frameView.x() + layoutView->location().x() + context.current.paintOf fset.x(),
53 frameView.y() + layoutView->location().y() + context.current.paintOf fset.y()); 51 frameView.y() + layoutView->location().y() + context.current.paintOf fset.y());
54 context.current.transform = layoutView->getMutableForPainting().ensureOb jectPaintProperties().createOrUpdatePaintOffsetTranslation( 52 context.current.transform = layoutView->getMutableForPainting().ensureOb jectPaintProperties().createOrUpdatePaintOffsetTranslation(
55 context.current.transform, frameTranslate, FloatPoint3D()); 53 context.current.transform, frameTranslate, FloatPoint3D());
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 } 186 }
189 187
190 if (ObjectPaintProperties* properties = object.getMutableForPainting().objec tPaintProperties()) 188 if (ObjectPaintProperties* properties = object.getMutableForPainting().objec tPaintProperties())
191 properties->clearTransform(); 189 properties->clearTransform();
192 } 190 }
193 191
194 void PaintPropertyTreeBuilder::updateEffect(const LayoutObject& object, PaintPro pertyTreeBuilderContext& context) 192 void PaintPropertyTreeBuilder::updateEffect(const LayoutObject& object, PaintPro pertyTreeBuilderContext& context)
195 { 193 {
196 if (object.isLayoutView() && !context.currentEffect) { 194 if (object.isLayoutView() && !context.currentEffect) {
197 const LayoutView& layoutView = toLayoutView(object); 195 const LayoutView& layoutView = toLayoutView(object);
198 DCHECK(layoutView.frameView()->frame().settings()->rootLayerScrolls()); 196 DCHECK(RuntimeEnabledFeatures::rootLayerScrollingEnabled());
199 DCHECK(layoutView.frameView()->frame().isMainFrame()); 197 DCHECK(layoutView.frameView()->frame().isMainFrame());
200 context.currentEffect = layoutView.getMutableForPainting().ensureObjectP aintProperties().createOrUpdateEffect(nullptr, 1.0); 198 context.currentEffect = layoutView.getMutableForPainting().ensureObjectP aintProperties().createOrUpdateEffect(nullptr, 1.0);
201 return; 199 return;
202 } 200 }
203 201
204 if (!object.styleRef().hasOpacity()) { 202 if (!object.styleRef().hasOpacity()) {
205 if (ObjectPaintProperties* properties = object.getMutableForPainting().o bjectPaintProperties()) 203 if (ObjectPaintProperties* properties = object.getMutableForPainting().o bjectPaintProperties())
206 properties->clearEffect(); 204 properties->clearEffect();
207 return; 205 return;
208 } 206 }
(...skipping 27 matching lines...) Expand all
236 return; 234 return;
237 235
238 std::unique_ptr<ObjectPaintProperties::LocalBorderBoxProperties> borderBoxCo ntext = 236 std::unique_ptr<ObjectPaintProperties::LocalBorderBoxProperties> borderBoxCo ntext =
239 wrapUnique(new ObjectPaintProperties::LocalBorderBoxProperties); 237 wrapUnique(new ObjectPaintProperties::LocalBorderBoxProperties);
240 borderBoxContext->paintOffset = context.current.paintOffset; 238 borderBoxContext->paintOffset = context.current.paintOffset;
241 borderBoxContext->propertyTreeState = PropertyTreeState(context.current.tran sform, context.current.clip, context.currentEffect); 239 borderBoxContext->propertyTreeState = PropertyTreeState(context.current.tran sform, context.current.clip, context.currentEffect);
242 240
243 if (!context.current.clip) { 241 if (!context.current.clip) {
244 DCHECK(object.isLayoutView()); 242 DCHECK(object.isLayoutView());
245 DCHECK(toLayoutView(object).frameView()->frame().isMainFrame()); 243 DCHECK(toLayoutView(object).frameView()->frame().isMainFrame());
246 DCHECK(toLayoutView(object).frameView()->frame().settings()->rootLayerSc rolls()); 244 DCHECK(RuntimeEnabledFeatures::rootLayerScrollingEnabled());
247 borderBoxContext->propertyTreeState.clip = ClipPaintPropertyNode::create (nullptr, context.current.transform, FloatRoundedRect(LayoutRect::infiniteIntRec t())); 245 borderBoxContext->propertyTreeState.clip = ClipPaintPropertyNode::create (nullptr, context.current.transform, FloatRoundedRect(LayoutRect::infiniteIntRec t()));
248 context.current.clip = borderBoxContext->propertyTreeState.clip.get(); 246 context.current.clip = borderBoxContext->propertyTreeState.clip.get();
249 } 247 }
250 248
251 object.getMutableForPainting().ensureObjectPaintProperties().setLocalBorderB oxProperties(std::move(borderBoxContext)); 249 object.getMutableForPainting().ensureObjectPaintProperties().setLocalBorderB oxProperties(std::move(borderBoxContext));
252 250
253 } 251 }
254 252
255 // TODO(trchen): Remove this once we bake the paint offset into frameRect. 253 // TODO(trchen): Remove this once we bake the paint offset into frameRect.
256 void PaintPropertyTreeBuilder::updateScrollbarPaintOffset(const LayoutObject& ob ject, const PaintPropertyTreeBuilderContext& context) 254 void PaintPropertyTreeBuilder::updateScrollbarPaintOffset(const LayoutObject& ob ject, const PaintPropertyTreeBuilderContext& context)
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 context.current.shouldFlattenInheritedTransform = false; 353 context.current.shouldFlattenInheritedTransform = false;
356 context.current.renderingContextID = 0; 354 context.current.renderingContextID = 0;
357 } 355 }
358 356
359 void PaintPropertyTreeBuilder::updateScrollTranslation(const LayoutObject& objec t, PaintPropertyTreeBuilderContext& context) 357 void PaintPropertyTreeBuilder::updateScrollTranslation(const LayoutObject& objec t, PaintPropertyTreeBuilderContext& context)
360 { 358 {
361 if (object.isBoxModelObject() && object.hasOverflowClip()) { 359 if (object.isBoxModelObject() && object.hasOverflowClip()) {
362 PaintLayer* layer = toLayoutBoxModelObject(object).layer(); 360 PaintLayer* layer = toLayoutBoxModelObject(object).layer();
363 DCHECK(layer); 361 DCHECK(layer);
364 DoubleSize scrollOffset = layer->getScrollableArea()->scrollOffset(); 362 DoubleSize scrollOffset = layer->getScrollableArea()->scrollOffset();
365 bool forceScrollingForLayoutView = false; 363 bool forceScrollingForLayoutView = object.isLayoutView() && RuntimeEnabl edFeatures::rootLayerScrollingEnabled();
366 if (object.isLayoutView()) {
367 Settings* settings = object.document().settings();
368 forceScrollingForLayoutView = (settings && settings->rootLayerScroll s());
369 }
370 if (forceScrollingForLayoutView || !scrollOffset.isZero() || layer->scro llsOverflow()) { 364 if (forceScrollingForLayoutView || !scrollOffset.isZero() || layer->scro llsOverflow()) {
371 TransformationMatrix matrix = TransformationMatrix().translate(-scro llOffset.width(), -scrollOffset.height()); 365 TransformationMatrix matrix = TransformationMatrix().translate(-scro llOffset.width(), -scrollOffset.height());
372 context.current.transform = object.getMutableForPainting().ensureObj ectPaintProperties().createOrUpdateScrollTranslation( 366 context.current.transform = object.getMutableForPainting().ensureObj ectPaintProperties().createOrUpdateScrollTranslation(
373 context.current.transform, matrix, FloatPoint3D(), context.curre nt.shouldFlattenInheritedTransform, context.current.renderingContextID); 367 context.current.transform, matrix, FloatPoint3D(), context.curre nt.shouldFlattenInheritedTransform, context.current.renderingContextID);
374 context.current.shouldFlattenInheritedTransform = false; 368 context.current.shouldFlattenInheritedTransform = false;
375 return; 369 return;
376 } 370 }
377 } 371 }
378 372
379 if (ObjectPaintProperties* properties = object.getMutableForPainting().objec tPaintProperties()) 373 if (ObjectPaintProperties* properties = object.getMutableForPainting().objec tPaintProperties())
380 properties->clearScrollTranslation(); 374 properties->clearScrollTranslation();
381 } 375 }
382 376
383 void PaintPropertyTreeBuilder::updateOutOfFlowContext(const LayoutObject& object , PaintPropertyTreeBuilderContext& context) 377 void PaintPropertyTreeBuilder::updateOutOfFlowContext(const LayoutObject& object , PaintPropertyTreeBuilderContext& context)
384 { 378 {
385 if (object.canContainAbsolutePositionObjects()) { 379 if (object.canContainAbsolutePositionObjects()) {
386 context.absolutePosition = context.current; 380 context.absolutePosition = context.current;
387 context.containerForAbsolutePosition = &object; 381 context.containerForAbsolutePosition = &object;
388 } 382 }
389 383
390 if (object.isLayoutView()) { 384 if (object.isLayoutView()) {
391 Settings* settings = object.document().settings(); 385 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) {
392 if (settings && settings->rootLayerScrolls()) {
393 context.fixedPosition = context.current; 386 context.fixedPosition = context.current;
394 const TransformPaintPropertyNode* transform = object.objectPaintProp erties()->paintOffsetTranslation(); 387 const TransformPaintPropertyNode* transform = object.objectPaintProp erties()->paintOffsetTranslation();
395 DCHECK(transform); 388 DCHECK(transform);
396 context.fixedPosition.transform = transform; 389 context.fixedPosition.transform = transform;
397 } 390 }
398 } else if (object.canContainFixedPositionObjects()) { 391 } else if (object.canContainFixedPositionObjects()) {
399 context.fixedPosition = context.current; 392 context.fixedPosition = context.current;
400 } else if (object.getMutableForPainting().objectPaintProperties() && object. objectPaintProperties()->cssClip()) { 393 } else if (object.getMutableForPainting().objectPaintProperties() && object. objectPaintProperties()->cssClip()) {
401 // CSS clip applies to all descendants, even if this object is not a con taining block 394 // CSS clip applies to all descendants, even if this object is not a con taining block
402 // ancestor of the descendant. It is okay for absolute-position descenda nts because 395 // ancestor of the descendant. It is okay for absolute-position descenda nts because
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 return; 483 return;
491 484
492 updateOverflowClip(object, context); 485 updateOverflowClip(object, context);
493 updatePerspective(object, context); 486 updatePerspective(object, context);
494 updateSvgLocalToBorderBoxTransform(object, context); 487 updateSvgLocalToBorderBoxTransform(object, context);
495 updateScrollTranslation(object, context); 488 updateScrollTranslation(object, context);
496 updateOutOfFlowContext(object, context); 489 updateOutOfFlowContext(object, context);
497 } 490 }
498 491
499 } // namespace blink 492 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698