diff --git a/Nasal/canvas/api.nas b/Nasal/canvas/api.nas index 2087254c6..df38fdcba 100644 --- a/Nasal/canvas/api.nas +++ b/Nasal/canvas/api.nas @@ -711,14 +711,41 @@ var Image = { var m = { parents: [Image, Element.new(parent, "image", id, arg)] }; - m.color = _createColorNodes(m._node, "color"); - m.sourceRect = m._node.getNode("source", 1); + m.color_fill = _createColorNodes(m._node, "color-fill"); return m; }, - + # Set image file to be used + # + # @param file Path to file or canvas (Use canvas://... for canvas, eg. + # canvas://by-index/texture[0]) setFile: func(file) { - me.set("file", file); + me.set("file", file); + }, + # Set rectangular region of source image to be used + # + # @param left Rectangle minimum x coordinate + # @param top Rectangle minimum y coordinate + # @param right Rectangle maximum x coordinate + # @param bottom Rectangle maximum y coordinate + # @param normalized Whether to use normalized ([0,1]) or image + # ([0, image_width]/[0, image_height]) coordinates + setSourceRect: func(left, top, right, bottom, normalized = 1) + { + me._node.getNode("source", 1).setValues({ + left: left, + top: top, + right: right, + bottom: bottom, + normalized: normalized + }); + return me; + }, + # Set size of image element + setSize: func(width, height) + { + me._node.setValues({size: [width, height]}); + return me; } }; @@ -779,11 +806,7 @@ var new = func(vals) { var m = { parents: [Canvas] }; - m.texture = _createNodeWithIndex - ( - props.globals.getNode("canvas", 1), - "texture" - ); + m.texture = _createNodeWithIndex(Canvas.property_root, "texture"); m.color = _createColorNodes(m.texture, "color-background"); m.texture.setValues(vals); @@ -802,11 +825,7 @@ var get = func(name) node_canvas = name; else if( typeof(name) == 'scalar' ) { - var canvas_root = props.globals.getNode("canvas"); - if( canvas_root == nil ) - return nil; - - foreach(var c; canvas_root.getChildren("texture")) + foreach(var c; Canvas.property_root.getChildren("texture")) { if( c.getValue("name") == name ) node_canvas = c; @@ -847,4 +866,7 @@ else {button: {legend: "Ok", binding: {command: "dialog-close"}}} ); } -} })(); +} + +Canvas.property_root = props.globals.getNode("canvas/by-index", 1); +})();