Canvas visibility and opacity

This PR fixes #158 and cleans up the render implementations a little, mainly by promoting common methods from sub-classes into base classes.