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

Side by Side Diff: third_party/WebKit/WebCore/rendering/RenderInline.cpp

Issue 21152: WebKit merge 40668:40722 part 1. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 10 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * This file is part of the render object implementation for KHTML. 2 * This file is part of the render object implementation for KHTML.
3 * 3 *
4 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 4 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
5 * (C) 1999 Antti Koivisto (koivisto@kde.org) 5 * (C) 1999 Antti Koivisto (koivisto@kde.org)
6 * Copyright (C) 2003, 2004, 2005, 2006 Apple Computer, Inc. 6 * Copyright (C) 2003, 2004, 2005, 2006 Apple Computer, Inc.
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 RenderBox::destroy(); 88 RenderBox::destroy();
89 } 89 }
90 90
91 RenderInline* RenderInline::inlineContinuation() const 91 RenderInline* RenderInline::inlineContinuation() const
92 { 92 {
93 if (!m_continuation || m_continuation->isInline()) 93 if (!m_continuation || m_continuation->isInline())
94 return toRenderInline(m_continuation); 94 return toRenderInline(m_continuation);
95 return toRenderBlock(m_continuation)->inlineContinuation(); 95 return toRenderBlock(m_continuation)->inlineContinuation();
96 } 96 }
97 97
98 void RenderInline::updateBoxModelInfoFromStyle()
99 {
100 RenderBoxModelObject::updateBoxModelInfoFromStyle();
101
102 setInline(true); // Needed for run-ins, since run-in is considered a block d isplay type.
103
104 // FIXME: Support transforms and reflections on inline flows someday.
105 setHasTransform(false);
106 setHasReflection(false);
107 }
108
98 void RenderInline::styleDidChange(StyleDifference diff, const RenderStyle* oldSt yle) 109 void RenderInline::styleDidChange(StyleDifference diff, const RenderStyle* oldSt yle)
99 { 110 {
100 RenderBox::styleDidChange(diff, oldStyle); 111 RenderBox::styleDidChange(diff, oldStyle);
101 112
102 setInline(true);
103 setHasReflection(false);
104
105 // Ensure that all of the split inlines pick up the new style. We 113 // Ensure that all of the split inlines pick up the new style. We
106 // only do this if we're an inline, since we don't want to propagate 114 // only do this if we're an inline, since we don't want to propagate
107 // a block's style to the other inlines. 115 // a block's style to the other inlines.
108 // e.g., <font>foo <h4>goo</h4> moo</font>. The <font> inlines before 116 // e.g., <font>foo <h4>goo</h4> moo</font>. The <font> inlines before
109 // and after the block share the same style, but the block doesn't 117 // and after the block share the same style, but the block doesn't
110 // need to pass its style on to anyone else. 118 // need to pass its style on to anyone else.
111 for (RenderInline* currCont = inlineContinuation(); currCont; currCont = cur rCont->inlineContinuation()) { 119 for (RenderInline* currCont = inlineContinuation(); currCont; currCont = cur rCont->inlineContinuation()) {
112 RenderBox* nextCont = currCont->continuation(); 120 RenderBox* nextCont = currCont->continuation();
113 currCont->setContinuation(0); 121 currCont->setContinuation(0);
114 currCont->setStyle(style()); 122 currCont->setStyle(style());
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 } 520 }
513 result.setWidth(rightSide - leftSide); 521 result.setWidth(rightSide - leftSide);
514 result.setX(leftSide); 522 result.setX(leftSide);
515 result.setHeight(lastLineBox()->yPos() + lastLineBox()->height() - first LineBox()->yPos()); 523 result.setHeight(lastLineBox()->yPos() + lastLineBox()->height() - first LineBox()->yPos());
516 result.setY(firstLineBox()->yPos()); 524 result.setY(firstLineBox()->yPos());
517 } 525 }
518 526
519 return result; 527 return result;
520 } 528 }
521 529
522 IntRect RenderInline::clippedOverflowRectForRepaint(RenderBox* repaintContainer) 530 IntRect RenderInline::clippedOverflowRectForRepaint(RenderBoxModelObject* repain tContainer)
523 { 531 {
524 // Only run-ins are allowed in here during layout. 532 // Only run-ins are allowed in here during layout.
525 ASSERT(!view() || !view()->layoutStateEnabled() || isRunIn()); 533 ASSERT(!view() || !view()->layoutStateEnabled() || isRunIn());
526 534
527 if (!firstLineBox() && !continuation()) 535 if (!firstLineBox() && !continuation())
528 return IntRect(); 536 return IntRect();
529 537
530 // Find our leftmost position. 538 // Find our leftmost position.
531 IntRect boundingBox(linesBoundingBox()); 539 IntRect boundingBox(linesBoundingBox());
532 int left = boundingBox.x(); 540 int left = boundingBox.x();
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 583
576 if (continuation() && !continuation()->isInline()) { 584 if (continuation() && !continuation()->isInline()) {
577 IntRect contRect = continuation()->rectWithOutlineForRepaint(repaint Container, ow); 585 IntRect contRect = continuation()->rectWithOutlineForRepaint(repaint Container, ow);
578 r.unite(contRect); 586 r.unite(contRect);
579 } 587 }
580 } 588 }
581 589
582 return r; 590 return r;
583 } 591 }
584 592
585 IntRect RenderInline::rectWithOutlineForRepaint(RenderBox* repaintContainer, int outlineWidth) 593 IntRect RenderInline::rectWithOutlineForRepaint(RenderBoxModelObject* repaintCon tainer, int outlineWidth)
586 { 594 {
587 IntRect r(RenderBox::rectWithOutlineForRepaint(repaintContainer, outlineWidt h)); 595 IntRect r(RenderBox::rectWithOutlineForRepaint(repaintContainer, outlineWidt h));
588 for (RenderObject* curr = firstChild(); curr; curr = curr->nextSibling()) { 596 for (RenderObject* curr = firstChild(); curr; curr = curr->nextSibling()) {
589 if (!curr->isText()) 597 if (!curr->isText())
590 r.unite(curr->rectWithOutlineForRepaint(repaintContainer, outlineWid th)); 598 r.unite(curr->rectWithOutlineForRepaint(repaintContainer, outlineWid th));
591 } 599 }
592 return r; 600 return r;
593 } 601 }
594 602
595 void RenderInline::updateDragState(bool dragOn) 603 void RenderInline::updateDragState(bool dragOn)
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
660 if (s != style()) 668 if (s != style())
661 return s->computedLineHeight(); 669 return s->computedLineHeight();
662 } 670 }
663 671
664 if (m_lineHeight == -1) 672 if (m_lineHeight == -1)
665 m_lineHeight = style()->computedLineHeight(); 673 m_lineHeight = style()->computedLineHeight();
666 674
667 return m_lineHeight; 675 return m_lineHeight;
668 } 676 }
669 677
670 IntSize RenderInline::relativePositionedInlineOffset(const RenderObject* child) const 678 IntSize RenderInline::relativePositionedInlineOffset(const RenderBox* child) con st
671 { 679 {
672 ASSERT(isRelPositioned()); 680 ASSERT(isRelPositioned());
673 if (!isRelPositioned()) 681 if (!isRelPositioned())
674 return IntSize(); 682 return IntSize();
675 683
676 // When we have an enclosing relpositioned inline, we need to add in the off set of the first line 684 // When we have an enclosing relpositioned inline, we need to add in the off set of the first line
677 // box from the rest of the content, but only in the cases where we know we' re positioned 685 // box from the rest of the content, but only in the cases where we know we' re positioned
678 // relative to the inline itself. 686 // relative to the inline itself.
679 687
680 IntSize offset; 688 IntSize offset;
681 int sx; 689 int sx;
682 int sy; 690 int sy;
683 if (firstLineBox()) { 691 if (firstLineBox()) {
684 sx = firstLineBox()->xPos(); 692 sx = firstLineBox()->xPos();
685 sy = firstLineBox()->yPos(); 693 sy = firstLineBox()->yPos();
686 } else { 694 } else {
687 sx = staticX(); 695 sx = layer()->staticX();
688 sy = staticY(); 696 sy = layer()->staticY();
689 } 697 }
690 698
691 if (!child->hasStaticX()) 699 if (!child->style()->hasStaticX())
692 offset.setWidth(sx); 700 offset.setWidth(sx);
693 // This is not terribly intuitive, but we have to match other browsers. Des pite being a block display type inside 701 // This is not terribly intuitive, but we have to match other browsers. Des pite being a block display type inside
694 // an inline, we still keep our x locked to the left of the relative positio ned inline. Arguably the correct 702 // an inline, we still keep our x locked to the left of the relative positio ned inline. Arguably the correct
695 // behavior would be to go flush left to the block that contains the inline, but that isn't what other browsers 703 // behavior would be to go flush left to the block that contains the inline, but that isn't what other browsers
696 // do. 704 // do.
697 else if (!child->style()->isOriginalDisplayInlineType()) 705 else if (!child->style()->isOriginalDisplayInlineType())
698 // Avoid adding in the left border/padding of the containing block twice . Subtract it out. 706 // Avoid adding in the left border/padding of the containing block twice . Subtract it out.
699 offset.setWidth(sx - (child->containingBlock()->borderLeft() + child->co ntainingBlock()->paddingLeft())); 707 offset.setWidth(sx - (child->containingBlock()->borderLeft() + child->co ntainingBlock()->paddingLeft()));
700 708
701 if (!child->hasStaticY()) 709 if (!child->style()->hasStaticY())
702 offset.setHeight(sy); 710 offset.setHeight(sy);
703 711
704 return offset; 712 return offset;
705 } 713 }
706 714
707 void RenderInline::addFocusRingRects(GraphicsContext* graphicsContext, int tx, i nt ty) 715 void RenderInline::addFocusRingRects(GraphicsContext* graphicsContext, int tx, i nt ty)
708 { 716 {
709 for (InlineRunBox* curr = firstLineBox(); curr; curr = curr->nextLineBox()) 717 for (InlineRunBox* curr = firstLineBox(); curr; curr = curr->nextLineBox())
710 graphicsContext->addFocusRingRect(IntRect(tx + curr->xPos(), ty + curr-> yPos(), curr->width(), curr->height())); 718 graphicsContext->addFocusRingRect(IntRect(tx + curr->xPos(), ty + curr-> yPos(), curr->width(), curr->height()));
711 719
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
889 region.clip.scale(pageScaleFactor); 897 region.clip.scale(pageScaleFactor);
890 } 898 }
891 } 899 }
892 900
893 regions.append(region); 901 regions.append(region);
894 } 902 }
895 } 903 }
896 #endif 904 #endif
897 905
898 } // namespace WebCore 906 } // namespace WebCore
OLDNEW
« no previous file with comments | « third_party/WebKit/WebCore/rendering/RenderInline.h ('k') | third_party/WebKit/WebCore/rendering/RenderLayer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698