summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dw/table.cc20
-rw-r--r--dw/table.hh2
-rw-r--r--lout/debug.hh7
3 files changed, 26 insertions, 3 deletions
diff --git a/dw/table.cc b/dw/table.cc
index b0d7de97..c9c725be 100644
--- a/dw/table.cc
+++ b/dw/table.cc
@@ -57,6 +57,10 @@ Table::Table(bool limitTextWidth)
baseline = new misc::SimpleVector <int> (8);
rowStyle = new misc::SimpleVector <core::style::Style*> (8);
+ colWidthsUpToDateWidthColExtremes = true;
+ DBG_OBJ_SET_BOOL ("colWidthsUpToDateWidthColExtremes",
+ colWidthsUpToDateWidthColExtremes);
+
redrawX = 0;
redrawY = 0;
}
@@ -634,9 +638,11 @@ void Table::calcCellSizes (bool calcHeights)
calcHeights ? "true" : "false");
DBG_OBJ_MSG_START ();
- if ((calcHeights && (needsResize () || resizeQueued () ||
- extremesChanged () || extremesQueued ())) ||
- (extremesChanged () || extremesQueued ()))
+ bool sizeChanged = needsResize () || resizeQueued ();
+ bool extremesChanges = extremesChanged () || extremesQueued ();
+
+ if (calcHeights ? (extremesChanges || sizeChanged) :
+ (extremesChanges || !colWidthsUpToDateWidthColExtremes))
forceCalcCellSizes (calcHeights);
DBG_OBJ_MSG_END ();
@@ -678,6 +684,10 @@ void Table::forceCalcCellSizes (bool calcHeights)
DBG_OBJ_ARRSET_NUM ("colWidths", i, colWidths->get (i));
}
+ colWidthsUpToDateWidthColExtremes = true;
+ DBG_OBJ_SET_BOOL ("colWidthsUpToDateWidthColExtremes",
+ colWidthsUpToDateWidthColExtremes);
+
if (calcHeights) {
setCumHeight (0, 0);
for (int row = 0; row < numRows; row++) {
@@ -914,6 +924,10 @@ void Table::forceCalcColumnExtremes ()
}
}
+ colWidthsUpToDateWidthColExtremes = false;
+ DBG_OBJ_SET_BOOL ("colWidthsUpToDateWidthColExtremes",
+ colWidthsUpToDateWidthColExtremes);
+
DBG_OBJ_MSG_END ();
}
diff --git a/dw/table.hh b/dw/table.hh
index 580f4431..cc2aec1b 100644
--- a/dw/table.hh
+++ b/dw/table.hh
@@ -392,6 +392,8 @@ private:
lout::misc::SimpleVector<core::style::Style*> *rowStyle;
+ bool colWidthsUpToDateWidthColExtremes;
+
inline bool childDefined(int n)
{
return n < children->size() && children->get(n) != NULL &&
diff --git a/lout/debug.hh b/lout/debug.hh
index b823f171..685238a4 100644
--- a/lout/debug.hh
+++ b/lout/debug.hh
@@ -189,6 +189,13 @@
fflush (stdout); \
} D_STMT_END
+#define DBG_OBJ_SET_BOOL(var, val) \
+ D_STMT_START { \
+ printf (RTFL_PREFIX_FMT "obj-set:%p:%s:%s\n", \
+ RTFL_PREFIX_ARGS, this, var, val ? "true" : "false"); \
+ fflush (stdout); \
+ } D_STMT_END
+
#define DBG_OBJ_SET_PTR_O(obj, var, val) \
D_STMT_START { \
printf (RTFL_PREFIX_FMT "obj-set:%p:%s:%p\n", \