| var canvas = null; | var canvas = null; | ||||
| var context = null; | var context = null; | ||||
| // Handling window resize events... | |||||
| var HANDLE_Resize = Utils.debounce(function(e){ | |||||
| function ResizeCanvasImg(w, h){ | |||||
| if (canvas !== null){ | if (canvas !== null){ | ||||
| var w = canvas.clientWidth; | |||||
| var h = canvas.clientHeight; | |||||
| canvas.width = w; | canvas.width = w; | ||||
| canvas.height = h; | canvas.height = h; | ||||
| GlobalEvents.emit("resize", w, h); | |||||
| } | |||||
| }; | |||||
| // Handling window resize events... | |||||
| var HANDLE_Resize = Utils.debounce(function(e){ | |||||
| if (canvas !== null){ | |||||
| ResizeCanvasImg( | |||||
| canvas.clientWidth, | |||||
| canvas.clientHeight | |||||
| ); | |||||
| GlobalEvents.emit("resize", canvas.clientWidth, canvas.clientHeight); | |||||
| } | } | ||||
| }, 250); | }, 250); | ||||
| window.addEventListener("resize", HANDLE_Resize); | window.addEventListener("resize", HANDLE_Resize); | ||||
| return; | return; | ||||
| } | } | ||||
| this.__surface = surf; | this.__surface = surf; | ||||
| this.centerSurface(); | |||||
| this.render(); | this.render(); | ||||
| }).bind(this); | }).bind(this); | ||||
| GlobalEvents.listen("change_surface", handle_change_surface); | GlobalEvents.listen("change_surface", handle_change_surface); | ||||
| if (!context) | if (!context) | ||||
| throw new Error("Failed to obtain canvas context."); | throw new Error("Failed to obtain canvas context."); | ||||
| context.imageSmoothingEnabled = false; | context.imageSmoothingEnabled = false; | ||||
| ResizeCanvasImg(canvas.clientWidth, canvas.clientHeight); // A forced "resize". | |||||
| input.mouseTargetElement = canvas; | input.mouseTargetElement = canvas; | ||||
| this.centerSurface(); | |||||
| } | } | ||||
| return this; | |||||
| } | } | ||||
| scale_up(amount=1){ | scale_up(amount=1){ | ||||
| this.scale = this.scale + (amount*0.1); | this.scale = this.scale + (amount*0.1); | ||||
| return this; | |||||
| } | } | ||||
| scale_down(amount=1){ | scale_down(amount=1){ | ||||
| this.scale = this.scale - (amount*0.1); | this.scale = this.scale - (amount*0.1); | ||||
| return this; | |||||
| } | |||||
| centerSurface(){ | |||||
| if (canvas === null || this.__surface === null) | |||||
| return; | |||||
| this.__offset[0] = Math.floor((canvas.clientWidth - this.__surface.width) * 0.5); | |||||
| this.__offset[1] = Math.floor((canvas.clientHeight - this.__surface.height) * 0.5); | |||||
| return this; | |||||
| } | } | ||||
| render(){ | render(){ | ||||
| // Get the contexts initial fillStyle. Don't want the render operation to override it. | // Get the contexts initial fillStyle. Don't want the render operation to override it. | ||||
| var fillStyle = context.fillStyle; | var fillStyle = context.fillStyle; | ||||
| var ie = this.__surface.width - this.__offset[0]; | |||||
| var je = this.__surface.height - this.__offset[1]; | |||||
| var ie = this.__offset[0] + this.__surface.width; | |||||
| var je = this.__offset[1] + this.__surface.height; | |||||
| var scalemult = 1.0/this.__scale; | var scalemult = 1.0/this.__scale; | ||||
| // Clearing the context surface... | // Clearing the context surface... | ||||
| Math.floor(canvas.clientHeight) | Math.floor(canvas.clientHeight) | ||||
| ); | ); | ||||
| for (var j = -this.__offset[1]; j < je; j++){ | |||||
| var y = Math.floor(j*scalemult); | |||||
| for (var i = -this.__offset[0]; i < ie; i++){ | |||||
| var x = Math.floor(i*scalemult); | |||||
| for (var j = 0; j < this.__surface.height; j++){ | |||||
| var y = Math.floor((j*scalemult) + this.__offset[1]); | |||||
| for (var i = 0; i < this.__surface.width; i++){ | |||||
| var x = Math.floor((i*scalemult) + this.__offset[0]); | |||||
| var color = "#666666"; | |||||
| if (this.__onePaletteMode){ | |||||
| var pinfo = this.__surface.getColorIndex(x, y); | |||||
| if (pinfo.ci >= 0) | |||||
| color = NESPalette.Default[pinfo.ci]; | |||||
| } else { | |||||
| color = this.__surface.getColor(x, y); | |||||
| if (x >= 0 && x < canvas.clientWidth && y >= 0 && y < canvas.clientHeight){ | |||||
| var color = "#666666"; | |||||
| if (this.__onePaletteMode){ | |||||
| var pinfo = this.__surface.getColorIndex(i, j); | |||||
| if (pinfo.ci >= 0) | |||||
| color = NESPalette.Default[pinfo.ci]; | |||||
| } else { | |||||
| color = this.__surface.getColor(i, j); | |||||
| } | |||||
| context.fillStyle = color; | |||||
| context.fillRect( | |||||
| x,y, | |||||
| 1, 1 | |||||
| ); | |||||
| } | } | ||||
| context.fillStyle = color; | |||||
| context.fillRect( | |||||
| i + this.__offset[0], | |||||
| j + this.__offset[1], | |||||
| 1, 1 | |||||
| ); | |||||
| } | } | ||||
| } | } | ||||
| // Return to the context's initial fillStyle. | // Return to the context's initial fillStyle. | ||||
| context.fillStyle = fillStyle; | context.fillStyle = fillStyle; | ||||
| return this; | |||||
| } | } | ||||
| } | } | ||||