diff options
author | Sebastian Geerken <devnull@localhost> | 2013-10-09 22:21:47 +0200 |
---|---|---|
committer | Sebastian Geerken <devnull@localhost> | 2013-10-09 22:21:47 +0200 |
commit | 543269017e29ecc6fcde020c78b563aeb43ee018 (patch) | |
tree | 1136127725a059a9515073465bf848c6875539be /dw | |
parent | 3db296631dfd8101066847cd552422da0c26f02f (diff) |
Correct initialization of words.
Diffstat (limited to 'dw')
-rw-r--r-- | dw/textblock.cc | 15 | ||||
-rw-r--r-- | dw/textblock_linebreaking.cc | 2 |
2 files changed, 12 insertions, 5 deletions
diff --git a/dw/textblock.cc b/dw/textblock.cc index 0c7a6108..7950ba96 100644 --- a/dw/textblock.cc +++ b/dw/textblock.cc @@ -1448,9 +1448,10 @@ Textblock::Word *Textblock::addWord (int width, int ascent, int descent, short flags, core::style::Style *style) { words->increase (); - Word *word = words->getLastRef (); - fillWord (words->size () - 1, width, ascent, descent, flags, style); - return word; + int wordNo = words->size () - 1; + initWord (wordNo); + fillWord (wordNo, width, ascent, descent, flags, style); + return words->getRef (wordNo);; } /** @@ -1460,6 +1461,7 @@ void Textblock::initWord (int wordNo) { Word *word = words->getRef (wordNo); + word->style = word->spaceStyle = NULL; word->wordImgRenderer = NULL; word->spaceImgRenderer = NULL; } @@ -1468,7 +1470,7 @@ void Textblock::removeWordImgRenderer (int wordNo) { Word *word = words->getRef (wordNo); - if (word->wordImgRenderer) { + if (word->style && word->wordImgRenderer) { word->style->backgroundImage->removeExternalImgRenderer (word->wordImgRenderer); delete word->wordImgRenderer; @@ -1492,7 +1494,7 @@ void Textblock::removeSpaceImgRenderer (int wordNo) { Word *word = words->getRef (wordNo); - if (word->spaceImgRenderer) { + if (word->spaceStyle && word->spaceImgRenderer) { word->spaceStyle->backgroundImage->removeExternalImgRenderer (word->spaceImgRenderer); delete word->spaceImgRenderer; @@ -1526,6 +1528,9 @@ void Textblock::fillWord (int wordNo, int width, int ascent, int descent, word->content.space = false; word->flags = flags; + removeWordImgRenderer (wordNo); + removeSpaceImgRenderer (wordNo); + word->style = style; word->spaceStyle = style; diff --git a/dw/textblock_linebreaking.cc b/dw/textblock_linebreaking.cc index 9352744d..58b8c494 100644 --- a/dw/textblock_linebreaking.cc +++ b/dw/textblock_linebreaking.cc @@ -880,6 +880,8 @@ int Textblock::hyphenateWord (int wordIndex) PRINTF ("[%p] %d words ...\n", this, words->size ()); words->insert (wordIndex, numBreaks); + for (int i = 0; i < numBreaks; i++) + initWord (wordIndex + i); PRINTF ("[%p] ... => %d words\n", this, words->size ()); // Adjust anchor indexes. |