void write(TextStream& ts, const RenderObject& o, int indent) { #if ENABLE(SVG) if (o.isRenderPath()) { write(ts, *toRenderPath(&o), indent); return; } if (o.isSVGContainer()) { writeSVGContainer(ts, o, indent); return; } if (o.isSVGRoot()) { write(ts, *toRenderSVGRoot(&o), indent); return; } if (o.isSVGText()) { if (!o.isText()) writeSVGText(ts, *toRenderBlock(&o), indent); else writeSVGInlineText(ts, *toRenderText(&o), indent); return; } if (o.isSVGImage()) { writeSVGImage(ts, *toRenderImage(&o), indent); return; } #endif writeIndent(ts, indent); ts << o << "\n"; if (o.isText() && !o.isBR()) { const RenderText& text = *toRenderText(&o); for (InlineTextBox* box = text.firstTextBox(); box; box = box->nextTextBox()) { writeIndent(ts, indent + 1); writeTextRun(ts, text, *box); } } for (RenderObject* child = o.firstChild(); child; child = child->nextSibling()) { if (child->hasLayer()) continue; write(ts, *child, indent + 1); } if (o.isWidget()) { Widget* widget = toRenderWidget(&o)->widget(); if (widget && widget->isFrameView()) { FrameView* view = static_cast<FrameView*>(widget); RenderView* root = view->frame()->contentRenderer(); if (root) { view->layout(); RenderLayer* l = root->layer(); if (l) writeLayers(ts, l, l, IntRect(l->x(), l->y(), l->width(), l->height()), indent + 1); } } } }
int RenderCanvas::docWidth() const { if (m_cachedDocWidth != -1) return m_cachedDocWidth; int w; if (m_pagedMode || !m_view) w = m_width; else w = 0; RenderObject *fc = firstChild(); if(fc) { // ow: like effectiveWidth() but without the negative const int ow = fc->hasOverflowClip() ? fc->width() : fc->overflowWidth(); int dw = ow + fc->marginLeft() + fc->marginRight(); int rightmostPos = fc->rightmostPosition(false); // kdDebug(6040) << "w " << w << " rightmostPos " << rightmostPos << " dw " << dw << " fc->rw " << fc->effectiveWidth() << " fc->width() " << fc->width() << endl; if( rightmostPos > dw ) dw = rightmostPos; rightmostPos = rightmostAbsolutePosition(); if ( rightmostPos > dw ) dw = rightmostPos; if( dw > w ) w = dw; } RenderLayer *layer = m_layer; w = kMax( w, layer->xPos() + layer->width() ); // kdDebug(6040) << "w " << w << " layer(" << layer->renderer()->renderName() << ")->width " << layer->width() << " rm " << (layer->xPos() + layer->width()) << " width() " << layer->renderer()->width() << " rw " << layer->renderer()->effectiveWidth() << endl; return w; }
static void write(QTextStream &ts, const RenderObject &o, int indent = 0) { writeIndent(ts, indent); ts << o << "\n"; if (o.isText() && !o.isBR()) { const RenderText &text = static_cast<const RenderText &>(o); for (InlineTextBox* box = text.firstTextBox(); box; box = box->nextTextBox()) { writeIndent(ts, indent+1); writeTextRun(ts, text, *box); } } for (RenderObject *child = o.firstChild(); child; child = child->nextSibling()) { if (child->layer()) { continue; } write(ts, *child, indent + 1); } if (o.isWidget()) { QWidget *widget = static_cast<const RenderWidget &>(o).widget(); if (widget && widget->inherits("KHTMLView")) { KHTMLView *view = static_cast<KHTMLView *>(widget); RenderObject *root = KWQ(view->part())->renderer(); if (root) { view->layout(); RenderLayer* l = root->layer(); if (l) writeLayers(ts, l, l, QRect(l->xPos(), l->yPos(), l->width(), l->height()), indent+1); } } } }
LayoutState::LayoutState(LayoutState* prev, RenderBox* renderer, const IntSize& offset) { ASSERT(prev); m_next = prev; bool fixed = renderer->isPositioned() && renderer->style()->position() == FixedPosition; if (fixed) { int fixedX = 0; int fixedY = 0; renderer->view()->absolutePosition(fixedX, fixedY, true); m_offset = IntSize(fixedX, fixedY) + offset; } else m_offset = prev->m_offset + offset; if (renderer->isRelPositioned()) { if (renderer->hasLayer()) { int relX = 0; int relY = 0; renderer->layer()->relativePositionOffset(relX, relY); m_offset += IntSize(relX, relY); } } else if (renderer->isPositioned() && !fixed) { if (RenderObject* container = renderer->container()) m_offset += renderer->offsetForPositionedInContainer(container); } m_clipped = !fixed && prev->m_clipped; if (m_clipped) m_clipRect = prev->m_clipRect; if (renderer->hasOverflowClip()) { int x = m_offset.width(); int y = m_offset.height(); RenderLayer* layer = renderer->layer(); IntRect clipRect(x, y, layer->width(), layer->height()); clipRect.move(renderer->view()->layoutDelta()); if (m_clipped) m_clipRect.intersect(clipRect); else { m_clipRect = clipRect; m_clipped = true; } layer->subtractScrollOffset(x, y); m_offset = IntSize(x, y); } // FIXME: <http://bugs.webkit.org/show_bug.cgi?id=13443> Apply control clip if present. }
String externalRepresentation(RenderObject* o) { if (!o) return String(); TextStream ts; #if ENABLE(SVG) writeRenderResources(ts, o->document()); #endif if (o->view()->frameView()) o->view()->frameView()->layout(); RenderLayer* l = o->layer(); if (l) { writeLayers(ts, l, l, IntRect(l->xPos(), l->yPos(), l->width(), l->height())); writeSelection(ts, o); } return ts.release(); }
String externalRepresentation(Frame* frame, RenderAsTextBehavior behavior) { frame->document()->updateLayout(); RenderObject* o = frame->contentRenderer(); if (!o) return String(); TextStream ts; #if ENABLE(SVG) writeRenderResources(ts, o->document()); #endif if (o->hasLayer()) { RenderLayer* l = toRenderBox(o)->layer(); writeLayers(ts, l, l, IntRect(l->x(), l->y(), l->width(), l->height()), 0, behavior); writeSelection(ts, o); } return ts.release(); }
QString externalRepresentation(RenderObject *o) { debuggingRenderTreeFlag = true; JSEditor::setSupportsPasteCommand(true); QString s; { QTextStream ts(&s); if (o) { // FIXME: Hiding the vertical scrollbar is a total hack to preserve the // layout test results until I can figure out what the heck is going on. -dwh o->canvas()->view()->setVScrollBarMode(QScrollView::AlwaysOff); o->canvas()->view()->layout(); RenderLayer* l = o->layer(); if (l) { writeLayers(ts, l, l, QRect(l->xPos(), l->yPos(), l->width(), l->height())); writeSelection(ts, o); } } } return s; }
String externalRepresentation(Frame* frame, RenderAsTextBehavior behavior) { PrintContext printContext(frame); if (behavior & RenderAsTextPrintingMode) { if (!frame->contentRenderer()) return String(); printContext.begin(frame->contentRenderer()->width()); } frame->document()->updateLayout(); RenderObject* o = frame->contentRenderer(); if (!o) return String(); TextStream ts; if (o->hasLayer()) { RenderLayer* l = toRenderBox(o)->layer(); writeLayers(ts, l, l, IntRect(l->x(), l->y(), l->width(), l->height()), 0, behavior); writeSelection(ts, o); } return ts.release(); }