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

Side by Side Diff: third_party/WebKit/Source/core/layout/MultiColumnFragmentainerGroup.cpp

Issue 2750153002: getClientRects() shouldn't clip against any ancestors. (Closed)
Patch Set: Document tests. Use width/height instead of right/bottom, since that's easier to follow. 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
« no previous file with comments | « third_party/WebKit/Source/core/layout/MultiColumnFragmentainerGroup.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/layout/MultiColumnFragmentainerGroup.h" 5 #include "core/layout/MultiColumnFragmentainerGroup.h"
6 6
7 #include "core/layout/ColumnBalancer.h" 7 #include "core/layout/ColumnBalancer.h"
8 #include "core/layout/FragmentationContext.h" 8 #include "core/layout/FragmentationContext.h"
9 #include "core/layout/LayoutMultiColumnSet.h" 9 #include "core/layout/LayoutMultiColumnSet.h"
10 10
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 LayoutUnit logicalTop = logicalTopInFlowThreadAt(columnIndex); 409 LayoutUnit logicalTop = logicalTopInFlowThreadAt(columnIndex);
410 LayoutUnit portionLogicalHeight = logicalHeightInFlowThreadAt(columnIndex); 410 LayoutUnit portionLogicalHeight = logicalHeightInFlowThreadAt(columnIndex);
411 if (m_columnSet.isHorizontalWritingMode()) 411 if (m_columnSet.isHorizontalWritingMode())
412 return LayoutRect(LayoutUnit(), logicalTop, m_columnSet.pageLogicalWidth(), 412 return LayoutRect(LayoutUnit(), logicalTop, m_columnSet.pageLogicalWidth(),
413 portionLogicalHeight); 413 portionLogicalHeight);
414 return LayoutRect(logicalTop, LayoutUnit(), portionLogicalHeight, 414 return LayoutRect(logicalTop, LayoutUnit(), portionLogicalHeight,
415 m_columnSet.pageLogicalWidth()); 415 m_columnSet.pageLogicalWidth());
416 } 416 }
417 417
418 LayoutRect MultiColumnFragmentainerGroup::flowThreadPortionOverflowRectAt( 418 LayoutRect MultiColumnFragmentainerGroup::flowThreadPortionOverflowRectAt(
419 unsigned columnIndex) const { 419 unsigned columnIndex,
420 ClipRectAxesSelector axesSelector) const {
420 // This function determines the portion of the flow thread that paints for the 421 // This function determines the portion of the flow thread that paints for the
421 // column. Along the inline axis, columns are unclipped at outside edges 422 // column. Along the inline axis, columns are unclipped at outside edges
422 // (i.e., the first and last column in the set), and they clip to half the 423 // (i.e., the first and last column in the set), and they clip to half the
423 // column gap along interior edges. 424 // column gap along interior edges.
424 // 425 //
425 // In the block direction, we will not clip overflow out of the top of the 426 // In the block direction, we will not clip overflow out of the top of the
426 // first column, or out of the bottom of the last column. This applies only to 427 // first column, or out of the bottom of the last column. This applies only to
427 // the true first column and last column across all column sets. 428 // the true first column and last column across all column sets.
428 // 429 //
429 // FIXME: Eventually we will know overflow on a per-column basis, but we can't 430 // FIXME: Eventually we will know overflow on a per-column basis, but we can't
(...skipping 17 matching lines...) Expand all
447 // multicol container, in which case it should allow overflow. It will also 448 // multicol container, in which case it should allow overflow. It will also
448 // be clipped in the middle of adjacent column gaps. Care is taken here to 449 // be clipped in the middle of adjacent column gaps. Care is taken here to
449 // avoid rounding errors. 450 // avoid rounding errors.
450 LayoutRect overflowRect(LayoutRect::infiniteIntRect()); 451 LayoutRect overflowRect(LayoutRect::infiniteIntRect());
451 LayoutUnit columnGap = m_columnSet.columnGap(); 452 LayoutUnit columnGap = m_columnSet.columnGap();
452 if (m_columnSet.isHorizontalWritingMode()) { 453 if (m_columnSet.isHorizontalWritingMode()) {
453 if (!isFirstColumnInMulticolContainer) 454 if (!isFirstColumnInMulticolContainer)
454 overflowRect.shiftYEdgeTo(portionRect.y()); 455 overflowRect.shiftYEdgeTo(portionRect.y());
455 if (!isLastColumnInMulticolContainer) 456 if (!isLastColumnInMulticolContainer)
456 overflowRect.shiftMaxYEdgeTo(portionRect.maxY()); 457 overflowRect.shiftMaxYEdgeTo(portionRect.maxY());
457 if (!isLeftmostColumn) 458 if (axesSelector == BothAxes) {
458 overflowRect.shiftXEdgeTo(portionRect.x() - columnGap / 2); 459 if (!isLeftmostColumn)
459 if (!isRightmostColumn) 460 overflowRect.shiftXEdgeTo(portionRect.x() - columnGap / 2);
460 overflowRect.shiftMaxXEdgeTo(portionRect.maxX() + columnGap - 461 if (!isRightmostColumn) {
461 columnGap / 2); 462 overflowRect.shiftMaxXEdgeTo(portionRect.maxX() + columnGap -
463 columnGap / 2);
464 }
465 }
462 } else { 466 } else {
463 if (!isFirstColumnInMulticolContainer) 467 if (!isFirstColumnInMulticolContainer)
464 overflowRect.shiftXEdgeTo(portionRect.x()); 468 overflowRect.shiftXEdgeTo(portionRect.x());
465 if (!isLastColumnInMulticolContainer) 469 if (!isLastColumnInMulticolContainer)
466 overflowRect.shiftMaxXEdgeTo(portionRect.maxX()); 470 overflowRect.shiftMaxXEdgeTo(portionRect.maxX());
467 if (!isLeftmostColumn) 471 if (axesSelector == BothAxes) {
468 overflowRect.shiftYEdgeTo(portionRect.y() - columnGap / 2); 472 if (!isLeftmostColumn)
469 if (!isRightmostColumn) 473 overflowRect.shiftYEdgeTo(portionRect.y() - columnGap / 2);
470 overflowRect.shiftMaxYEdgeTo(portionRect.maxY() + columnGap - 474 if (!isRightmostColumn) {
471 columnGap / 2); 475 overflowRect.shiftMaxYEdgeTo(portionRect.maxY() + columnGap -
476 columnGap / 2);
477 }
478 }
472 } 479 }
473 return overflowRect; 480 return overflowRect;
474 } 481 }
475 482
476 unsigned MultiColumnFragmentainerGroup::columnIndexAtOffset( 483 unsigned MultiColumnFragmentainerGroup::columnIndexAtOffset(
477 LayoutUnit offsetInFlowThread, 484 LayoutUnit offsetInFlowThread,
478 LayoutBox::PageBoundaryRule pageBoundaryRule) const { 485 LayoutBox::PageBoundaryRule pageBoundaryRule) const {
479 // Handle the offset being out of range. 486 // Handle the offset being out of range.
480 if (offsetInFlowThread < m_logicalTopInFlowThread) 487 if (offsetInFlowThread < m_logicalTopInFlowThread)
481 return 0; 488 return 0;
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 MultiColumnFragmentainerGroupList::addExtraGroup() { 600 MultiColumnFragmentainerGroupList::addExtraGroup() {
594 append(MultiColumnFragmentainerGroup(m_columnSet)); 601 append(MultiColumnFragmentainerGroup(m_columnSet));
595 return last(); 602 return last();
596 } 603 }
597 604
598 void MultiColumnFragmentainerGroupList::deleteExtraGroups() { 605 void MultiColumnFragmentainerGroupList::deleteExtraGroups() {
599 shrink(1); 606 shrink(1);
600 } 607 }
601 608
602 } // namespace blink 609 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/MultiColumnFragmentainerGroup.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698