Spoke too soon actually; try replacing the following function with these modifications:
def get_all_children(d, xoffset, yoffset, width, height): """Return all the children, grandchildren etc of d.""" children = [ ] offsets = [ ] sizes = [ ] if not hasattr(d, "children"): return children, offsets, sizes for i, child in enumerate(d.children): ## Render it to get the size # cr = child.render(width, height, 0, 0) ## Caused some weirdness with bars cr = renpy.render(child, width, height, 0, 0) sizes.append((cr.width, cr.height)) children.append(child) offsets.append(d.offsets[i]) if hasattr(child, "children"): ch, of, sz = get_all_children(child, d.offsets[i][0], d.offsets[i][1], cr.width, cr.height) children.extend(ch) offsets.extend(of) sizes.extend(sz) new_offsets = [ ] for of in offsets: new_offsets.append((of[0]+xoffset, of[1]+yoffset)) return children, new_offsets, sizes
Let me know if that fixes your problem. I still need to do a bit more testing to make sure other aspects of the viewport work as expected, but this did solve the bar problems for me.