The above pretty much answers it: canvas slots + optional container fill will get you there. Crude example: