Cells were incorrectly setting padding every time they were composed which was causing cell lines to become incorrectly invalid and put cells into an unstable state.
I think ContainerController should be adding the array including tables to _shapeChildren and not the old _linesInView which only contains pure lines.
diff --git a/textLayout/src/flashx/textLayout/container/ContainerController.as b/textLayout/src/flashx/textLayout/container/ContainerController.as
index 2e375f4..eef34fb 100644
--- a/textLayout/src/flashx/textLayout/container/ContainerController.as
+++ b/textLayout/src/flashx/textLayout/container/ContainerController.as
@@ -3248,7 +3248,8 @@
{
// We only updated some of the lines. Remove the old versions off the end, and add in the new ones from _linesInView
_shapeChildren.length = shapeChildrenStartIdx; // truncate
- _shapeChildren = _shapeChildren.concat(_linesInView); // append _linesInView to end of _shapeChildren
+ //_shapeChildren = _shapeChildren.concat(_linesInView); // append _linesInView to end of _shapeChildren
+ _shapeChildren = _shapeChildren.concat(newShapeChildren); // append _linesInView to end of _shapeChildren
_linesInView.length = 0; // truncate
}
else
diff --git a/textLayout/src/flashx/textLayout/elements/TableCellElement.as b/textLayout/src/flashx/textLayout/elements/TableCellElement.as
index 7f04939..197d4c9 100644
--- a/textLayout/src/flashx/textLayout/elements/TableCellElement.as
+++ b/textLayout/src/flashx/textLayout/elements/TableCellElement.as
@@ -27,6 +27,7 @@
import flash.utils.getDefinitionByName;
import flash.utils.getQualifiedClassName;
+ import flashx.textLayout.compose.FlowDamageType;
import flashx.textLayout.compose.TextFlowLine;
import flashx.textLayout.container.ContainerController;
import flashx.textLayout.edit.EditManager;
@@ -90,26 +91,52 @@
}
public function isDamaged():Boolean {
- return _damaged;
+ return _damaged || (_textFlow && _textFlow.flowComposer.isDamaged(_textFlow.textLength));
}
+ private var _savedPaddingTop:Number = 0;
+ private var _savedPaddingBottom:Number = 0;
+ private var _savedPaddingLeft:Number = 0;
+ private var _savedPaddingRight:Number = 0;
+
public function compose():Boolean {
+
+ var pt:Number = getEffectivePaddingTop();
+ var pb:Number = getEffectivePaddingBottom();
+ var pl:Number = getEffectivePaddingLeft();
+ var pr:Number = getEffectivePaddingRight();
+
+ if(pt != _savedPaddingTop)
+ {
+ _controller.paddingTop = _savedPaddingTop = pt;
+ }
+ if(pb != _savedPaddingBottom)
+ {
+ _controller.paddingBottom = _savedPaddingBottom = pb;
+ }
+ if(pl != _savedPaddingLeft)
+ {
+ _controller.paddingLeft = _savedPaddingLeft = pl;
+ }
+ if(pr != _savedPaddingRight)
+ {
+ _controller.paddingRight = _savedPaddingRight = pr;
+ }
+
var table:TableElement = getTable();
- width = 0;
+
+ _damaged = false;
+
+ var compWidth:Number = 0;
for(var i:int=0;i<columnSpan;i++)
{
if (table && table.getColumnAt(colIndex+i)) {
- width += table.getColumnAt(colIndex+i).columnWidth;
+ compWidth += table.getColumnAt(colIndex+i).columnWidth;
}
}
-
- _damaged = false;
- _controller.paddingTop = getEffectivePaddingTop();
- _controller.paddingBottom = getEffectivePaddingBottom();
- _controller.paddingLeft = getEffectivePaddingLeft();
- _controller.paddingRight = getEffectivePaddingRight();
-
+ width = compWidth;
+
if (_textFlow && _textFlow.flowComposer) {
return _textFlow.flowComposer.compose();
}