diff --git a/exec/load/frame.js b/exec/load/frame.js index 58e191aba10d4d51cad7c9028c6a43c14d46b5d4..f4e191b08052750ed9b5cb3938c9e9c4293ae3d8 100644 --- a/exec/load/frame.js +++ b/exec/load/frame.js @@ -19,7 +19,7 @@ DESCRIPTION: width: the horizontal width of the frame height: the vertical height of the frame attr: the default color attributes of the frame - frame: a frame object representing the parent of the new frame + parent: a frame object representing the parent of the new frame METHODS: @@ -71,9 +71,6 @@ PROPERTIES: USAGE: //create a new frame object at screen position 1,1. 80 characters wide by 24 tall - var frame = load("frame.js",1,1,80,24,BG_BLUE); - - //or it can be done this way..... load("frame.js"); var frame = new Frame(1,1,80,24,BG_BLUE); @@ -109,7 +106,7 @@ USAGE: load("sbbsdefs.js"); -function Frame(x,y,width,height,attr,frame) { +function Frame(x,y,width,height,attr,parent) { /* private properties */ var properties = { @@ -128,7 +125,8 @@ function Frame(x,y,width,height,attr,frame) { h_scroll:false, scrollbars:false, lf_strict:true, - checkbounds:true + checkbounds:true, + transparent:false } var relations = { parent:undefined, @@ -243,7 +241,15 @@ function Frame(x,y,width,height,attr,frame) { else throw("non-boolean checkbounds: " + bool); }); - this.__defineGetter__("lf_strict", function() { + this.__defineGetter__("transparent", function() { + return settings.transparent; + }); + this.__defineSetter__("transparent", function(bool) { + if(typeof bool == "boolean") + settings.transparent=bool; + else + throw("non-boolean transparent: " + bool); + }); this.__defineGetter__("lf_strict", function() { return settings.lf_strict; }); this.__defineSetter__("lf_strict", function(bool) { @@ -957,13 +963,13 @@ function Frame(x,y,width,height,attr,frame) { } this.setData(position.cursor.x,position.cursor.y,ch,attr,true); } - function init(x,y,width,height,attr,frame) { - if(frame instanceof Frame) { - properties.id = frame.display.nextID; - properties.display = frame.display; - settings.checkbounds = frame.checkbounds; - relations.parent = frame; - frame.child = this; + function init(x,y,width,height,attr,parent) { + if(parent instanceof Frame) { + properties.id = parent.display.nextID; + properties.display = parent.display; + settings.checkbounds = parent.checkbounds; + relations.parent = parent; + parent.child = this; } else { properties.display = new Display(x,y,width,height); @@ -998,11 +1004,15 @@ function Canvas(frame,display) { return this.frame.y - this.display.y; }); this.hasData = function(x,y) { - if(x-this.xoff < 0 || y - this.yoff < 0) + var xpos = x-this.xoff; + var ypos = y-this.yoff; + + if(xpos < 0 || ypos < 0) + return undefined; + if(xpos >= this.frame.width || ypos >= this.frame.height) return undefined; - if(x-this.xoff >= this.frame.width || y - this.yoff >= this.frame.height) + if(this.frame.transparent && this.frame.getData(xpos,ypos).ch == undefined) return undefined; - //ToDo check for undefined (in case of transparency) return true; } } @@ -1233,11 +1243,7 @@ function Display(x,y,width,height) { if(xpos == console.screen_columns && ypos == console.screen_rows) console.cleartoeol(); else if(ch == undefined) { - //ToDo: transparency - // if(properties.transparent) - // console.right(1); - // else - console.write(" "); + console.write(" "); } else { console.write(ch);