 Chromium Code Reviews
 Chromium Code Reviews Issue 2650873002:
  Refactor PaintLayer location and offset calculation especially for floats  (Closed)
    
  
    Issue 2650873002:
  Refactor PaintLayer location and offset calculation especially for floats  (Closed) 
  | OLD | NEW | 
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/PaintLayer.h" | 5 #include "core/paint/PaintLayer.h" | 
| 6 | 6 | 
| 7 #include "core/html/HTMLIFrameElement.h" | 7 #include "core/html/HTMLIFrameElement.h" | 
| 8 #include "core/layout/LayoutBoxModelObject.h" | 8 #include "core/layout/LayoutBoxModelObject.h" | 
| 9 #include "core/layout/LayoutTestHelper.h" | 9 #include "core/layout/LayoutTestHelper.h" | 
| 10 #include "core/layout/LayoutView.h" | 10 #include "core/layout/LayoutView.h" | 
| (...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 543 PaintLayer* floating = | 543 PaintLayer* floating = | 
| 544 toLayoutBoxModelObject(getLayoutObjectByElementId("floating"))->layer(); | 544 toLayoutBoxModelObject(getLayoutObjectByElementId("floating"))->layer(); | 
| 545 PaintLayer* absolute = | 545 PaintLayer* absolute = | 
| 546 toLayoutBoxModelObject(getLayoutObjectByElementId("absolute"))->layer(); | 546 toLayoutBoxModelObject(getLayoutObjectByElementId("absolute"))->layer(); | 
| 547 PaintLayer* span = | 547 PaintLayer* span = | 
| 548 toLayoutBoxModelObject(getLayoutObjectByElementId("span"))->layer(); | 548 toLayoutBoxModelObject(getLayoutObjectByElementId("span"))->layer(); | 
| 549 PaintLayer* container = | 549 PaintLayer* container = | 
| 550 toLayoutBoxModelObject(getLayoutObjectByElementId("container"))->layer(); | 550 toLayoutBoxModelObject(getLayoutObjectByElementId("container"))->layer(); | 
| 551 | 551 | 
| 552 EXPECT_EQ(span, floating->parent()); | 552 EXPECT_EQ(span, floating->parent()); | 
| 553 EXPECT_EQ(container, floating->containingLayer()); | |
| 553 EXPECT_EQ(span, absolute->parent()); | 554 EXPECT_EQ(span, absolute->parent()); | 
| 555 EXPECT_EQ(span, absolute->containingLayer()); | |
| 554 EXPECT_EQ(container, span->parent()); | 556 EXPECT_EQ(container, span->parent()); | 
| 557 EXPECT_EQ(container, span->containingLayer()); | |
| 555 | 558 | 
| 556 EXPECT_EQ(LayoutPoint(83, 83), floating->location()); | 559 EXPECT_EQ(LayoutPoint(83, 83), floating->location()); | 
| 557 EXPECT_EQ(LayoutPoint(50, 50), absolute->location()); | 560 EXPECT_EQ(LayoutPoint(50, 50), absolute->location()); | 
| 558 EXPECT_EQ(LayoutPoint(133, 133), span->location()); | 561 EXPECT_EQ(LayoutPoint(133, 133), span->location()); | 
| 559 EXPECT_EQ(LayoutPoint(20, 20), container->location()); | 562 EXPECT_EQ(LayoutPoint(20, 20), container->location()); | 
| 560 | 563 | 
| 561 EXPECT_EQ(LayoutPoint(-50, -50), floating->visualOffsetFromAncestor(span)); | 564 EXPECT_EQ(LayoutPoint(-50, -50), floating->visualOffsetFromAncestor(span)); | 
| 562 EXPECT_EQ(LayoutPoint(50, 50), absolute->visualOffsetFromAncestor(span)); | 565 EXPECT_EQ(LayoutPoint(50, 50), absolute->visualOffsetFromAncestor(span)); | 
| 563 EXPECT_EQ(LayoutPoint(83, 83), floating->visualOffsetFromAncestor(container)); | 566 EXPECT_EQ(LayoutPoint(83, 83), floating->visualOffsetFromAncestor(container)); | 
| 564 EXPECT_EQ(LayoutPoint(183, 183), | 567 EXPECT_EQ(LayoutPoint(183, 183), | 
| 565 absolute->visualOffsetFromAncestor(container)); | 568 absolute->visualOffsetFromAncestor(container)); | 
| 566 } | 569 } | 
| 567 | 570 | 
| 571 TEST_P(PaintLayerTest, FloatLayerUnderInlineLayerScrolled) { | |
| 572 setBodyInnerHTML( | |
| 573 "<div id='container' style='overflow: scroll; width: 50px; height: 50px'>" | |
| 574 " <span id='span' style='position: relative; top: 100px; left: 100px'>" | |
| 575 " <div id='floating'" | |
| 576 " style='float: left; position: relative; top: 50px; left: 50px'>" | |
| 577 " </div>" | |
| 578 " </span>" | |
| 579 " <div style='height: 1000px'></div>" | |
| 580 "</div>"); | |
| 581 | |
| 582 PaintLayer* floating = | |
| 583 toLayoutBoxModelObject(getLayoutObjectByElementId("floating"))->layer(); | |
| 584 PaintLayer* span = | |
| 585 toLayoutBoxModelObject(getLayoutObjectByElementId("span"))->layer(); | |
| 586 PaintLayer* container = | |
| 587 toLayoutBoxModelObject(getLayoutObjectByElementId("container"))->layer(); | |
| 588 container->getScrollableArea()->setScrollOffset(ScrollOffset(0, 400), | |
| 589 ProgrammaticScroll); | |
| 590 | |
| 591 EXPECT_EQ(span, floating->parent()); | |
| 592 EXPECT_EQ(container, floating->containingLayer()); | |
| 593 EXPECT_EQ(container, span->parent()); | |
| 594 EXPECT_EQ(container, span->containingLayer()); | |
| 595 | |
| 596 EXPECT_EQ(LayoutPoint(50, -350), floating->location()); | |
| 597 EXPECT_EQ(LayoutPoint(100, -300), span->location()); | |
| 598 | |
| 599 EXPECT_EQ(LayoutPoint(-50, -50), floating->visualOffsetFromAncestor(span)); | |
| 600 EXPECT_EQ(LayoutPoint(50, -350), | |
| 601 floating->visualOffsetFromAncestor(container)); | |
| 602 } | |
| 603 | |
| 604 TEST_P(PaintLayerTest, ColomnSpanLayerUnderExtraLayerScrolled) { | |
| 
chrishtr
2017/01/27 01:00:06
nit: Column
 
Xianzhu
2017/01/27 01:22:20
Done.
 | |
| 605 setBodyInnerHTML( | |
| 606 "<div id='columns' style='overflow: hidden; width: 80px; height: 80px; " | |
| 607 " columns: 2; column-gap: 0'>" | |
| 608 " <div id='extraLayer'" | |
| 609 " style='position: relative; top: 100px; left: 100px'>" | |
| 610 " <div id='spanner' style='column-span: all; position: relative; " | |
| 611 " top: 50px; left: 50px'>" | |
| 612 " </div>" | |
| 613 " </div>" | |
| 614 " <div style='height: 1000px'></div>" | |
| 615 "</div>"); | |
| 616 | |
| 617 PaintLayer* spanner = | |
| 618 toLayoutBoxModelObject(getLayoutObjectByElementId("spanner"))->layer(); | |
| 619 PaintLayer* extraLayer = | |
| 620 toLayoutBoxModelObject(getLayoutObjectByElementId("extraLayer"))->layer(); | |
| 621 PaintLayer* columns = | |
| 622 toLayoutBoxModelObject(getLayoutObjectByElementId("columns"))->layer(); | |
| 623 columns->getScrollableArea()->setScrollOffset(ScrollOffset(200, 0), | |
| 624 ProgrammaticScroll); | |
| 625 | |
| 626 EXPECT_EQ(extraLayer, spanner->parent()); | |
| 627 EXPECT_EQ(columns, spanner->containingLayer()); | |
| 628 EXPECT_EQ(columns, extraLayer->parent()->parent()); | |
| 629 EXPECT_EQ(columns, extraLayer->containingLayer()->parent()); | |
| 630 | |
| 631 EXPECT_EQ(LayoutPoint(-150, 50), spanner->location()); | |
| 632 EXPECT_EQ(LayoutPoint(100, 100), extraLayer->location()); | |
| 633 // -60 = 2nd-column-x(40) - scroll-offset-x(200) + x-location(100) | |
| 634 // 20 = y-location(100) - column-height(80) | |
| 635 EXPECT_EQ(LayoutPoint(-60, 20), | |
| 636 extraLayer->visualOffsetFromAncestor(columns)); | |
| 637 EXPECT_EQ(LayoutPoint(-150, 50), spanner->visualOffsetFromAncestor(columns)); | |
| 638 } | |
| 639 | |
| 568 TEST_P(PaintLayerTest, FloatLayerUnderBlockUnderInlineLayer) { | 640 TEST_P(PaintLayerTest, FloatLayerUnderBlockUnderInlineLayer) { | 
| 569 setBodyInnerHTML( | 641 setBodyInnerHTML( | 
| 570 "<style>body {margin: 0}</style>" | 642 "<style>body {margin: 0}</style>" | 
| 571 "<span id='span' style='position: relative; top: 100px; left: 100px'>" | 643 "<span id='span' style='position: relative; top: 100px; left: 100px'>" | 
| 572 " <div style='display: inline-block; margin: 33px'>" | 644 " <div style='display: inline-block; margin: 33px'>" | 
| 573 " <div id='floating'" | 645 " <div id='floating'" | 
| 574 " style='float: left; position: relative; top: 50px; left: 50px'>" | 646 " style='float: left; position: relative; top: 50px; left: 50px'>" | 
| 575 " </div>" | 647 " </div>" | 
| 576 " </div>" | 648 " </div>" | 
| 577 "</span>"); | 649 "</span>"); | 
| 578 | 650 | 
| 579 PaintLayer* floating = | 651 PaintLayer* floating = | 
| 580 toLayoutBoxModelObject(getLayoutObjectByElementId("floating"))->layer(); | 652 toLayoutBoxModelObject(getLayoutObjectByElementId("floating"))->layer(); | 
| 581 PaintLayer* span = | 653 PaintLayer* span = | 
| 582 toLayoutBoxModelObject(getLayoutObjectByElementId("span"))->layer(); | 654 toLayoutBoxModelObject(getLayoutObjectByElementId("span"))->layer(); | 
| 583 | 655 | 
| 584 EXPECT_EQ(span, floating->parent()); | 656 EXPECT_EQ(span, floating->parent()); | 
| 657 EXPECT_EQ(span, floating->containingLayer()); | |
| 585 | 658 | 
| 586 EXPECT_EQ(LayoutPoint(83, 83), floating->location()); | 659 EXPECT_EQ(LayoutPoint(83, 83), floating->location()); | 
| 587 EXPECT_EQ(LayoutPoint(100, 100), span->location()); | 660 EXPECT_EQ(LayoutPoint(100, 100), span->location()); | 
| 588 EXPECT_EQ(LayoutPoint(83, 83), floating->visualOffsetFromAncestor(span)); | 661 EXPECT_EQ(LayoutPoint(83, 83), floating->visualOffsetFromAncestor(span)); | 
| 589 EXPECT_EQ(LayoutPoint(183, 183), floating->visualOffsetFromAncestor( | 662 EXPECT_EQ(LayoutPoint(183, 183), floating->visualOffsetFromAncestor( | 
| 590 document().layoutView()->layer())); | 663 document().layoutView()->layer())); | 
| 591 } | 664 } | 
| 592 | 665 | 
| 593 TEST_P(PaintLayerTest, CompositingContainerFloatingIframe) { | 666 TEST_P(PaintLayerTest, CompositingContainerFloatingIframe) { | 
| 594 enableCompositing(); | 667 enableCompositing(); | 
| (...skipping 25 matching lines...) Expand all Loading... | |
| 620 | 693 | 
| 621 // enclosingLayerWithCompositedLayerMapping is not needed or applicable to | 694 // enclosingLayerWithCompositedLayerMapping is not needed or applicable to | 
| 622 // SPv2. | 695 // SPv2. | 
| 623 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { | 696 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { | 
| 624 EXPECT_EQ(compositedContainer, | 697 EXPECT_EQ(compositedContainer, | 
| 625 target->enclosingLayerWithCompositedLayerMapping(ExcludeSelf)); | 698 target->enclosingLayerWithCompositedLayerMapping(ExcludeSelf)); | 
| 626 } | 699 } | 
| 627 } | 700 } | 
| 628 | 701 | 
| 629 } // namespace blink | 702 } // namespace blink | 
| OLD | NEW |