Add contains() to shape
Reorganize shape creation and updating