64 lines
1.5 KiB
Text
64 lines
1.5 KiB
Text
-- demo\rosetta\ImageNoise.exw
|
|
include pGUI.e
|
|
|
|
Ihandle dlg, canvas, timer
|
|
cdCanvas cddbuffer, cdcanvas
|
|
|
|
constant TITLE = "Image noise"
|
|
|
|
integer fps = 129 -- (typical value)
|
|
|
|
function redraw_cb(Ihandle /*ih*/, integer /*posx*/, integer /*posy*/)
|
|
integer {w, h} = IupGetIntInt(canvas, "DRAWSIZE")
|
|
cdCanvasActivate(cddbuffer)
|
|
sequence bw = repeat(0,w*h)
|
|
for x=0 to w-1 do
|
|
for y=0 to h-1 do
|
|
if rand(2)=2 then bw[x*h+y+1] = 255 end if
|
|
end for
|
|
end for
|
|
cdCanvasPutImageRectRGB(cddbuffer, w, h, {bw,bw,bw})
|
|
cdCanvasFlush(cddbuffer)
|
|
fps += 1
|
|
return IUP_DEFAULT
|
|
end function
|
|
|
|
atom t1 = time()
|
|
|
|
function timer_cb(Ihandle /*ih*/)
|
|
if time()>t1 then
|
|
IupSetStrAttribute(dlg, "TITLE", "%s [%g FPS])",{TITLE,fps})
|
|
fps = 0
|
|
t1 = time()+1
|
|
end if
|
|
IupUpdate(canvas)
|
|
return IUP_IGNORE
|
|
end function
|
|
|
|
function map_cb(Ihandle ih)
|
|
cdcanvas = cdCreateCanvas(CD_IUP, ih)
|
|
cddbuffer = cdCreateCanvas(CD_DBUFFER, cdcanvas)
|
|
return IUP_DEFAULT
|
|
end function
|
|
|
|
procedure main()
|
|
IupOpen()
|
|
|
|
canvas = IupCanvas(NULL)
|
|
IupSetAttribute(canvas, "RASTERSIZE", "320x240")
|
|
IupSetCallback(canvas, "MAP_CB", Icallback("map_cb"))
|
|
IupSetCallback(canvas, "ACTION", Icallback("redraw_cb"))
|
|
|
|
timer = IupTimer(Icallback("timer_cb"), 10)
|
|
|
|
dlg = IupDialog(canvas)
|
|
IupSetAttribute(dlg, "TITLE", TITLE)
|
|
IupCloseOnEscape(dlg)
|
|
|
|
IupShow(dlg)
|
|
IupSetAttribute(canvas, "RASTERSIZE", NULL)
|
|
IupMainLoop()
|
|
IupClose()
|
|
end procedure
|
|
|
|
main()
|