RenderLayer code

Lars Knoll lars@trolltech.com
Fri, 31 Jan 2003 10:07:58 +0100


--Boundary-00=_uzjO+iJlGX8W0il
Content-Type: text/plain;
  charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline


> I found two bugs with this zauto change when making it in the Safari
> tree.
>
> (1) This may have just been left out, but you'll need to make sure you
> initialize zindex to ZAUTO now instead of 0 in render_style.cpp.
>
> StyleBoxData::StyleBoxData()
>
>      : z_index( ZAUTO )

Yes, I did that.

> (2) You need an extra else in cssstyleselector.cpp to avoid overwriting
> the value of ZAUTO when auto is explicitly specified.
>
> > if (primitiveValue->getIdent() == CSS_VAL_AUTO) {
> >                 z_index = ZAUTO;
> >             } else if (primitiveValue->primitiveType() !=
> > CSSPrimitiveValue::CSS_NUMBER)
> >                 return; // Error case.
>
> *else* goes here.

That was the problem. Thanks for finding it. I do now pass test 7. Test 8 is 
still doesn't pass but you said, that this is because of the test being 
wrong. 

I still don't pass test 4 however (see attached screenshot). I think your code 
flattening the ztree does not honour document order when zindeces are equal.

At the same time we have a performance problem with the layer code I have to 
look into. Our painting got slower by a factor of about 5 (just estimated). 
I'll check with the new layer code, but one problem might be that you 
construct and flatten the ztree on every paint call.

Our khtml paints the web page in vertical stripes of 128 pixels (for double 
buffering), so a repaint of the full widget calls paint maybe 5-6 times. 
Since this doesn't change very often it would probably be a good idea to 
cache the flattened list.

I thought about adding a RenderLayer *nextToPaint pointer to the layers 
themselves. Like that one would not need an extra list. If a layer gets 
inserted or removed, the paint order can be recalculated, but the paint() 
method should not need to do this.

Lars


Cheers,
Lars

--Boundary-00=_uzjO+iJlGX8W0il
Content-Type: image/png;
  name="sec0909_4.png"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="sec0909_4.png"

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
gg==

--Boundary-00=_uzjO+iJlGX8W0il--