Review Request 120250: Change blockLayout return to be more explicit

Pierre pinaraf at pinaraf.info
Wed Sep 17 21:16:35 BST 2014


On Wednesday, September 17, 2014 08:09:24 PM Pierre Ducroquet wrote:
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/120250/
> -----------------------------------------------------------
> 
> Review request for Calligra.
> 
> 
> Bugs: 306000
>     http://bugs.kde.org/show_bug.cgi?id=306000
> 
> 
> Repository: calligra
> 
> 
> Description
> -------
> 
> Returns an enum instead of a boolean and relying on an integer value aside.
> This allows the backtrack code to know that a layout ended because of a page
> break, and thus not follow the keep with next instead of ending up in an
> infinite loop.
> 
> With that patch, we still have a difference between us and LibreOffice 4.3, a
> check of the OpenDocument specification will perhaps help : they decide to
> just skip the page break when it is in a keep with next block.

FYI, a patch implementing that way of layouting the text is much simpler :

index 3a1fa57..bd317b1 100644
--- a/libs/textlayout/KoTextLayoutArea.cpp
+++ b/libs/textlayout/KoTextLayoutArea.cpp
@@ -1226,10 +1226,12 @@ bool KoTextLayoutArea::layoutBlock(FrameIterator 
*cursor)
                 c1.setPosition(c1.position() + 1, QTextCursor::KeepAnchor);
 
                 KoTextSoftPageBreak *softPageBreak = 
dynamic_cast<KoTextSoftPageBreak*>(d->documentLayout->inlineTextObjectManager()-
>inlineTextObject(c1));
-                bool keepWithNext = 
block.blockFormat().boolProperty(KoParagraphStyle::KeepWithNext);
-                if (softPageBreak && !keepWithNext) {
-                    softBreakPos = pos;
-                    break;
+                if (softPageBreak) {
+                    QTextBlock previousBlock = block.previous();
+                    if (!previousBlock.isValid() || 
!previousBlock.blockFormat().boolProperty(KoParagraphStyle::KeepWithNext)) {
+                        softBreakPos = pos;
+                        break;
+                    }
                 }
 
                 pos = text.indexOf(QChar::ObjectReplacementCharacter, pos + 1);


I'll try to dig up from OpenDocument specification a recommendation regarding 
the proper way of handling that, if there is any.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 213 bytes
Desc: This is a digitally signed message part.
URL: <http://mail.kde.org/pipermail/calligra-devel/attachments/20140917/1c03ab9e/attachment.sig>


More information about the calligra-devel mailing list