Skip to content

Commit c8e5d5c

Browse files
committed
added Render.startViewTransform and Render.endViewTransform
1 parent 47443b3 commit c8e5d5c

1 file changed

Lines changed: 26 additions & 8 deletions

File tree

src/render/Render.js

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)