@@ -57,9 +57,13 @@ public AbsolutelyPositionedRenderer(IRenderer wrappedRenderer, boolean verticalC
5757 @ Override
5858 public LayoutResult layout (LayoutContext layoutContext ) {
5959 LayoutContext copiedContext = copyContext (layoutContext );
60+ if (wrappedRenderer .hasProperty (Property .POSITIONED_ELEMENT_WRAPPER_LAYOUT )) {
61+ return dummyRenderer .layout (copiedContext );
62+ }
6063 Object positioning = wrappedRenderer .<Integer >getOwnProperty (Property .POSITION );
6164 wrappedRenderer .setProperty (Property .POSITION , LayoutPosition .STATIC );
6265 wrappedRenderer .setProperty (Property .FLOAT , FloatPropertyValue .NONE );
66+ wrappedRenderer .setProperty (Property .POSITIONED_ELEMENT_WRAPPER_LAYOUT , new Object ());
6367 LayoutResult result = wrappedRenderer .layout (copiedContext );
6468 if (result .getStatus () == LayoutResult .NOTHING ) {
6569 wrappedRenderer .setProperty (Property .FORCED_PLACEMENT , true );
@@ -71,6 +75,7 @@ public LayoutResult layout(LayoutContext layoutContext) {
7175 } else {
7276 wrappedRenderer .setProperty (Property .POSITION , positioning );
7377 }
78+ wrappedRenderer .deleteOwnProperty (Property .POSITIONED_ELEMENT_WRAPPER_LAYOUT );
7479 if (verticalCoordinateMissing ) {
7580 wrappedRenderer .setProperty (Property .TOP_CALCULATED , result .getOccupiedArea ().getBBox ().getTop ());
7681 }
@@ -87,6 +92,26 @@ public IRenderer getWrappedRenderer() {
8792 return wrappedRenderer ;
8893 }
8994
95+ @ Override
96+ public <T1 > T1 getProperty (int property , T1 defaultValue ) {
97+ if (Property .POSITION == property ) {
98+ // This absolutely positioned renderer wrapper is never supposed to be treated as absolutely positioned.
99+ // The whole idea of this wrapper is to calculate it's potential static coordinates.
100+ return (T1 ) (Object ) LayoutPosition .STATIC ;
101+ }
102+ return wrappedRenderer .<T1 >getProperty (property , defaultValue );
103+ }
104+
105+ @ Override
106+ public <T1 > T1 getProperty (int property ) {
107+ if (Property .POSITION == property ) {
108+ // This absolutely positioned renderer wrapper is never supposed to be treated as absolutely positioned.
109+ // The whole idea of this wrapper is to calculate it's potential static coordinates.
110+ return (T1 ) (Object ) LayoutPosition .STATIC ;
111+ }
112+ return wrappedRenderer .<T1 >getProperty (property );
113+ }
114+
90115 @ Override
91116 public IRenderer getNextRenderer () {
92117 return new AbsolutelyPositionedRenderer (wrappedRenderer .getNextRenderer (),
@@ -118,26 +143,6 @@ public boolean hasOwnProperty(int property) {
118143 return wrappedRenderer .hasOwnProperty (property );
119144 }
120145
121- @ Override
122- public <T1 > T1 getProperty (int property ) {
123- if (Property .POSITION == property ) {
124- // This absolutely positioned renderer wrapper is never supposed to be treated as absolutely positioned.
125- // The whole idea of this wrapper is to calculate it's potential static coordinates.
126- return (T1 ) (Object ) LayoutPosition .STATIC ;
127- }
128- return wrappedRenderer .<T1 >getProperty (property );
129- }
130-
131- @ Override
132- public <T1 > T1 getProperty (int property , T1 defaultValue ) {
133- if (Property .POSITION == property ) {
134- // This absolutely positioned renderer wrapper is never supposed to be treated as absolutely positioned.
135- // The whole idea of this wrapper is to calculate it's potential static coordinates.
136- return (T1 ) (Object ) LayoutPosition .STATIC ;
137- }
138- return wrappedRenderer .<T1 >getProperty (property , defaultValue );
139- }
140-
141146 @ Override
142147 public <T1 > T1 getOwnProperty (int property ) {
143148 return wrappedRenderer .<T1 >getOwnProperty (property );
0 commit comments