aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dw/table.cc26
-rw-r--r--dw/table.hh2
2 files changed, 25 insertions, 3 deletions
diff --git a/dw/table.cc b/dw/table.cc
index c5633a62..24aaa3d9 100644
--- a/dw/table.cc
+++ b/dw/table.cc
@@ -490,6 +490,12 @@ const char *Table::getExtrModName (ExtrMod mod)
case MIN_INTR:
return "MIN_INTR";
+ case MIN_MIN:
+ return "MIN_MIN";
+
+ case MAX_MIN:
+ return "MAX_MIN";
+
case MAX:
return "MAX";
@@ -511,6 +517,12 @@ int Table::getExtreme (core::Extremes *extremes, ExtrMod mod)
case MIN_INTR:
return extremes->minWidthIntrinsic;
+ case MIN_MIN:
+ return misc::min (extremes->minWidth, extremes->minWidthIntrinsic);
+
+ case MAX_MIN:
+ return misc::max (extremes->minWidth, extremes->minWidthIntrinsic);
+
case MAX:
return extremes->maxWidth;
@@ -533,6 +545,8 @@ void Table::setExtreme (core::Extremes *extremes, ExtrMod mod, int value)
extremes->minWidthIntrinsic = value;
break;
+ // MIN_MIN and MAX_MIN not supported here.
+
case MAX:
extremes->maxWidth = value;
break;
@@ -668,8 +682,16 @@ void Table::forceCalcCellSizes (bool calcHeights)
misc::SimpleVector<int> *oldColWidths = colWidths;
colWidths = new misc::SimpleVector <int> (8);
- apportion2 (totalWidth, getStyle()->width != core::style::LENGTH_AUTO,
- 0, colExtremes->size() - 1, MIN, MAX, colWidths, 0, true);
+ int minWidth = 0;
+ for (int col = 0; col < colExtremes->size(); col++)
+ minWidth += getColExtreme (col, MIN);
+
+ if (minWidth > totalWidth)
+ apportion2 (totalWidth, false, 0, colExtremes->size() - 1,
+ MIN_MIN, MAX_MIN, colWidths, 0, true);
+ else
+ apportion2 (totalWidth, getStyle()->width != core::style::LENGTH_AUTO,
+ 0, colExtremes->size() - 1, MIN, MAX, colWidths, 0, true);
DBG_IF_RTFL {
DBG_OBJ_SET_NUM ("colWidths.size", colWidths->size ());
diff --git a/dw/table.hh b/dw/table.hh
index d1743f68..6282d9eb 100644
--- a/dw/table.hh
+++ b/dw/table.hh
@@ -394,7 +394,7 @@ private:
bool colWidthsUpToDateWidthColExtremes;
- enum ExtrMod { MIN, MIN_INTR, MAX, MAX_INTR };
+ enum ExtrMod { MIN, MIN_INTR, MIN_MIN, MAX_MIN, MAX, MAX_INTR };
const char *getExtrModName (ExtrMod mod);
int getExtreme (core::Extremes *extremes, ExtrMod mod);