Start to add canvas auto-scaling for retina.

This commit is contained in:
Gunther Brunner
2014-11-12 19:32:58 +09:00
parent 2fdcf8243c
commit 8d5b21d9bc
2 changed files with 30 additions and 1 deletions

View File

@@ -1,6 +1,29 @@
function CanvasRender(canvasElement, options) {
this.options = options
this.context = canvasElement.getContext('2d')
var devicePixelRatio = window.devicePixelRatio || 1
var backingStoreRatio = this.context.webkitBackingStorePixelRatio ||
this.context.mozBackingStorePixelRatio ||
this.context.msBackingStorePixelRatio ||
this.context.oBackingStorePixelRatio ||
this.context.backingStorePixelRatio || 1
this.frontBackRatio = devicePixelRatio / backingStoreRatio
if (options.autoScaleForRetina && devicePixelRatio !== backingStoreRatio) {
var oldWidth = canvas.width;
var oldHeight = canvas.height;
canvasElement.width = oldWidth * this.frontBackRatio
canvasElement.height = oldHeight * this.frontBackRatio
canvasElement.style.width = oldWidth + 'px'
canvasElement.style.height = oldHeight + 'px'
this.context.scale(this.frontBackRatio, this.frontBackRatio)
}
}
CanvasRender.prototype.draw = function (image) {

View File

@@ -38,6 +38,7 @@ module.exports = function DeviceScreenDirective($document, ScalingService,
, w: 0
, h: 0
}
, autoScaleForRetina: true
}
var cachedScreen = {
@@ -59,7 +60,7 @@ module.exports = function DeviceScreenDirective($document, ScalingService,
function setDisplayDensity(forRetina) {
// FORCE
forRetina = 1.2
forRetina = 1.5
guestDisplayDensity = BrowserInfo.retina ? forRetina : 1
return guestDisplayDensity
@@ -199,6 +200,11 @@ module.exports = function DeviceScreenDirective($document, ScalingService,
if (scope.$parent.showScreen) {
screen.rotation = device.display.rotation
// Check to set the size only if updated
if (cachedScreen.bounds.w !== screen.bounds.w ||
cachedScreen.bounds.h !== screen.bounds.h ||