1#------------------------------------------------------------------------------- 2# canvas.Image 3#------------------------------------------------------------------------------- 4# Class for an image element on a canvas 5# 6var Image = { 7 new: func(ghost) { 8 var obj = { 9 parents: [Image, Element.new(ghost)], 10 }; 11 return obj; 12 }, 13 14 # Set image file to be used 15 # 16 # @param file Path to file or canvas (Use canvas://... for canvas, eg. 17 # canvas://by-index/texture[0]) 18 setFile: func(file) { 19 me.set("src", file); 20 }, 21 22 # Set rectangular region of source image to be used 23 # 24 # @param left Rectangle minimum x coordinate 25 # @param top Rectangle minimum y coordinate 26 # @param right Rectangle maximum x coordinate 27 # @param bottom Rectangle maximum y coordinate 28 # @param normalized Whether to use normalized ([0,1]) or image 29 # ([0, image_width]/[0, image_height]) coordinates 30 setSourceRect: func { 31 # Work with both positional arguments and named arguments. 32 # Support first argument being a vector instead of four separate ones. 33 if (size(arg) == 1) { 34 arg = arg[0]; 35 } 36 elsif (size(arg) and size(arg) < 4 and isvec(arg[0])) { 37 arg = arg[0]~arg[1:]; 38 } 39 if (!contains(caller(0)[0], "normalized")) { 40 if (size(arg) > 4) 41 var normalized = arg[4]; 42 else var normalized = 1; 43 } 44 if (size(arg) >= 3) 45 var (left,top,right,bottom) = arg; 46 47 me._node.getNode("source", 1).setValues({ 48 left: left, 49 top: top, 50 right: right, 51 bottom: bottom, 52 normalized: normalized 53 }); 54 return me; 55 }, 56 57 # Set size of image element 58 # 59 # @param width 60 # @param height 61 # - or - 62 # @param size ([width, height]) 63 setSize: func { 64 me._node.setValues({size: _arg2valarray(arg)}); 65 return me; 66 } 67}; 68 69