Surface viewer zoom: use absolute zoom property instead of relative zoom method

Related to #116 
Move `viewer.updated` and `triggerEvent` lines to a check in the render loop.