diff --git a/exec/dorkit/graphic.js b/exec/dorkit/graphic.js index 646d0f91c52afbd3e147520294b9a061b6b957f2..72ef7f6f6108ce146b2c2cad87cecd8787ef8945 100644 --- a/exec/dorkit/graphic.js +++ b/exec/dorkit/graphic.js @@ -14,7 +14,6 @@ * * Instance variable data contains an array of array of Graphics.Cell objects * - * Instance variables atcodes are slated for removal. */ if (js.global.Attribute === undefined) @@ -38,8 +37,6 @@ function Graphic(w,h,attr,ch) else this.width=w; - this.atcodes=true; - this.data=new Array(this.width); for(var y=0; y<this.height; y++) { for(var x=0; x<this.width; x++) { @@ -344,6 +341,49 @@ Object.defineProperty(Graphic.prototype, "HTML", { } }); +/* + * Gets a portion of the Graphic object as a new Graphic object + */ +Graphic.prototype.get = function(sx, sy, ex, ey) +{ + var ret; + var x; + var y; + + if (sx < 0 || sy < 0 || sx >= this.width || sy > this.height + || ex < 0 || ey < 0 || ex >= this.width || ey > this.height + || ex < sx || ey < sy) + return undefined; + + ret = new Graphic(ex-sx+1, ey-sy+1, this.attr, this.ch); + for (x=sx; x<=ex; x++) { + for (y=sy; y<=ey; y++) { + ret.data[x-sx][y-sy].ch = this.data[x][y].ch; + ret.data[x-sx][y-sy].attr = new Attribute(this.data[x][y].attr); + } + } + return ret; +} + +/* + * Puts a graphic object into this one. + */ +Graphic.prototype.put = function(gr, x, y) +{ + var gx; + var gy; + + if (x < 0 || y < 0 || x+gr.width > this.width || y+gr.height > this.height) + return false; + + for (gx = 0; gx < gr.width; gx++) { + for (gy = 0; gy < gr.height; gy++) { + this.data[x+gx][y+gy].ch = gr.data[gx][gy].ch; + this.data[x+gx][y+gy].attr = new Attribute(gr.data[gx][gy].attr); + } + } +} + /* * Resets the graphic to all this.ch/this.attr Cells */ @@ -367,6 +407,7 @@ Graphic.prototype.draw = function(xpos,ypos,width,height,xoff,yoff) { var x; var y; + var ch; if(xpos==undefined) xpos=1; @@ -384,21 +425,21 @@ Graphic.prototype.draw = function(xpos,ypos,width,height,xoff,yoff) alert("Attempt to draw from outside of graphic: "+xoff+":"+yoff+" "+width+"x"+height+" "+this.width+"x"+this.height); return(false); } - if(xpos+width-1 > dk.cols || ypos+height-1 > dk.rows) { + if(xpos+width-1 > dk.console.cols || ypos+height-1 > dk.console.rows) { alert("Attempt to draw outside of screen: " + (xpos+width-1) + "x" + (ypos+height-1)); return(false); } for(y=0;y<height; y++) { - dk.gotoxy(xpos,ypos+y); + dk.console.gotoxy(xpos,ypos+y); for(x=0; x<width; x++) { // Do not draw to the bottom left corner of the screen-would scroll - if(xpos+x != dk.cols - || ypos+y != dk.rows) { - dk.attr=new Attribute(this.data[x+xoff][y+yoff].attr); - var ch=this.data[x+xoff][y+yoff].ch; + if(xpos+x != dk.console.cols + || ypos+y != dk.console.rows) { + dk.console.attr = this.data[x+xoff][y+yoff].attr; + ch=this.data[x+xoff][y+yoff].ch; if(ch == "\r" || ch == "\n" || !ch) ch=this.ch; - dk.print(ch); + dk.console.print(ch); } } }