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

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

Issue 2689993003: Account for borders and padding when calculating background tile size. (Closed)
Patch Set: Rebaselined tests again. Created 3 years, 9 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/BackgroundImageGeometry.h" 5 #include "core/paint/BackgroundImageGeometry.h"
6 6
7 #include "core/frame/FrameView.h" 7 #include "core/frame/FrameView.h"
8 #include "core/layout/LayoutBox.h" 8 #include "core/layout/LayoutBox.h"
9 #include "core/layout/LayoutBoxModelObject.h" 9 #include "core/layout/LayoutBoxModelObject.h"
10 #include "core/layout/LayoutTableCell.h" 10 #include "core/layout/LayoutTableCell.h"
(...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 513
514 setDestRect(viewportRect); 514 setDestRect(viewportRect);
515 positioningArea = viewportRect; 515 positioningArea = viewportRect;
516 } 516 }
517 517
518 LayoutSize fillTileSize( 518 LayoutSize fillTileSize(
519 calculateFillTileSize(positioningBox, fillLayer, positioningArea.size())); 519 calculateFillTileSize(positioningBox, fillLayer, positioningArea.size()));
520 // It's necessary to apply the heuristic here prior to any further 520 // It's necessary to apply the heuristic here prior to any further
521 // calculations to avoid incorrectly using sub-pixel values that won't be 521 // calculations to avoid incorrectly using sub-pixel values that won't be
522 // present in the painted tile. 522 // present in the painted tile.
523 setTileSize(applySubPixelHeuristicToImageSize(fillTileSize, m_destRect)); 523 setTileSize(applySubPixelHeuristicToImageSize(fillTileSize, positioningArea));
524 524
525 EFillRepeat backgroundRepeatX = fillLayer.repeatX(); 525 EFillRepeat backgroundRepeatX = fillLayer.repeatX();
526 EFillRepeat backgroundRepeatY = fillLayer.repeatY(); 526 EFillRepeat backgroundRepeatY = fillLayer.repeatY();
527 LayoutUnit unsnappedAvailableWidth = 527 LayoutUnit unsnappedAvailableWidth =
528 positioningArea.width() - fillTileSize.width(); 528 positioningArea.width() - fillTileSize.width();
529 LayoutUnit unsnappedAvailableHeight = 529 LayoutUnit unsnappedAvailableHeight =
530 positioningArea.height() - fillTileSize.height(); 530 positioningArea.height() - fillTileSize.height();
531 LayoutSize positioningAreaSize = 531 LayoutSize positioningAreaSize =
532 LayoutSize(snapSizeToPixel(positioningArea.width(), m_destRect.x()), 532 LayoutSize(snapSizeToPixel(positioningArea.width(), m_destRect.x()),
533 snapSizeToPixel(positioningArea.height(), m_destRect.y())); 533 snapSizeToPixel(positioningArea.height(), m_destRect.y()));
(...skipping 12 matching lines...) Expand all
546 LayoutUnit roundedWidth = positioningAreaSize.width() / nrTiles; 546 LayoutUnit roundedWidth = positioningAreaSize.width() / nrTiles;
547 547
548 // Maintain aspect ratio if background-size: auto is set 548 // Maintain aspect ratio if background-size: auto is set
549 if (fillLayer.size().size.height().isAuto() && 549 if (fillLayer.size().size.height().isAuto() &&
550 backgroundRepeatY != RoundFill) { 550 backgroundRepeatY != RoundFill) {
551 fillTileSize.setHeight(fillTileSize.height() * roundedWidth / 551 fillTileSize.setHeight(fillTileSize.height() * roundedWidth /
552 fillTileSize.width()); 552 fillTileSize.width());
553 } 553 }
554 fillTileSize.setWidth(roundedWidth); 554 fillTileSize.setWidth(roundedWidth);
555 555
556 setTileSize(applySubPixelHeuristicToImageSize(fillTileSize, m_destRect)); 556 setTileSize(
557 applySubPixelHeuristicToImageSize(fillTileSize, positioningArea));
557 setPhaseX(tileSize().width() 558 setPhaseX(tileSize().width()
558 ? LayoutUnit(roundf( 559 ? LayoutUnit(roundf(
559 tileSize().width() - 560 tileSize().width() -
560 fmodf((computedXPosition + left), tileSize().width()))) 561 fmodf((computedXPosition + left), tileSize().width())))
561 : LayoutUnit()); 562 : LayoutUnit());
562 setSpaceSize(LayoutSize()); 563 setSpaceSize(LayoutSize());
563 } 564 }
564 565
565 LayoutUnit computedYPosition = 566 LayoutUnit computedYPosition =
566 roundedMinimumValueForLength(fillLayer.yPosition(), availableHeight) - 567 roundedMinimumValueForLength(fillLayer.yPosition(), availableHeight) -
567 offsetInBackground.y(); 568 offsetInBackground.y();
568 if (backgroundRepeatY == RoundFill && 569 if (backgroundRepeatY == RoundFill &&
569 positioningAreaSize.height() > LayoutUnit() && 570 positioningAreaSize.height() > LayoutUnit() &&
570 fillTileSize.height() > LayoutUnit()) { 571 fillTileSize.height() > LayoutUnit()) {
571 int nrTiles = std::max( 572 int nrTiles = std::max(
572 1, roundToInt(positioningAreaSize.height() / fillTileSize.height())); 573 1, roundToInt(positioningAreaSize.height() / fillTileSize.height()));
573 LayoutUnit roundedHeight = positioningAreaSize.height() / nrTiles; 574 LayoutUnit roundedHeight = positioningAreaSize.height() / nrTiles;
574 // Maintain aspect ratio if background-size: auto is set 575 // Maintain aspect ratio if background-size: auto is set
575 if (fillLayer.size().size.width().isAuto() && 576 if (fillLayer.size().size.width().isAuto() &&
576 backgroundRepeatX != RoundFill) { 577 backgroundRepeatX != RoundFill) {
577 fillTileSize.setWidth(fillTileSize.width() * roundedHeight / 578 fillTileSize.setWidth(fillTileSize.width() * roundedHeight /
578 fillTileSize.height()); 579 fillTileSize.height());
579 } 580 }
580 fillTileSize.setHeight(roundedHeight); 581 fillTileSize.setHeight(roundedHeight);
581 582
582 setTileSize(applySubPixelHeuristicToImageSize(fillTileSize, m_destRect)); 583 setTileSize(
584 applySubPixelHeuristicToImageSize(fillTileSize, positioningArea));
583 setPhaseY(tileSize().height() 585 setPhaseY(tileSize().height()
584 ? LayoutUnit(roundf( 586 ? LayoutUnit(roundf(
585 tileSize().height() - 587 tileSize().height() -
586 fmodf((computedYPosition + top), tileSize().height()))) 588 fmodf((computedYPosition + top), tileSize().height())))
587 : LayoutUnit()); 589 : LayoutUnit());
588 setSpaceSize(LayoutSize()); 590 setSpaceSize(LayoutSize());
589 } 591 }
590 592
591 if (backgroundRepeatX == RepeatFill) { 593 if (backgroundRepeatX == RepeatFill) {
592 setRepeatX(fillLayer, fillTileSize.width(), availableWidth, 594 setRepeatX(fillLayer, fillTileSize.width(), availableWidth,
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
634 useFixedAttachment(paintRect.location()); 636 useFixedAttachment(paintRect.location());
635 637
636 // Clip the final output rect to the paint rect 638 // Clip the final output rect to the paint rect
637 m_destRect.intersect(paintRect); 639 m_destRect.intersect(paintRect);
638 640
639 // Snap as-yet unsnapped values. 641 // Snap as-yet unsnapped values.
640 setDestRect(LayoutRect(pixelSnappedIntRect(m_destRect))); 642 setDestRect(LayoutRect(pixelSnappedIntRect(m_destRect)));
641 } 643 }
642 644
643 } // namespace blink 645 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/LayoutTests/platform/win7/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698