Add texture areas

This PR is an extraction of #533.
It provides texture areas.
You're using `self->width` here, the function is called `height`!