void InlineBlockBox::handleLayout(LayoutEngine& eng, const Dimensions& containing) { eng.setCursor(cursor_); layoutChildren(eng); layoutHeight(containing); if(isReplaceable()) { NodePtr node = getNode(); node->setDimensions(rect(0, 0, getWidth() / LayoutEngine::getFixedPointScale(), getHeight() / LayoutEngine::getFixedPointScale())); } // try and fit the box at cursor, failing that we move the cursor and try again. FixedPoint width_at_cursor = eng.getWidthAtPosition(eng.getCursor().y, eng.getCursor().y + getHeight() + getMBPHeight(), containing.content_.width) - eng.getCursor().x + eng.getXAtPosition(eng.getCursor().y, eng.getCursor().y + getHeight() + getMBPHeight()); if(getWidth() + getMBPWidth() > width_at_cursor) { point p = eng.getCursor(); p.y += getLineHeight(); while(eng.hasFloatsAtPosition(p.y, p.y + getHeight() + getMBPHeight()) && getWidth() + getMBPWidth() > width_at_cursor) { width_at_cursor = eng.getWidthAtPosition(p.y, p.y + getHeight() + getMBPHeight(), containing.content_.width); } p.x = eng.getXAtPosition(p.y, p.y + getHeight() + getMBPHeight()); setContentX(p.x); setContentY(p.y); p.y += getHeight() + getMBPHeight(); p.x = eng.getXAtPosition(p.y, p.y + getLineHeight()); eng.setCursor(p); } else { setContentX(eng.getCursor().x); // XXX if height is greater than other objects on line we need to increase lineheight. setContentY(eng.getCursor().y); eng.setCursor(point(getLeft() + getWidth() + getMBPRight(), eng.getCursor().y)); } }
void TextBox::handleLayout(LayoutEngine& eng, const Dimensions& containing) { // TextBox's have no children to deal with, by definition. // XXX fix the point() to be the actual last point, say from LayoutEngine point cursor = reflowText(eng, containing, eng.getCursor()); eng.setCursor(cursor); calculateHorzMPB(containing.content_.width); calculateVertMPB(containing.content_.height); }
void InlineBlockBox::handlePreChildLayout2(LayoutEngine& eng, const Dimensions& containing) { cursor_ = eng.getCursor(); eng.setCursor(point(0, 0)); if(!getChildren().empty() || !isReplaceable()) { setContentHeight(0); } else if(isReplaceable()) { NodePtr node = getNode(); const rect& r = node->getDimensions(); setContentWidth(r.w() * LayoutEngine::getFixedPointScale()); setContentHeight(r.h() * LayoutEngine::getFixedPointScale()); } }