I'm writing a Phonegap (3.2) app, I take a HTML5 canvas, make it full screen and the whole app UI is on this canvas.
Using a Samsung Galaxy S4 (Android 4.3) to test the app, the screen resolution of the app is only 360X640 and not 1080X1920 like I want it to be.
What is needed to be done in-order to make the app use the maximum possible screen resolution ?
I've added screen shots 1) // Looks OK but bad resolution
windowWidth = window.innerWidth; windowHeight = window.innerHeight;
2) // Takes small part of the screen, rest is white
windowWidth = window.outerWidth; windowHeight = window.outerHeight;
3) // Only a small part of the picture is visible, as if the image is at 1080X1920 but the screen is 'too small' for it.
windowWidth = screen.width; windowHeight = screen.height;
and here is the full code:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>PhoneGapTesting</title>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
<!-- -->
<script type="text/javascript">
var windowWidth;
var windowHeight;
var canvasMain;
var contextMain;
var backgroundImage;
$(document).ready(function() {
windowWidth = window.innerWidth;
windowHeight = window.innerHeight;
//windowWidth = window.outerWidth; // Only 'window.innerWidth' + 'window.innerHeight' look OK but not max resolution
//windowHeight = window.outerHeight;
//windowWidth = screen.width;
//windowHeight = screen.height;
canvasMain = document.getElementById("canvasSignatureMain");
canvasMain.width = windowWidth;
canvasMain.height = windowHeight;
contextMain = canvasMain.getContext("2d");
backgroundImage = new Image();
backgroundImage.src = 'img/landscape_7.jpg';
backgroundImage.onload = function() {
contextMain.drawImage(backgroundImage, 0, 0, backgroundImage.width, backgroundImage.height, 0, 0, canvasMain.width, canvasMain.height);
};
$("#canvasSignatureMain").fadeIn(0);
})
</script>
</head>
<body scroll="no" style="overflow: hidden">
<center>
<div id="deleteThisDivButNotItsContent">
<canvas id="canvasSignatureMain" style="border:1px solid #000000; position:absolute; top:0;left:0;"></canvas><br>
</div>
</center>
</body>
</html>
Thanks.
A solution that is working with both resolution and touch event issue (that came with Ken's post):
In the < head >
Thanks Ken for trying to help bro :))
window.innerWidth
andwindow.innerHeight
don't necessarily give you the real screen dimensions.Try this instead:
target-densitydpi
in the meta tag in Miko's post is deprecated in Chrome and should not be used.Instead, try the following:
index.html:
You should also consider using Phaser's methods for scaling, like this:
Boot.js:
For performance, use the smallest dimensions that you can regardless of the device's resolution. Let Phaser create the canvas object.
Game.js:
Your entire canvas will scale automatically by the ScaleManager, but this slows the app down when performance is needed -- especially with a large canvas. EXACT_FIT will stretch the canvas, while SHOW_ALL will resize it so that the whole canvas fits onto the screen without changing its aspect ratio (which can leave margins like the one you have).
Try something like this:
(or an absolute value for the css rule).
On devices where the pixel ratio is higher than the typical 1:1 you get a higher resolution canvas. For normal circumstances everything is as normal.