reset() var name = "Paint" var width = 1024 var height = 768 var font_size = 20 size(width, height) resizable(false) title(name) closing("Are you sure you want to quit this application?", "Please confirm") var g = component("grid", "") var d = component("draw", "" + width + "," + height) config(d, "background", "white") var gn = component("grid", "") var bf = component("button", "Foreground") var bb = component("button", "Background") var pf = component("panel", "") var pb = component("panel", "") var lx = component("label", "Pixel (+/-)") var xr = component("text", "0") var xg = component("text", "0") var xb = component("text", "0") var bx = component("button", "Set") var br = component("button", "Open") var bw = component("button", "Save (.png)") var pp = component("panel", "") var po = component("label", " ") grid_add(gn, bf, 0, 0, 1, 1, 0, 0, 0, 1, 4, 4, 4, 4) grid_add(gn, pf, 1, 0, 1, 1, 0.1, 0, 3, 1, 4, 4, 4, 4) grid_add(gn, bb, 2, 0, 1, 1, 0, 0, 0, 1, 4, 4, 4, 4) grid_add(gn, pb, 3, 0, 1, 1, 0.1, 0, 3, 1, 4, 4, 4, 4) grid_add(gn, lx, 4, 0, 1, 1, 0.1, 0, 3, 1, 4, 4, 4, 4) grid_add(gn, xr, 5, 0, 1, 1, 0.1, 0, 3, 1, 4, 4, 4, 4) grid_add(gn, xg, 6, 0, 1, 1, 0.1, 0, 3, 1, 4, 4, 4, 4) grid_add(gn, xb, 7, 0, 1, 1, 0.1, 0, 3, 1, 4, 4, 4, 4) grid_add(gn, bx, 8, 0, 1, 1, 0, 0, 3, 1, 4, 4, 4, 4) grid_add(gn, br, 9, 0, 1, 1, 0.2, 1, 3, 1, 4, 4, 4, 4) grid_add(gn, bw, 10, 0, 1, 1, 0.2, 0, 1, 1, 4, 4, 4, 4) grid_add(gn, pp, 11, 0, 1, 1, 1, 0, 3, 1, 4, 4, 4, 4) var gd = component("grid", "") config(gd, "border", "Draw") var rl = component("radio", "Line") var rt = component("radio", "Text") config(rl, "active", true) var rr = component("radio", "Rectangle") var ro = component("radio", "Oval") radio_group([rl, rt, rr, ro]) config(pf, "background", "black") config(pb, "background", "white") var cf = component("checkbox", "Fill") config(cf, "active", true) var cl = component("label", "Width") var cw = component("combobox", "1,2,3,4,5,6,7,8") var gt = component("grid", "") config(gt, "border", "Text") var co = component("combobox", join(",", fonts())) var ts = component("text", "" + font_size) var tt = component("text", "") grid_add(gd, rl, 0, 0, 1, 1, 0, 0, 0, 1, 4, 4, 4, 4) grid_add(gd, rt, 1, 0, 1, 1, 0, 0, 0, 1, 4, 4, 4, 4) grid_add(gd, rr, 2, 0, 1, 1, 0, 0, 0, 1, 4, 4, 4, 4) grid_add(gd, ro, 3, 0, 1, 1, 0, 0, 0, 1, 4, 4, 4, 4) grid_add(gd, cf, 4, 0, 1, 1, 0, 0, 0, 1, 4, 4, 4, 4) grid_add(gd, cl, 5, 0, 1, 1, 0, 0, 0, 1, 4, 4, 4, 4) grid_add(gd, cw, 6, 0, 1, 1, 1, 0, 0, 1, 4, 4, 4, 4) grid_add(gt, co, 0, 0, 1, 1, 0, 0, 0, 1, 4, 4, 4, 4) grid_add(gt, ts, 1, 0, 1, 1, 0, 0, 0, 1, 4, 4, 4, 4) grid_add(gt, tt, 2, 0, 1, 1, 1, 0, 3, 1, 4, 4, 4, 4) grid_add(g, gn, 0, 0, 2, 1, 0, 0, 1, 1, 4, 4, 4, 4) grid_add(g, d, 0, 1, 2, 1, 1, 1, 3, 0, 4, 4, 4, 4) grid_add(g, gd, 0, 2, 1, 1, 1, 0, 3, 1, 4, 4, 4, 4) grid_add(g, gt, 1, 2, 1, 1, 1, 0, 3, 1, 4, 4, 4, 4) add(g) add_s(po) var x = [null, null, null, null] event(bf, fn() { var r = color_chooser() if (r != null) { config(d, "foreground", r) config(pf, "background", r) } }) event(bb, fn() { var r = color_chooser() if (r != null) { config(d, "background", r) config(pb, "background", r) } }) event_mouse(d, fn(a) { config(po, "text", a[1] + ", " + a[2]) if (a[0] == "PRESSED") { set(x, 0, a[1]) set(x, 1, a[2]) } if (a[0] == "RELEASED") { set(x, 2, a[1]) set(x, 3, a[2]) draw_width(d, number(get(cw, "text"))) var f = get(cf, "active") var m = get(rl, "active") if (m == true) { draw_line(d, x[0], x[1], x[2], x[3]) } var m = get(rt, "active") if (m == true) { var s = trim(get(tt, "contents")) var fa = get(co, "text") var fs = number(trim(get(ts, "contents")), font_size) config(ts, "contents", fs) if (len(s) > 0) { config(d, "font", [fa, 0, fs]) draw_string(d, s, x[0], x[1]) } } var m = get(rr, "active") if (m == true) { if (f == true) { fill_rect(d, x[0], x[1], x[2]-x[0], x[3]-x[1]) } else { draw_rect(d, x[0], x[1], x[2]-x[0], x[3]-x[1]) } } var m = get(ro, "active") if (m == true) { if (f == true) { fill_oval(d, x[0], x[1], x[2]-x[0], x[3]-x[1]) } else { draw_oval(d, x[0], x[1], x[2]-x[0], x[3]-x[1]) } } } }) event(bx, fn() { var r = number(trim(get(xr, "contents")), 0) var g = number(trim(get(xg, "contents")), 0) var b = number(trim(get(xb, "contents")), 0) each(range(0, width), fn(e, i) { each(range(0, height), fn(ee, ii) { var p = draw_get_pixel(d, e, ee) if (p != null) { var q = [p[0] + r, p[1] + g, p[2] + b] draw_set_pixel(d, e, ee, q) } }) }) }) event(br, fn() { var f = open() if (!empty(f)) { draw_read(d, f) title(name + ": " + f) } }) event(bw, fn() { var action_save = false var f = save() if (!empty(f)) { if (stat(f)["exists"] == true) { var res = confirm("File already exists. Overwrite?", "Please confirm") if (res == "OK") { var action_save = true } } else { var action_save = true } if (action_save == true) { if (draw_write_png(d, f) == true) { title(name + ": " + f) message("File saved") } } } }) show()