void TestDocumentLayout::placeAnchoredFrame3() { // basic inline frame that acts like a really big character initForNewTest(QString(loremIpsum)); MockShape *picture = new MockShape(); picture->setSize(QSizeF(100, 100)); KTextAnchor *anchor = new KTextAnchor(picture); anchor->setAlignment(KTextAnchor::VerticalOffset); anchor->setAlignment(KTextAnchor::HorizontalOffset); QTextCursor cursor(doc); KInlineTextObjectManager *manager = new KInlineTextObjectManager(); layout->setInlineTextObjectManager(manager); MockLayoutState *state = new MockLayoutState(doc); layout->setLayout(state); state->shape = shape1; manager->insertInlineObject(cursor, anchor); layout->layout(); /* I have two goals with 'offset'. One is that I want to be able to change the baseline of my anchored object. The other is that OOo / ODF allows me to have an arbitairy distance from my anchor so I can place something at the center of my page or whatever. So what about I switch from the first to the latter based on the font height. If my offset 'x' != 0, make the image floating. If my offset 'y' is such that it would be above or below my line; make floating. */ QTextLayout *lay = doc->begin().layout(); QVERIFY(lay->lineCount() >= 2); QTextLine line = lay->lineAt(0); QCOMPARE(line.descent(), (qreal) 100); QCOMPARE(line.position(), QPointF()); line = lay->lineAt(1); QVERIFY(line.height() < 20); // now move the character which makes it a shape to run around and no longer // a big character. anchor->setOffset(QPointF(50, 20)); layout->layout(); lay = doc->begin().layout(); QVERIFY(lay->lineCount() >= 2); line = lay->lineAt(0); QVERIFY(line.height() < 20); QCOMPARE(line.position(), QPointF()); line = lay->lineAt(1); QVERIFY(line.height() < 20); QCOMPARE(line.position().x(), 0.); QVERIFY(qAbs(line.position().y() - 14.4) < 0.125); }