add canvas protocol and delegate implementation to reified instance