summaryrefslogtreecommitdiff
path: root/dw
diff options
context:
space:
mode:
authorSebastian Geerken <devnull@localhost>2013-10-09 22:21:47 +0200
committerSebastian Geerken <devnull@localhost>2013-10-09 22:21:47 +0200
commit543269017e29ecc6fcde020c78b563aeb43ee018 (patch)
tree1136127725a059a9515073465bf848c6875539be /dw
parent3db296631dfd8101066847cd552422da0c26f02f (diff)
Correct initialization of words.
Diffstat (limited to 'dw')
-rw-r--r--dw/textblock.cc15
-rw-r--r--dw/textblock_linebreaking.cc2
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.