|
- import Utils from "/app/js/common/Utils.js";
- import GlobalEvents from "/app/js/common/EventCaller.js";
-
- import Input from "/app/js/ui/Input.js";
-
- import NESTile from "/app/js/models/NESTile.js";
- import NESBank from "/app/js/models/NESBank.js";
-
-
- const EL_CANVAS_ID = "painter";
-
-
- /* --------------------------------------------------------------------
- * Univeral data and functions.
- ------------------------------------------------------------------- */
-
- var canvas = null;
- var context = null;
-
- // Handling window resize events...
- var HANDLE_Resize = Utils.debounce(function(e){
- if (canvas !== null){
- var w = canvas.clientWidth;
- var h = canvas.clientHeight;
- canvas.width = w;
- canvas.height = h;
- }
- }, 250);
- window.addEventListener("resize", HANDLE_Resize);
-
-
- // Setting-up Input controls.
- var input = new Input();
- input.preventDefaults = true;
-
- // Mouse handling...
- /*input.listen("mousemove", handle_mouseevent);
- input.listen("mousedown", handle_mouseevent);
- input.listen("mouseup", handle_mouseevent);
- input.listen("mouseclick", handle_mouseclickevent);
- */
-
-
- /* --------------------------------------------------------------------
- * CTRLPainter
- * Actual controlling class.
- ------------------------------------------------------------------- */
-
- // For reference...
- // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/stroke
- class CTRLPainter {
- constructor(){
- this.__scale = 1.0; // This is the scale the painter will display source information.
- this.__offset = [0.0, 0.0]; // This is the X,Y offset from origin to display source information.
- this.__onePaletteMode = true; // If true, ALL tiles will be drawing using the same palette.
-
- this.__brushSize = 1;
- this.__brushColor = 0;
- this.__brushPalette = 0;
-
- this.__surface = null;
-
- var self = this;
-
- var handle_change_surface = (function(surf){
- if (!(surf instanceof ISurface)){
- console.log("WARNING: Attempted to set painter to non-surface instance.");
- return;
- }
- this.__surface = surf;
- // TODO: Call a rerender
- }).bind(this);
- GlobalEvents.listen("change_surface", handle_change_surface);
-
- var handle_color_change = (function(pi, ci){
- this.__brushPalette = pi;
- this.__brushColor = ci;
- }).bind(this);
- GlobalEvents.listen("active_palette_color", handle_color_change);
- }
-
- get onePaletteMode(){return this.__onePaletteMode;}
- set onePaletteMode(e){
- this.__onePaletteMode = (e === true);
- // TODO: Call a rerender.
- }
-
- get scale(){
- return this.__scale;
- }
-
- set scale(s){
- if (typeof(s) !== 'number')
- throw new TypeError("Expected number value.");
- this.__scale = Math.max(0.1, Math.min(100.0, s));
- }
-
- initialize(){
- if (canvas === null){
- canvas = document.getElementById(EL_CANVAS_ID);
- if (!canvas)
- throw new Error("Failed to obtain the canvas element.");
- context = canvas.getContext("2d");
- if (!context)
- throw new Error("Failed to obtain canvas context.");
- input.mouseTargetElement = canvas;
- }
- }
-
- scale_up(amount=1){
- this.scale = this.scale + (amount*0.1);
- }
-
- scale_down(amount=1){
- this.scale = this.scale - (amount*0.1);
- }
- }
-
-
- const instance = new CTRLPainter();
- export default instance;
-
-
|