But, we don't need to create actually a surface/canvas for every coord. We only create surface for coords their opacity value are not 1 or they apply filters on background. Child shapes of coords without canvas are drawed on canvas of nearest ancestor which have canvas. It said a coord owns a canvas or inherits from an ancestor. (COF_OWN_CANVAS, clean_coord()) Except, root_coord always owns a canvas.