| OLD | NEW |
| 1 /** | 1 /** |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 2000 Simon Hausmann <hausmann@kde.org> | 3 * (C) 2000 Simon Hausmann <hausmann@kde.org> |
| 4 * (C) 2000 Stefan Schimanski (1Stein@gmx.de) | 4 * (C) 2000 Stefan Schimanski (1Stein@gmx.de) |
| 5 * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. | 5 * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. |
| 6 * | 6 * |
| 7 * This library is free software; you can redistribute it and/or | 7 * This library is free software; you can redistribute it and/or |
| 8 * modify it under the terms of the GNU Library General Public | 8 * modify it under the terms of the GNU Library General Public |
| 9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
| 10 * version 2 of the License, or (at your option) any later version. | 10 * version 2 of the License, or (at your option) any later version. |
| (...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 464 | 464 |
| 465 if (m_rows.m_sizes.size() != rows || m_cols.m_sizes.size() != cols) { | 465 if (m_rows.m_sizes.size() != rows || m_cols.m_sizes.size() != cols) { |
| 466 m_rows.resize(rows); | 466 m_rows.resize(rows); |
| 467 m_cols.resize(cols); | 467 m_cols.resize(cols); |
| 468 } | 468 } |
| 469 | 469 |
| 470 LayoutUnit borderThickness = frameSet()->border(); | 470 LayoutUnit borderThickness = frameSet()->border(); |
| 471 layOutAxis(m_rows, frameSet()->rowLengths(), height() - (rows - 1) * borderT
hickness); | 471 layOutAxis(m_rows, frameSet()->rowLengths(), height() - (rows - 1) * borderT
hickness); |
| 472 layOutAxis(m_cols, frameSet()->colLengths(), width() - (cols - 1) * borderTh
ickness); | 472 layOutAxis(m_cols, frameSet()->colLengths(), width() - (cols - 1) * borderTh
ickness); |
| 473 | 473 |
| 474 if (flattenFrameSet()) | 474 positionFrames(); |
| 475 positionFramesWithFlattening(); | |
| 476 else | |
| 477 positionFrames(); | |
| 478 | 475 |
| 479 RenderBox::layout(); | 476 RenderBox::layout(); |
| 480 | 477 |
| 481 computeEdgeInfo(); | 478 computeEdgeInfo(); |
| 482 | 479 |
| 483 updateLayerTransform(); | 480 updateLayerTransform(); |
| 484 | 481 |
| 485 if (doFullRepaint) { | 482 if (doFullRepaint) { |
| 486 repaintUsingContainer(repaintContainer, pixelSnappedIntRect(oldBounds)); | 483 repaintUsingContainer(repaintContainer, pixelSnappedIntRect(oldBounds)); |
| 487 LayoutRect newBounds = clippedOverflowRectForRepaint(repaintContainer); | 484 LayoutRect newBounds = clippedOverflowRectForRepaint(repaintContainer); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 528 } | 525 } |
| 529 | 526 |
| 530 // all the remaining frames are hidden to avoid ugly spurious unflowed frame
s | 527 // all the remaining frames are hidden to avoid ugly spurious unflowed frame
s |
| 531 for (; child; child = child->nextSiblingBox()) { | 528 for (; child; child = child->nextSiblingBox()) { |
| 532 child->setWidth(0); | 529 child->setWidth(0); |
| 533 child->setHeight(0); | 530 child->setHeight(0); |
| 534 child->setNeedsLayout(false); | 531 child->setNeedsLayout(false); |
| 535 } | 532 } |
| 536 } | 533 } |
| 537 | 534 |
| 538 void RenderFrameSet::positionFramesWithFlattening() | |
| 539 { | |
| 540 RenderBox* child = firstChildBox(); | |
| 541 if (!child) | |
| 542 return; | |
| 543 | |
| 544 int rows = frameSet()->totalRows(); | |
| 545 int cols = frameSet()->totalCols(); | |
| 546 | |
| 547 int borderThickness = frameSet()->border(); | |
| 548 bool repaintNeeded = false; | |
| 549 | |
| 550 // calculate frameset height based on actual content height to eliminate scr
olling | |
| 551 bool out = false; | |
| 552 for (int r = 0; r < rows && !out; r++) { | |
| 553 int extra = 0; | |
| 554 int height = m_rows.m_sizes[r]; | |
| 555 | |
| 556 for (int c = 0; c < cols; c++) { | |
| 557 IntRect oldFrameRect = pixelSnappedIntRect(child->frameRect()); | |
| 558 | |
| 559 int width = m_cols.m_sizes[c]; | |
| 560 | |
| 561 bool fixedWidth = frameSet()->colLengths() && frameSet()->colLengths
()[c].isFixed(); | |
| 562 bool fixedHeight = frameSet()->rowLengths() && frameSet()->rowLength
s()[r].isFixed(); | |
| 563 | |
| 564 // has to be resized and itself resize its contents | |
| 565 if (!fixedWidth) | |
| 566 child->setWidth(width ? width + extra / (cols - c) : 0); | |
| 567 else | |
| 568 child->setWidth(width); | |
| 569 child->setHeight(height); | |
| 570 | |
| 571 child->setNeedsLayout(true); | |
| 572 | |
| 573 if (child->isFrameSet()) | |
| 574 toRenderFrameSet(child)->layout(); | |
| 575 else | |
| 576 toRenderFrame(child)->layoutWithFlattening(fixedWidth, fixedHeig
ht); | |
| 577 | |
| 578 if (child->height() > m_rows.m_sizes[r]) | |
| 579 m_rows.m_sizes[r] = child->height(); | |
| 580 if (child->width() > m_cols.m_sizes[c]) | |
| 581 m_cols.m_sizes[c] = child->width(); | |
| 582 | |
| 583 if (child->frameRect() != oldFrameRect) | |
| 584 repaintNeeded = true; | |
| 585 | |
| 586 // difference between calculated frame width and the width it actual
ly decides to have | |
| 587 extra += width - m_cols.m_sizes[c]; | |
| 588 | |
| 589 child = child->nextSiblingBox(); | |
| 590 if (!child) { | |
| 591 out = true; | |
| 592 break; | |
| 593 } | |
| 594 } | |
| 595 } | |
| 596 | |
| 597 int xPos = 0; | |
| 598 int yPos = 0; | |
| 599 out = false; | |
| 600 child = firstChildBox(); | |
| 601 for (int r = 0; r < rows && !out; r++) { | |
| 602 xPos = 0; | |
| 603 for (int c = 0; c < cols; c++) { | |
| 604 // ensure the rows and columns are filled | |
| 605 IntRect oldRect = pixelSnappedIntRect(child->frameRect()); | |
| 606 | |
| 607 child->setLocation(IntPoint(xPos, yPos)); | |
| 608 child->setHeight(m_rows.m_sizes[r]); | |
| 609 child->setWidth(m_cols.m_sizes[c]); | |
| 610 | |
| 611 if (child->frameRect() != oldRect) { | |
| 612 repaintNeeded = true; | |
| 613 | |
| 614 // update to final size | |
| 615 child->setNeedsLayout(true); | |
| 616 if (child->isFrameSet()) | |
| 617 toRenderFrameSet(child)->layout(); | |
| 618 else | |
| 619 toRenderFrame(child)->layoutWithFlattening(true, true); | |
| 620 } | |
| 621 | |
| 622 xPos += m_cols.m_sizes[c] + borderThickness; | |
| 623 child = child->nextSiblingBox(); | |
| 624 if (!child) { | |
| 625 out = true; | |
| 626 break; | |
| 627 } | |
| 628 } | |
| 629 yPos += m_rows.m_sizes[r] + borderThickness; | |
| 630 } | |
| 631 | |
| 632 setWidth(xPos - borderThickness); | |
| 633 setHeight(yPos - borderThickness); | |
| 634 | |
| 635 if (repaintNeeded) | |
| 636 repaint(); | |
| 637 | |
| 638 // all the remaining frames are hidden to avoid ugly spurious unflowed frame
s | |
| 639 for (; child; child = child->nextSiblingBox()) { | |
| 640 child->setWidth(0); | |
| 641 child->setHeight(0); | |
| 642 child->setNeedsLayout(false); | |
| 643 } | |
| 644 } | |
| 645 | |
| 646 bool RenderFrameSet::flattenFrameSet() const | |
| 647 { | |
| 648 return frame() && frame()->settings() && frame()->settings()->frameFlattenin
gEnabled(); | |
| 649 } | |
| 650 | |
| 651 void RenderFrameSet::startResizing(GridAxis& axis, int position) | 535 void RenderFrameSet::startResizing(GridAxis& axis, int position) |
| 652 { | 536 { |
| 653 int split = hitTestSplit(axis, position); | 537 int split = hitTestSplit(axis, position); |
| 654 if (split == noSplit || axis.m_preventResize[split]) { | 538 if (split == noSplit || axis.m_preventResize[split]) { |
| 655 axis.m_splitBeingResized = noSplit; | 539 axis.m_splitBeingResized = noSplit; |
| 656 return; | 540 return; |
| 657 } | 541 } |
| 658 axis.m_splitBeingResized = split; | 542 axis.m_splitBeingResized = split; |
| 659 axis.m_splitResizeOffset = position - splitPosition(axis, split); | 543 axis.m_splitResizeOffset = position - splitPosition(axis, split); |
| 660 } | 544 } |
| 661 | 545 |
| 662 void RenderFrameSet::continueResizing(GridAxis& axis, int position) | 546 void RenderFrameSet::continueResizing(GridAxis& axis, int position) |
| 663 { | 547 { |
| 664 if (needsLayout()) | 548 if (needsLayout()) |
| 665 return; | 549 return; |
| 666 if (axis.m_splitBeingResized == noSplit) | 550 if (axis.m_splitBeingResized == noSplit) |
| 667 return; | 551 return; |
| 668 int currentSplitPosition = splitPosition(axis, axis.m_splitBeingResized); | 552 int currentSplitPosition = splitPosition(axis, axis.m_splitBeingResized); |
| 669 int delta = (position - currentSplitPosition) - axis.m_splitResizeOffset; | 553 int delta = (position - currentSplitPosition) - axis.m_splitResizeOffset; |
| 670 if (!delta) | 554 if (!delta) |
| 671 return; | 555 return; |
| 672 axis.m_deltas[axis.m_splitBeingResized - 1] += delta; | 556 axis.m_deltas[axis.m_splitBeingResized - 1] += delta; |
| 673 axis.m_deltas[axis.m_splitBeingResized] -= delta; | 557 axis.m_deltas[axis.m_splitBeingResized] -= delta; |
| 674 setNeedsLayout(true); | 558 setNeedsLayout(true); |
| 675 } | 559 } |
| 676 | 560 |
| 677 bool RenderFrameSet::userResize(MouseEvent* evt) | 561 bool RenderFrameSet::userResize(MouseEvent* evt) |
| 678 { | 562 { |
| 679 if (flattenFrameSet()) | |
| 680 return false; | |
| 681 | |
| 682 if (!m_isResizing) { | 563 if (!m_isResizing) { |
| 683 if (needsLayout()) | 564 if (needsLayout()) |
| 684 return false; | 565 return false; |
| 685 if (evt->type() == eventNames().mousedownEvent && evt->button() == LeftB
utton) { | 566 if (evt->type() == eventNames().mousedownEvent && evt->button() == LeftB
utton) { |
| 686 FloatPoint localPos = absoluteToLocal(evt->absoluteLocation(), UseTr
ansforms); | 567 FloatPoint localPos = absoluteToLocal(evt->absoluteLocation(), UseTr
ansforms); |
| 687 startResizing(m_cols, localPos.x()); | 568 startResizing(m_cols, localPos.x()); |
| 688 startResizing(m_rows, localPos.y()); | 569 startResizing(m_rows, localPos.y()); |
| 689 if (m_cols.m_splitBeingResized != noSplit || m_rows.m_splitBeingResi
zed != noSplit) { | 570 if (m_cols.m_splitBeingResized != noSplit || m_rows.m_splitBeingResi
zed != noSplit) { |
| 690 setIsResizing(true); | 571 setIsResizing(true); |
| 691 return true; | 572 return true; |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 809 void RenderFrameSet::GridAxis::reportMemoryUsage(MemoryObjectInfo* memoryObjectI
nfo) const | 690 void RenderFrameSet::GridAxis::reportMemoryUsage(MemoryObjectInfo* memoryObjectI
nfo) const |
| 810 { | 691 { |
| 811 MemoryClassInfo info(memoryObjectInfo, this, PlatformMemoryTypes::Rendering)
; | 692 MemoryClassInfo info(memoryObjectInfo, this, PlatformMemoryTypes::Rendering)
; |
| 812 info.addMember(m_sizes, "sizes"); | 693 info.addMember(m_sizes, "sizes"); |
| 813 info.addMember(m_deltas, "deltas"); | 694 info.addMember(m_deltas, "deltas"); |
| 814 info.addMember(m_preventResize, "preventResize"); | 695 info.addMember(m_preventResize, "preventResize"); |
| 815 info.addMember(m_allowBorder, "allowBorder"); | 696 info.addMember(m_allowBorder, "allowBorder"); |
| 816 } | 697 } |
| 817 | 698 |
| 818 } // namespace WebCore | 699 } // namespace WebCore |
| OLD | NEW |