@@ -256,6 +256,30 @@ var Vector = require('../geometry/Vector');
256256 }
257257 } ;
258258
259+ /**
260+ * Applies viewport transforms based on `render.bounds` to a render context.
261+ * @method startViewTransform
262+ * @param {render } render
263+ */
264+ Render . startViewTransform = function ( render ) {
265+ var boundsWidth = render . bounds . max . x - render . bounds . min . x ,
266+ boundsHeight = render . bounds . max . y - render . bounds . min . y ,
267+ boundsScaleX = boundsWidth / render . options . width ,
268+ boundsScaleY = boundsHeight / render . options . height ;
269+
270+ render . context . scale ( 1 / boundsScaleX , 1 / boundsScaleY ) ;
271+ render . context . translate ( - render . bounds . min . x , - render . bounds . min . y ) ;
272+ } ;
273+
274+ /**
275+ * Resets all transforms on the render context.
276+ * @method endViewTransform
277+ * @param {render } render
278+ */
279+ Render . endViewTransform = function ( render ) {
280+ render . context . setTransform ( render . options . pixelRatio , 0 , 0 , render . options . pixelRatio , 0 , 0 ) ;
281+ } ;
282+
259283 /**
260284 * Renders the given `engine`'s `Matter.World` object.
261285 * This is the entry point for all rendering and should be called every time the scene changes.
@@ -293,11 +317,6 @@ var Vector = require('../geometry/Vector');
293317
294318 // handle bounds
295319 if ( options . hasBounds ) {
296- var boundsWidth = render . bounds . max . x - render . bounds . min . x ,
297- boundsHeight = render . bounds . max . y - render . bounds . min . y ,
298- boundsScaleX = boundsWidth / options . width ,
299- boundsScaleY = boundsHeight / options . height ;
300-
301320 // filter out bodies that are not in view
302321 for ( i = 0 ; i < allBodies . length ; i ++ ) {
303322 var body = allBodies [ i ] ;
@@ -324,8 +343,7 @@ var Vector = require('../geometry/Vector');
324343 }
325344
326345 // transform the view
327- context . scale ( 1 / boundsScaleX , 1 / boundsScaleY ) ;
328- context . translate ( - render . bounds . min . x , - render . bounds . min . y ) ;
346+ Render . startViewTransform ( render ) ;
329347 } else {
330348 constraints = allConstraints ;
331349 bodies = allBodies ;
@@ -379,7 +397,7 @@ var Vector = require('../geometry/Vector');
379397
380398 if ( options . hasBounds ) {
381399 // revert view transforms
382- context . setTransform ( options . pixelRatio , 0 , 0 , options . pixelRatio , 0 , 0 ) ;
400+ Render . endViewTransform ( render ) ;
383401 }
384402
385403 Events . trigger ( render , 'afterRender' , event ) ;
0 commit comments