@@ -722,22 +722,40 @@ proto.project = function(v) {
722722proto . getView = function ( ) {
723723 var map = this . map ;
724724 var mapCenter = map . getCenter ( ) ;
725- var center = { lon : mapCenter . lng , lat : mapCenter . lat } ;
725+ var lon = mapCenter . lng ;
726+ var lat = mapCenter . lat ;
727+ var center = { lon : lon , lat : lat } ;
726728
727729 var canvas = map . getCanvas ( ) ;
728- var w = canvas . width ;
729- var h = canvas . height ;
730+ var width = canvas . width ;
731+ var height = canvas . height ;
732+
733+ var p00 , p10 , p11 , p01 ;
734+
735+ // attempt finding correct scale for Retina display
736+ for ( var scale = 2 ; scale > 0 ; scale -- ) {
737+ var w = width / scale ;
738+ var h = height / scale ;
739+
740+ p00 = map . unproject ( [ 0 , 0 ] ) . toArray ( ) ;
741+ p10 = map . unproject ( [ w , 0 ] ) . toArray ( ) ;
742+ p11 = map . unproject ( [ w , h ] ) . toArray ( ) ;
743+ p01 = map . unproject ( [ 0 , h ] ) . toArray ( ) ;
744+
745+ if ( Math . abs ( lon - ( p00 [ 0 ] + p11 [ 0 ] ) / 2 ) < 0.0001 ) break ;
746+ }
747+
730748 return {
731749 center : center ,
732750 zoom : map . getZoom ( ) ,
733751 bearing : map . getBearing ( ) ,
734752 pitch : map . getPitch ( ) ,
735753 _derived : {
736754 coordinates : [
737- map . unproject ( [ 0 , 0 ] ) . toArray ( ) ,
738- map . unproject ( [ w , 0 ] ) . toArray ( ) ,
739- map . unproject ( [ w , h ] ) . toArray ( ) ,
740- map . unproject ( [ 0 , h ] ) . toArray ( )
755+ p00 ,
756+ p10 ,
757+ p11 ,
758+ p01
741759 ]
742760 }
743761 } ;
0 commit comments