I had the need for a basic buttongadget, but that could include a icon, a text (and multiline if needed) and be multiplatform.
So I made one.
Code: Select all
;init
Enumeration
#constant_1
#constant_2
EndEnumeration
Enumeration
#font
EndEnumeration
LoadFont(#font,"Arial",12)
UsePNGImageDecoder()
;procedures
Procedure WrapText(x,y,text.s,width,color)
If TextWidth(text)<=width
Debug "TEXTWRAP:"+text+Str(x)+","+Str(y)
DrawText((width/2)-(TextWidth(text.s)/2),y,text.s,RGBA($4F,$8C,$A3,255))
Else
limit=0 : Repeat : limit+1 : Until TextWidth(Left(text,limit))>width : cut=limit
Repeat : cut-1 : Until Mid(text,cut,1)=" " Or Mid(text,cut,1)="-" Or cut=0
If cut=0 : cut=limit-1 : EndIf
DrawText((width/2)-(TextWidth(Left(text,cut))/2),y,Left(text,cut),RGBA($4F,$8C,$A3,255))
wraptext(x,y+16,Right(text,Len(text)-cut),width,color)
EndIf
EndProcedure
Procedure.l createicon(icon.l,text.s, width=240,height=40,wrap.b=0)
iconcount.l+1
image.l=CreateImage(iconcount.l,width,height,32 | #PB_Image_Transparent)
If icon.l
image2.l=CatchImage(#constant_1,icon.l)
Else
image2.l=CreateImage(#constant_1,24,24)
EndIf
StartDrawing(ImageOutput(iconcount.l))
If icon.l
DrawAlphaImage(ImageID(#constant_1),10,(height/2)-(ImageHeight(#constant_1)/2),250) ;-(ImageHeight(ImageID(image2.l))/2),250)
Else
DrawingMode(#PB_2DDrawing_Default)
LineXY(1,1,width-1,1,RGB(128,128,196))
LineXY(1,1,1,height-1,RGB(128,128,196))
LineXY(width-1,1,width-1,height-1,RGB(128,128,196))
LineXY(1,height-1,width-1,height-1,RGB(128,128,196))
Box(0,0,width,height,RGB(128,128,128))
EndIf
DrawingMode(#PB_2DDrawing_AlphaChannel)
DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
If width<30
DrawingFont(FontID(#font))
EndIf
If wrap.b
wraptext(20,30,text.s,width,RGBA($4F,$8C,$A3,255))
Else
DrawText((width/2)-(TextWidth(text.s)/2),(height/2)-(TextHeight(text.s)/2),text.s,RGBA($4F,$8C,$A3,255))
EndIf
DrawingMode(#PB_2DDrawing_Default)
StopDrawing()
ProcedureReturn iconcount.l
EndProcedure
;main program
CatchImage(1,?icon)
OpenWindow(0,0,0,640,480,"Buttonimage test")
ButtonImageGadget(0,240,220,240,40,ImageID(createicon(?icon,"Print")))
;loop
While Not a=#PB_Event_CloseWindow
a=WaitWindowEvent()
Wend
;end
End
;data
DataSection
icon:
Data.q $0A1A0A0D474E5089,$524448490D000000,$1800000018000000,$3D77E00000000608,$47527301000000F8
Data.q $0000E91CCEAE0042,$FF0044474B620600,$93A7BDA0FF00FF00,$7359487009000000,$C21E0000C21E0000
Data.q $0000003E75D06E01,$02DB07454D497407,$18AD50F02D260001,$5441444947040000,$55936C5B969DC748
Data.q $BB6BAFDB5F7FC01C,$5969585A32AEB76F,$6DCB5BA01BB418C7,$1882444881B78099,$E307D189025183E3
Data.q $103068CF0C9F180B,$01A2204264912131,$640DD4040B701103,$B2D766C66192E45C,$AFD7EBAC3D6C1BAD
Data.q $E35B1B2C80687CFD,$FBF39FF879C9393F,$6B9172747491CFDF,$EA633F40C0FA3D1D,$835D69A56E920020
Data.q $5B7B40326939DD34,$591297451FD03EA7,$B96622B2D28D9325,$3E209644282960E7,$B1B4D8172DEFC232
Data.q $BAF7DF7FB009CA49,$9DB3217E6B0CBCAB,$4A69B2AC1EDD0A0E,$53B3A9EB4AA4D4EB,$A32350C1378F0C42
Data.q $F0AB298B75026963,$AD4CCF3980397B4D,$02D3E9AEE7F392BF,$A49B1B4DA5B9166A,$E948D291257E2733
Data.q $F70D0C7D73ECB4E4,$BCD96E660988D33D,$BCB35E9CFA763A5E,$001DCBC963255C81,$6C81387F724B1860
Data.q $6F69BA679004E6B5,$AA9CA52BEAEBD4EB,$4BD9F43FC9DF6008,$CDCB02A392013942,$0793948AFB5DAC0B
Data.q $216E64BE847C5A00,$5387B3DA7E65A74A,$70F84BFC6BD49D1F,$2060C500B4D27BDB,$D18A5AEA13767C9A
Data.q $1A4DB30F58E45DF0,$5925DAFE09FA7D9F,$D34027B7746FB5EF,$1770A18099E906BA,$A18C3E64F8DA79B1
Data.q $205952486DC4DEF7,$4F2F559E2E6AB0B3,$BBDDBE76FB75BB38,$4EB6F6839A786817,$43695F2E49EB7CFD
Data.q $7F1FEC1952A492D3,$75407B538BD03E85,$87CF85419F282C3E,$718B162D86D328A2,$53ADBDA02CD9F8E2
Data.q $40D86FD669D2EBFF,$BC5CDBEDCEE09122,$B6BEAF37709127F8,$398D1A306BD5C696,$5F95EB4FD03623E5
Data.q $D80B2648F1133490,$2837E6D6FE80E7BB,$ED704216538F17B5,$E2F8D1BF2DAD076A,$5D3D0169AE1C4A2A
Data.q $6314F403FBD33877,$14E3462724D9EDD3,$5544307D76EE4E15,$6CB426EF77AF9FB5,$83A5295136C99239
Data.q $1971D1B9C448F12C,$D1A31D897B0381F5,$7B74BB97D760F594,$D0B1178BB5001171,$8B1604216712781F
Data.q $28F9B0716EB7DB85,$1953544BE3FD2B73,$7B46483FD7D17488,$2246306861559E44,$DF20F5995C142091
Data.q $F04210DBEDD6CC5A,$AA883C1F34EB8DF7,$A5FA85E3CD5654AA,$08F0F897AF1E18C0,$E83F8891D146F6FF
Data.q $183156932617D627,$814AA4B18263A8CD,$3F5AA2C153C78C32,$E5B3A7480B2C4891,$A18252D0C10A28A8
Data.q $8FC5D5D7B82108A5,$20E5CB8A84210E47,$47A43F7EE448323E,$E6565002A6A4369F,$666A82DF06BF3424
Data.q $9691A216ACD8EC38,$F8BD78F0514D1A29,$8E11A34410840103,$126A68AAA6863D1C,$557C2A56797900C9
Data.q $D9B0CB3A710B7D78,$E21C3F0C281414AC,$0167E7B8E665CB5C,$07F1D7EB8DC33A5A,$0421058B1620E302
Data.q $F70969470BA74E00,$A66389CE7F60F5EE,$F92B150A72ACD71B,$261DD22264C9828A,$E7C766ADEBC2ED12
Data.q $71F350EEC371A43B,$C68BB76E0FFC37BD,$450210AC949E6BD5,$6817E773B0421051,$A26CB21B15F252C6
Data.q $FBB848D98B08A4B4,$C271B06091B2792E,$BAF3BF6F4424FD3B,$5267F87A3F71F8F4,$ABAF9E01350243EA
Data.q $466CD90C8E9ED347,$0ECEEE9519484D96,$4CBBE6F8D87967CA,$4F6700D71CA7AA36,$66CD88B95EAFD25F
Data.q $00EEFFEC158AD964,$75F53486CC06928F,$55FBFFCB60FFDE21,$1D1DEB8F9B87264C,$CAEFA729786CAC6D
Data.q $1E1BC99C220FF963,$4900000000B105DB,$00826042AE444E45
EndDataSection