plan for the new rendering model the first thing is to not do multiple passes. layout should not be called from paint. layout should return a block instead of a rectangle. the blocks should be saved as children paint should take a block instead of an element implement the rest of the caching later. //add a child list to Box //modify layout to use the child list on box //modify layout() and paint() to use boxes //modify box layout and inline layout to use the boxes //fix crash w/ tables (inline issue?) //fix bad rendering w/ lines //separate layout and paint into separate passes //fix bad rendering w/ lists //fix crash w/ inline images //fix nested boxes //fix bad table rendering //recativate replaced elements fix bad rendering w/ preformatted text //reactivate fixed //reactivate relative //reactivate float fix anonymous text block support define the origin and context flow the x and y of a box is relative to the inner bounds of the containing box the available width is relative to the inner bounds of the containing box painting: the border and background are painted relative to the inner bounds of the containing box the contents of a box are painted relative to the inner bounds of the box, ie 0,0. (not the inner bounds of the containing box) dealing with anonymous text blocks inserting a new tag to wrap the text blocks in seems like a bad idea since it would be hard to undo i will have to modify the inline layout's nexttext node search to look for block boundaries first i need to come up with a bunch of test cases for all possible scenarios