what exactly tells a gadget to redraw? im guessing its the underlying os every so many millisecs. Does this generate an event?
Im trying to create a small processing window but the once the processing begins it doesnt have time to display the gadget.
sorry aboutthe tabs, theyre a lot smaller in my ide :P
Global win:TGadget=CreateWindow("SpriteForge 32bit PnG Maker",350,200,400,100,Desktop(),WINDOW_TITLEBAR)
Global pbar:TGadget=CreateProgBar(10,10,380,20,win)
Global pbar2:TGadget=CreateProgBar(10,35,380,20,win)
Global pblabel:TGadget=CreateLabel("Please Wait......",10,60,380,15,win)
Global inmapcolor:TPixmap
Global inmapalpha:TPixmap
Global imgwidth:Int
Global imgheight:Int
Function pngbuilder(indir$,outdir$)
ShowGadget win
if indir=""
Local filter$=AppDir$+"renderer/bmp_temp"
DebugLog filter
Local indir$=RequestDir( "Choose a location containing 'xxxxx.bmp' and 'xxxxx_TMSK.bmp' files",filter$ )
ChangeDir(AppDir$)
End If
if outdir=""
Local filter$=AppDir$
Local outdir$=RequestDir( "Choose a location to export files",filter$ )
ChangeDir(AppDir$)
End If
Local outputmap:TPixmap
outputmap=CreatePixmap(imgwidth,imgheight,PF_RGBA8888)
Local dir=ReadDir(indir)
Local processes=0
Local fnam$
Repeat
fnam$=NextFile(dir)
If Instr(Lower(fnam$),".bmp")<>0 processes=processes+2
Until fnam=""
CreateTimer(100)
if dir CloseDir dir
dir=ReadDir(indir)
Local page=0,evnt,proc
'MAINLOOP---------------------------------------------------------------------------------------------------------------------------------------------------------
Repeat
fnam$=NextFile(dir)
DebugLog indir+" "+fnam
if fnam="" Then
Notify "Sequence Complete, Pages="+page
if dir CloseDir dir
HideGadget win
Return
EndIf
If Instr(Lower(fnam$),".bmp")<>0 and Instr(Upper(fnam$),"_TMSK")=0
Select WaitEvent()
Case EVENT_GADGETACTION ' interacted with gadget
Case EVENT_WINDOWCLOSE ' close gadget
Notify "Sequence Complete, Pages="+page
if dir CloseDir dir
HideGadget win
Return
End Select
Local filename$=StripDir(fnam$)
DebugLog filename
filename=StripExt(filename$)
Local colorfile$=indir+"/"+filename+".bmp"
Local alphafile$=indir+"/"+filename+"_TMSK"+".bmp"
RedrawGadget(win)
Flip()
'if evnt=EVENT_WINDOWCLOSE Notify("Process terminated!",1)
SetGadgetText(pblabel,"Loading Colormap......")
proc=proc+1;UpdateProgBar(pbar,Float(proc)/Float(processes))
inmapcolor:TPixmap=LoadPixmap(colorfile$)
SetGadgetText(pblabel,"Loading Alphamap......")
proc=proc+1;UpdateProgBar(pbar,Float(proc)/Float(processes))
inmapalpha:TPixmap=LoadPixmap(alphafile$)
if not inmapcolor or not inmapalpha Then
SetGadgetText(pblabel,"Complete.")
if not inmapcolor if page=0 Notify "Error - missing input files from "+colorfile,1
HideGadget win
Return
End If ;
imgwidth:Int=PixmapWidth(inmapcolor)
imgheight:Int=PixmapHeight(inmapcolor)
if not inmapalpha
Notify "Warning - missing alpha mask, expecting "+alphafile+"~nProgram will simply covert 24bit colormap to png",1
inmapalpha:TPixmap=CreatePixmap(imgwidth,imgheight,PF_RGB888)
EndIf
Local imgwidthchk:Int=PixmapWidth(inmapalpha)
Local imgheightchk:Int=PixmapHeight(inmapalpha)
Local problem
if imgwidthchk<>imgwidth problem=1
if imgheightchk<>imgheight problem=1
if problem Notify "sizemissmatch for "+filename+".bmp and its mask",1; End
outputmap:TPixmap=CreatePixmap(imgwidth,imgheight,PF_RGBA8888)
SetGadgetText(pblabel,"Combining......")
For Local b=0 to imgheight-1
UpdateProgBar(pbar2,Float(b)/Float(imgheight-1))'/)
For Local a=0 to imgwidth-1
Local rgbacolor=ReadPixel(inmapcolor,a,b)
Local rgbaalpha=ReadPixel(inmapalpha,a,b)
Local Re=getRed(rgbacolor)
Local Gr=getGreen(rgbacolor)
Local Bl=getBlue(rgbacolor)
Local Al=255-getRed(rgbaalpha)
WritePixel (outputmap,a,b,getARGB(al,re,gr,bl))
Next
Next
Local pagestr$=page
If Len(pagestr)=1 Then pagestr="000"+pagestr
If Len(pagestr)=2 Then pagestr="00"+pagestr
If Len(pagestr)=3 Then pagestr="0"+pagestr
SetGadgetText(pblabel,"Saving "+outdir+"/"+filename+page+".png.....")
SavePixmapPNG(outputmap, outdir+"/"+filename+page+".png")
page=page+1
EndIf
Forever
End Function
|