(phixonline)--> -- -- demo\rosetta\Greyscale_bars.exw -- =============================== -- with javascript_semantics include pGUI.e Ihandle dlg, canvas cdCanvas cddbuffer, cdcanvas integer quit = 1 bool refire = false function redraw_cb(Ihandle /*ih*/, integer /*posx*/, /*posy*/) cdCanvasActivate(cddbuffer) integer {width, height} = IupGetIntInt(canvas, "DRAWSIZE") integer h = floor(height/4) height -= 1 for row=1 to 4 do integer x = 0, p2 = power(2,row+2), c = floor(255/(p2-1)) for n=0 to p2-1 do integer colour = c*n*#010101 if and_bits(row,1)=0 then colour = xor_bits(colour,#FFFFFF) end if cdCanvasSetForeground(cddbuffer, colour) integer nx = ceil(width*(n+1)/p2) cdCanvasBox(cddbuffer, x, nx-1, (4-row)*h, height) x = nx end for height = (4-row)*h-1 end for cdCanvasFlush(cddbuffer) return IUP_DEFAULT end function function map_cb(Ihandle ih) cdcanvas = cdCreateCanvas(CD_IUP, ih) cddbuffer = cdCreateCanvas(CD_DBUFFER, cdcanvas) return IUP_DEFAULT end function function unmap_cb(Ihandle /*ih*/) cdKillCanvas(cddbuffer) cdKillCanvas(cdcanvas) return IUP_DEFAULT end function procedure main() IupOpen() canvas = IupCanvas("RASTERSIZE=600x400") IupSetCallbacks(canvas, {"MAP_CB", Icallback("map_cb"), "UNMAP_CB", Icallback("unmap_cb"), "ACTION", Icallback("redraw_cb")}) dlg = IupDialog(canvas, `TITLE="Greyscale bars"`) IupShow(dlg) IupSetAttribute(canvas, "RASTERSIZE", NULL) if platform()!=JS then IupMainLoop() IupClose() end if end procedure main()