aboutsummaryrefslogtreecommitdiff
path: root/dw/textblock_linebreaking.cc
diff options
context:
space:
mode:
authorSebastian Geerken <devnull@localhost>2015-01-04 20:44:00 +0100
committerSebastian Geerken <devnull@localhost>2015-01-04 20:44:00 +0100
commit8fc91bbfd90c0ccafc842d94e2b3bd10b8889595 (patch)
treecf000926053fbf18c8654890a33bbcf87fb775b1 /dw/textblock_linebreaking.cc
parenta9cd5ace07c664beb87b0b4fbcbff5a9c4213a86 (diff)
Added Extremes::adjustmentWidth; fixed Textblock::mustBeWidenedToAvailWidth.
Diffstat (limited to 'dw/textblock_linebreaking.cc')
-rw-r--r--dw/textblock_linebreaking.cc24
1 files changed, 19 insertions, 5 deletions
diff --git a/dw/textblock_linebreaking.cc b/dw/textblock_linebreaking.cc
index ee91d596..cb5bad75 100644
--- a/dw/textblock_linebreaking.cc
+++ b/dw/textblock_linebreaking.cc
@@ -1238,8 +1238,8 @@ void Textblock::handleWordExtremes (int wordIndex)
Paragraph *par = paragraphs->getLastRef();
par->firstWord = par->lastWord = wordIndex;
- par->parMin = par->parMinIntrinsic = par->parMax = par->parMaxIntrinsic
- = 0;
+ par->parMin = par->parMinIntrinsic = par->parMax = par->parMaxIntrinsic =
+ par->parAdjustmentWidth = 0;
if (prevPar) {
par->maxParMin = prevPar->maxParMin;
@@ -1280,9 +1280,13 @@ void Textblock::handleWordExtremes (int wordIndex)
lastPar->parMin += wordExtremes.minWidth + word->hyphenWidth + corrDiffMin;
lastPar->parMinIntrinsic +=
wordExtremes.minWidthIntrinsic + word->hyphenWidth + corrDiffMin;
+ lastPar->parAdjustmentWidth +=
+ wordExtremes.adjustmentWidth + word->hyphenWidth + corrDiffMin;
lastPar->maxParMin = misc::max (lastPar->maxParMin, lastPar->parMin);
lastPar->maxParMinIntrinsic =
misc::max (lastPar->maxParMinIntrinsic, lastPar->parMinIntrinsic);
+ lastPar->maxParAdjustmentWidth =
+ misc::max (lastPar->maxParAdjustmentWidth, lastPar->parAdjustmentWidth);
DBG_OBJ_ARRATTRSET_NUM ("paragraphs", paragraphs->size() - 1, "parMin",
lastPar->parMin);
@@ -1292,15 +1296,24 @@ void Textblock::handleWordExtremes (int wordIndex)
lastPar->maxParMin);
DBG_OBJ_ARRATTRSET_NUM ("paragraphs", paragraphs->size() - 1,
"maxParMinIntrinsic", lastPar->maxParMinIntrinsic);
+ DBG_OBJ_ARRATTRSET_NUM ("paragraphs", paragraphs->size() - 1,
+ "parAdjustmentWidth", lastPar->parAdjustmentWidth);
+ DBG_OBJ_ARRATTRSET_NUM ("paragraphs", paragraphs->size() - 1,
+ "maxParAdjustmentWidth",
+ lastPar->maxParAdjustmentWidth);
if (word->badnessAndPenalty.lineCanBeBroken (1) &&
(word->flags & Word::UNBREAKABLE_FOR_MIN_WIDTH) == 0) {
- lastPar->parMin = lastPar->parMinIntrinsic = 0;
+ lastPar->parMin = lastPar->parMinIntrinsic = lastPar->parAdjustmentWidth
+ = 0;
DBG_OBJ_ARRATTRSET_NUM ("paragraphs", paragraphs->size() - 1, "parMin",
lastPar->parMin);
DBG_OBJ_ARRATTRSET_NUM ("paragraphs", paragraphs->size() - 1,
"parMinIntrinsic", lastPar->parMinIntrinsic);
+ DBG_OBJ_ARRATTRSET_NUM ("paragraphs", paragraphs->size() - 1,
+ "parAdjustmentWidth",
+ lastPar->parAdjustmentWidth);
}
// Maximum: between two *necessary* breaks.
@@ -1333,8 +1346,9 @@ void Textblock::correctLastWordExtremes ()
Word *word = words->getLastRef ();
if (word->badnessAndPenalty.lineCanBeBroken (1) &&
(word->flags & Word::UNBREAKABLE_FOR_MIN_WIDTH) == 0) {
- paragraphs->getLastRef()->parMin =
- paragraphs->getLastRef()->parMinIntrinsic = 0;
+ Paragraph *lastPar = paragraphs->getLastRef();
+ lastPar->parMin = lastPar->parMinIntrinsic =
+ lastPar->parAdjustmentWidth = 0;
PRINTF (" => corrected; parMin = %d\n",
paragraphs->getLastRef()->parMin);
}