aboutsummaryrefslogtreecommitdiff
path: root/dw/textblock.cc
diff options
context:
space:
mode:
Diffstat (limited to 'dw/textblock.cc')
-rw-r--r--dw/textblock.cc123
1 files changed, 88 insertions, 35 deletions
diff --git a/dw/textblock.cc b/dw/textblock.cc
index 6538ed1e..0c7a6108 100644
--- a/dw/textblock.cc
+++ b/dw/textblock.cc
@@ -65,6 +65,9 @@ void Textblock::WordImgRenderer::setData (int xWordWidget, int lineNo)
bool Textblock::WordImgRenderer::readyToDraw ()
{
+ //print ();
+ //printf ("\n");
+
return dataSet && textblock->wasAllocated ()
&& wordNo < textblock->words->size()
&& lineNo < textblock->lines->size();
@@ -100,6 +103,16 @@ void Textblock::WordImgRenderer::draw (int x, int y, int width, int height)
}
+void Textblock::WordImgRenderer::print ()
+{
+ printf ("%p: word #%d, ", this, wordNo);
+ if (wordNo < textblock->words->size())
+ textblock->printWordShort (textblock->words->getRef(wordNo));
+ else
+ printf ("<word %d does not exist>", wordNo);
+ printf (", data set: %s", dataSet ? "yes" : "no");
+}
+
void Textblock::SpaceImgRenderer::getBgArea (int *x, int *y, int *width,
int *height)
{
@@ -113,6 +126,16 @@ core::style::Style *Textblock::SpaceImgRenderer::getStyle ()
return textblock->words->getRef(wordNo)->spaceStyle;
}
+void Textblock::SpaceImgRenderer::print ()
+{
+ printf ("%p: word FOR SPACE #%d, ", this, wordNo);
+ if (wordNo < textblock->words->size())
+ textblock->printWordShort (textblock->words->getRef(wordNo));
+ else
+ printf ("<word %d does not exist>", wordNo);
+ printf (", data set: %s", dataSet ? "yes" : "no");
+}
+
// ----------------------------------------------------------------------
Textblock::DivChar Textblock::divChars[NUM_DIV_CHARS] = {
@@ -259,17 +282,8 @@ Textblock::~Textblock ()
if (word->content.type == core::Content::WIDGET)
delete word->content.widget;
- if (word->wordImgRenderer) {
- word->style->backgroundImage->removeExternalImgRenderer
- (word->wordImgRenderer);
- delete word->wordImgRenderer;
- }
-
- if (word->spaceImgRenderer) {
- word->spaceStyle->backgroundImage->removeExternalImgRenderer
- (word->spaceImgRenderer);
- delete word->spaceImgRenderer;
- }
+ removeWordImgRenderer (i);
+ removeSpaceImgRenderer (i);
word->style->unref ();
word->spaceStyle->unref ();
@@ -1439,22 +1453,32 @@ Textblock::Word *Textblock::addWord (int width, int ascent, int descent,
return word;
}
-void Textblock::fillWord (int wordNo, int width, int ascent, int descent,
- short flags, core::style::Style *style)
+/**
+ * Basic initialization, which is neccessary before fillWord.
+ */
+void Textblock::initWord (int wordNo)
{
Word *word = words->getRef (wordNo);
- word->size.width = width;
- word->size.ascent = ascent;
- word->size.descent = descent;
- word->origSpace = word->effSpace = 0;
- word->hyphenWidth = 0;
- word->badnessAndPenalty.setPenalty (PENALTY_PROHIBIT_BREAK);
- word->content.space = false;
- word->flags = flags;
+ word->wordImgRenderer = NULL;
+ word->spaceImgRenderer = NULL;
+}
- word->style = style;
- word->spaceStyle = style;
+void Textblock::removeWordImgRenderer (int wordNo)
+{
+ Word *word = words->getRef (wordNo);
+
+ if (word->wordImgRenderer) {
+ word->style->backgroundImage->removeExternalImgRenderer
+ (word->wordImgRenderer);
+ delete word->wordImgRenderer;
+ word->wordImgRenderer = NULL;
+ }
+}
+
+void Textblock::setWordImgRenderer (int wordNo)
+{
+ Word *word = words->getRef (wordNo);
if (word->style->backgroundImage) {
word->wordImgRenderer = new WordImgRenderer (this, wordNo);
@@ -1462,6 +1486,23 @@ void Textblock::fillWord (int wordNo, int width, int ascent, int descent,
(word->wordImgRenderer);
} else
word->wordImgRenderer = NULL;
+}
+
+void Textblock::removeSpaceImgRenderer (int wordNo)
+{
+ Word *word = words->getRef (wordNo);
+
+ if (word->spaceImgRenderer) {
+ word->spaceStyle->backgroundImage->removeExternalImgRenderer
+ (word->spaceImgRenderer);
+ delete word->spaceImgRenderer;
+ word->spaceImgRenderer = NULL;
+ }
+}
+
+void Textblock::setSpaceImgRenderer (int wordNo)
+{
+ Word *word = words->getRef (wordNo);
if (word->spaceStyle->backgroundImage) {
word->spaceImgRenderer = new SpaceImgRenderer (this, wordNo);
@@ -1469,6 +1510,27 @@ void Textblock::fillWord (int wordNo, int width, int ascent, int descent,
(word->spaceImgRenderer);
} else
word->spaceImgRenderer = NULL;
+}
+
+void Textblock::fillWord (int wordNo, int width, int ascent, int descent,
+ short flags, core::style::Style *style)
+{
+ Word *word = words->getRef (wordNo);
+
+ word->size.width = width;
+ word->size.ascent = ascent;
+ word->size.descent = descent;
+ word->origSpace = word->effSpace = 0;
+ word->hyphenWidth = 0;
+ word->badnessAndPenalty.setPenalty (PENALTY_PROHIBIT_BREAK);
+ word->content.space = false;
+ word->flags = flags;
+
+ word->style = style;
+ word->spaceStyle = style;
+
+ setWordImgRenderer (wordNo);
+ setSpaceImgRenderer (wordNo);
style->ref ();
style->ref ();
@@ -2002,22 +2064,13 @@ void Textblock::fillSpace (int wordNo, core::style::Style *style)
// word->content.space);
- if (word->spaceImgRenderer) {
- word->spaceStyle->backgroundImage->removeExternalImgRenderer
- (word->spaceImgRenderer);
- delete word->spaceImgRenderer;
- }
+ removeSpaceImgRenderer (wordNo);
word->spaceStyle->unref ();
word->spaceStyle = style;
style->ref ();
-
- if (word->spaceStyle->backgroundImage) {
- word->spaceImgRenderer = new SpaceImgRenderer (this, wordNo);
- word->spaceStyle->backgroundImage->putExternalImgRenderer
- (word->spaceImgRenderer);
- } else
- word->spaceImgRenderer = NULL;
+
+ setSpaceImgRenderer (wordNo);
}
}