@@ -79,7 +79,7 @@ public override void AddChild(IRenderer renderer) {
7979 int numberOfPositionedChildRenderers = positionedRenderers . Count ;
8080 base . AddChild ( renderer ) ;
8181 IList < IRenderer > addedRenderers = new List < IRenderer > ( 1 ) ;
82- if ( currentArea != null && currentArea . GetPageNumber ( ) > 1 ) {
82+ if ( currentArea != null && currentArea . IsEmptyArea ( ) ) {
8383 addedRenderers . AddAll ( waitingRenderers ) ;
8484 waitingRenderers . Clear ( ) ;
8585 }
@@ -111,13 +111,13 @@ public override void AddChild(IRenderer renderer) {
111111 if ( marginsCollapsingEnabled && currentArea != null && renderer != null ) {
112112 childMarginsInfo = marginsCollapseHandler . StartChildMarginsHandling ( renderer , currentArea . GetBBox ( ) ) ;
113113 }
114- FloatPropertyValue ? floatPropertyValue = renderer . GetProperty ( Property . FLOAT ) ;
115- bool rendererIsFloat = floatPropertyValue != null && ! floatPropertyValue . Equals ( FloatPropertyValue . NONE ) ;
114+ bool rendererIsFloat = FloatingHelper . IsRendererFloating ( renderer ) ;
116115 while ( currentArea != null && renderer != null && ( result = renderer . SetParent ( this ) . Layout ( new LayoutContext
117116 ( currentArea . Clone ( ) , childMarginsInfo , floatRendererAreas ) ) ) . GetStatus ( ) != LayoutResult . FULL ) {
118117 if ( result . GetStatus ( ) == LayoutResult . PARTIAL ) {
119118 if ( rendererIsFloat ) {
120119 waitingRenderers . Add ( result . GetOverflowRenderer ( ) ) ;
120+ floatRendererAreas . Add ( renderer . GetOccupiedArea ( ) . GetBBox ( ) ) ;
121121 }
122122 else {
123123 if ( result . GetOverflowRenderer ( ) is ImageRenderer ) {
@@ -139,14 +139,21 @@ public override void AddChild(IRenderer renderer) {
139139 else {
140140 if ( result . GetStatus ( ) == LayoutResult . NOTHING ) {
141141 if ( result . GetOverflowRenderer ( ) is ImageRenderer ) {
142- if ( currentArea . GetBBox ( ) . GetHeight ( ) < ( ( ImageRenderer ) result . GetOverflowRenderer ( ) ) . imageHeight && ! currentArea
143- . IsEmptyArea ( ) ) {
142+ if ( currentArea . GetBBox ( ) . GetHeight ( ) < ( ( ImageRenderer ) result . GetOverflowRenderer ( ) ) . GetOccupiedArea ( ) . GetBBox
143+ ( ) . GetHeight ( ) && ! currentArea . IsEmptyArea ( ) && ! rendererIsFloat ) {
144144 UpdateCurrentAndInitialArea ( result ) ;
145145 }
146- ( ( ImageRenderer ) result . GetOverflowRenderer ( ) ) . AutoScale ( currentArea ) ;
147- result . GetOverflowRenderer ( ) . SetProperty ( Property . FORCED_PLACEMENT , true ) ;
148- ILogger logger = LoggerFactory . GetLogger ( typeof ( RootRenderer ) ) ;
149- logger . Warn ( MessageFormatUtil . Format ( iText . IO . LogMessageConstant . ELEMENT_DOES_NOT_FIT_AREA , "" ) ) ;
146+ else {
147+ if ( rendererIsFloat ) {
148+ waitingRenderers . Add ( result . GetOverflowRenderer ( ) ) ;
149+ }
150+ else {
151+ ( ( ImageRenderer ) result . GetOverflowRenderer ( ) ) . AutoScale ( currentArea ) ;
152+ result . GetOverflowRenderer ( ) . SetProperty ( Property . FORCED_PLACEMENT , true ) ;
153+ ILogger logger = LoggerFactory . GetLogger ( typeof ( RootRenderer ) ) ;
154+ logger . Warn ( MessageFormatUtil . Format ( iText . IO . LogMessageConstant . ELEMENT_DOES_NOT_FIT_AREA , "" ) ) ;
155+ }
156+ }
150157 }
151158 else {
152159 if ( currentArea . IsEmptyArea ( ) && result . GetAreaBreak ( ) == null ) {
@@ -198,9 +205,9 @@ public override void AddChild(IRenderer renderer) {
198205 }
199206 }
200207 }
201- if ( rendererIsFloat && result . GetStatus ( ) != LayoutResult . NOTHING ) {
208+ if ( rendererIsFloat && ( result . GetStatus ( ) != LayoutResult . NOTHING || renderer is ImageRenderer ) ) {
202209 renderer = null ;
203- continue ;
210+ break ;
204211 }
205212 if ( ! waitingRenderers . IsEmpty ( ) ) {
206213 renderer = waitingRenderers . JRemoveAt ( 0 ) ;
@@ -292,6 +299,16 @@ public virtual void Flush() {
292299 /// and when no consequent element has been added. This method addresses such situations.
293300 /// </summary>
294301 public virtual void Close ( ) {
302+ IList < IRenderer > waitingFloatRenderers = new List < IRenderer > ( waitingRenderers ) ;
303+ while ( ! waitingFloatRenderers . IsEmpty ( ) ) {
304+ marginsCollapseHandler = new MarginsCollapseHandler ( this , null ) ;
305+ waitingRenderers . Clear ( ) ;
306+ UpdateCurrentAndInitialArea ( null ) ;
307+ foreach ( IRenderer renderer in waitingFloatRenderers ) {
308+ AddChild ( renderer ) ;
309+ }
310+ waitingFloatRenderers = new List < IRenderer > ( waitingRenderers ) ;
311+ }
295312 if ( keepWithNextHangingRenderer != null ) {
296313 keepWithNextHangingRenderer . SetProperty ( Property . KEEP_WITH_NEXT , false ) ;
297314 IRenderer rendererToBeAdded = keepWithNextHangingRenderer ;
0 commit comments