diff options
Diffstat (limited to 'web/js/nms-map.js')
| -rw-r--r-- | web/js/nms-map.js | 59 | 
1 files changed, 45 insertions, 14 deletions
| diff --git a/web/js/nms-map.js b/web/js/nms-map.js index 26782f8..491916b 100644 --- a/web/js/nms-map.js +++ b/web/js/nms-map.js @@ -26,13 +26,16 @@ var nmsMap = nmsMap || {  		resizeEvents:0,  		switchInfoSame:0,  		switchInfoUpdate:0, -		highlightChange:0 +		highlightChange:0, +		textSwitchDraws:0, +		textInfoDraws:0, +		textInfoClears:0  	},  	contexts: ["bg","link","blur","switch","text","textInfo","top","input","hidden"],  	_info: {},  	_settings: {  		fontLineFactor: 2, -		textMargin: 3, +		textMargin: 4,  		xMargin: 10,  		yMargin: 20,  		fontSize: 15, @@ -50,7 +53,9 @@ var nmsMap = nmsMap || {  	_linknets: {} ,  	_highlight: { },  	_highlightActive: false, -	_c: {} +	_c: {}, +	_lastName: {}, +	_lastInfo: {}  };  nmsMap._loadEvent = function(e) { @@ -136,7 +141,17 @@ nmsMap._resizeEvent = function() {  	var xScale = (width / (nmsMap._orig.width + nmsMap._settings.xMargin));  	var yScale = (height / (nmsMap._orig.height + nmsMap._settings.yMargin)); -	 + +	/* +	 * We need to forget this. Because the rescale will blank the text +	 * anyway it is safe to set it to undefined here. This is a special +	 * case, if you set it to 'undefined' anywhere else to "reset" or +	 * force a redraw of the text you will introduce a bug if a handler +	 * then tries to _unset_ the text (which you do by setting the text +	 * to undefined) +	 */ +	nmsMap._lastName = {}; +	nmsMap._lastInfo = {};  	if (xScale > yScale) {  		nmsMap.scale = yScale;	  	} else { @@ -150,9 +165,9 @@ nmsMap._resizeEvent = function() {  			continue;  		nmsMap._c[a].c.height = nmsMap._canvas.height;  		nmsMap._c[a].c.width = nmsMap._canvas.width; -    if(a == 'bg') { -      nmsMap._drawBG(); -    } +		if(a == 'bg') { +			nmsMap._drawBG(); +		}  	}  	if (nmsMap._init != true) {  		nmsMap._blurDrawn = false; @@ -296,7 +311,16 @@ nmsMap._drawSwitch = function(sw)  	this._c.switch.ctx.fillStyle = color;  	this._drawBox(this._c.switch.ctx, box['x'],box['y'],box['width'],box['height']);  	this._c.switch.ctx.shadowBlur = 0; -	this._drawText(this._c.text.ctx, sw,box); +	var switchtext = sw; +	var textl = switchtext.length; +	if (textl > 10) +		switchtext = switchtext.slice(0,5) + ".." + switchtext.slice(textl-2,textl); + +	if (this._lastName[sw] != switchtext) { +		nmsMap.stats.textSwitchDraws++; +		this._drawText(this._c.text.ctx, switchtext,box); +		this._lastName[sw] = switchtext; +	}  	if(this._info[sw])  		this._drawSwitchInfo(sw); @@ -304,17 +328,24 @@ nmsMap._drawSwitch = function(sw)  nmsMap._drawSwitchInfo = function(sw) {  	var box = this._getBox(sw); -	if (this._info[sw] == undefined) { -		this._clearBox(this._c.textInfo.ctx, box); -	} else { +	if (this._lastInfo[sw] == this._info[sw]) +		return; +	this._clearBox(this._c.textInfo.ctx, box, 3); +	nmsMap.stats.textInfoClears++; +	if (this._info[sw] != undefined) {  		this._drawText(this._c.textInfo.ctx, this._info[sw], box, "right"); +		nmsMap.stats.textInfoDraws++;  	} +	this._lastInfo[sw] = this._info[sw];  }; -nmsMap._clearBox = function(ctx,box) { +nmsMap._clearBox = function(ctx,box,margin) { +	if (margin == undefined) +		margin = 0;  	ctx.save(); +	margin = Math.floor(margin * this.scale );  	ctx.scale(this.scale,this.scale); -	ctx.clearRect(box['x'], box['y'], box['width'], box['height']); +	ctx.clearRect(box['x'] - margin, box['y'] - margin, box['width'] + margin*2, box['height'] + margin*2);  	ctx.restore();  }; @@ -324,7 +355,7 @@ nmsMap._drawText = function(ctx, text, box, align) {  	if ((box['width'] + 10 )< box['height'])  		rotate = true; -	this._clearBox(ctx,box); +	this._clearBox(ctx,box, 1);  	ctx.save();  	ctx.scale(this.scale, this.scale);  	ctx.font = "bold " + this._settings.fontSize + "px " + this._settings.fontFace; | 
