Now I realized, that the picture in the DataSection is in Windows image format, which can't be handled by CatchImage() on Linux. I converted the picture to PNG format, and adapted the code accordingly. I also added the missing color constants for Linux. The new code (see below) still runs fine on Windows XP. On Ubuntu 8.04, the picture now is displayed. It is in one window, and the button is in another(!) window. When I move the mouse, the program freezes! Maybe someone can fix the code, to make this valuable demo program actually cross-platform?
Code: Select all
;****************************************************************
; Program: WindowedScreen + GUI Eventhandling Demo
; Author: netmaestro
; Date: March 22, 2007
; License: Free, unrestricted, credit appreciated
; but not required
;****************************************************************
; changed by LJ on 8.7.2008, trying to make it run on Linux
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
#Black = 0
#Gray = $808080
#Red = $FF
#White = $FFFFFF
#Yellow = $FFFF
CompilerEndIf
UsePNGImageDecoder()
Global img0 = CatchImage(#PB_Any, ?Picture, 1561)
If img0 = 0
Debug "CatchImage() failed."
End
EndIf
Global redArrow.l = GrabImage(img0, #PB_Any, 0,42,15,28)
StartDrawing(ImageOutput(img0))
Box(0,42,15,28,#Black)
StopDrawing()
#LeftOffset = 20
#TopOffset = 20
#ScreenW = 440
#ScreenH = 440
OpenWindow(0,0,0,800,480,"Screen Mouse Capture/Release Demo",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
CreateGadgetList(WindowID(0))
ButtonGadget(1,570,420,120,24,"Push Me!")
InitSprite(): InitMouse()
OpenWindowedScreen(WindowID(0),20,20,440,440,0,0,0)
CreateSprite(0,32,32)
StartDrawing(SpriteOutput(0))
DrawImage(ImageID(redArrow),0,0)
StopDrawing()
Procedure DoScreenDisplay(inscreen)
ClearScreen(0)
;
; Display your screen stuff
StartDrawing(ScreenOutput())
DrawImage(ImageID(img0),170,300)
DrawText(120,200,"Screen is not capturing mouse ",#Gray, #Black)
DrawText(180,230,"( 000, 000 )", #Gray, #Black)
StopDrawing()
;
If inscreen ; manage mouse events only if mouse is inside screen
WindowEvent()
ExamineMouse()
StartDrawing(ScreenOutput())
DrawText(120,200," Screen is capturing mouse ",#Yellow, #Black)
DrawText(180,230,"( "+RSet(Str(MouseX()),3,"0")+", "+RSet(Str(MouseY()),3,"0")+" )",#White,#Black)
If MouseButton(#PB_MouseButton_Left)
FillArea(186,316,0,#Red)
EndIf
If MouseButton(#PB_MouseButton_Middle)
FillArea(202,311,0,#Red)
EndIf
If MouseButton(#PB_MouseButton_Right)
FillArea(216,306,0,#Red)
EndIf
StopDrawing()
DisplayTransparentSprite(0,MouseX(),MouseY())
EndIf
FlipBuffers()
EndProcedure
Repeat
ev = WaitWindowEvent()
If inscreen
If MouseX()>#ScreenW-2 Or MouseY()>#ScreenH-2 Or MouseX()<1 Or MouseY()<1
ReleaseMouse(1)
inscreen = #False
EndIf
Else
;
;************************************
; Handle #PB_Event_Gadget Here
;************************************
;
If ev = #PB_Event_Gadget
If EventGadget() = 1
MessageRequester("","You pressed the button!")
EndIf
EndIf
;
mx = WindowMouseX(0):my = WindowMouseY(0)
If mx < #ScreenW+#LeftOffset And mx > #LeftOffset And my > #TopOffset And my < #TopOffset+#ScreenH
ReleaseMouse(0)
MouseLocate(mx-#LeftOffset,my-#TopOffset)
inscreen = #True
EndIf
EndIf
DoScreenDisplay(inscreen)
Until ev = #PB_Event_CloseWindow
DataSection
Picture:
Data.b $89,$50,$4E,$47,$0D,$0A,$1A,$0A,$00,$00,$00,$0D,$49,$48,$44,$52,$00,$00,$00,$64
Data.b $00,$00,$00,$44,$08,$02,$00,$00,$00,$F8,$2C,$07,$35,$00,$00,$05,$E0,$49,$44,$41
Data.b $54,$78,$DA,$ED,$9C,$BF,$71,$E3,$3C,$10,$C5,$35,$E3,$C4,$89,$53,$37,$E0,$0E,$DC
Data.b $83,$FA,$70,$29,$8E,$5D,$86,$9B,$70,$09,$EE,$C0,$15,$28,$74,$70,$89,$E6,$02,$07
Data.b $B8,$DF,$E8,$9D,$F7,$96,$20,$05,$82,$20,$48,$90,$9E,$DB,$E0,$1B,$9F,$3E,$52,$5C
Data.b $3E,$BC,$FD,$8B,$85,$0E,$87,$A6,$F2,$F8,$F8,$F8,$7C,$91,$87,$87,$87,$C3,$7F,$19
Data.b $94,$9B,$9B,$9B,$E3,$F1,$F8,$F6,$F6,$76,$3E,$9F,$BF,$2E,$C2,$1F,$AF,$AF,$AF,$7C
Data.b $B8,$69,$BD,$6F,$2F,$B2,$1A,$46,$30,$E8,$E9,$E9,$E9,$FD,$FD,$3D,$5C,$91,$D3,$E9
Data.b $F4,$F2,$F2,$B2,$51,$D4,$50,$0B,$ED,$EF,$EF,$EF,$57,$78,$56,$02,$A3,$41,$D4,$36
Data.b $C7,$35,$B4,$61,$25,$F1,$1A,$B8,$0F,$56,$7E,$B9,$07,$7D,$7C,$7C,$60,$6E,$61,$BA
Data.b $70,$23,$1A,$A2,$5E,$7B,$B0,$50,$E2,$E5,$5B,$A0,$58,$45,$47,$CB,$32,$40,$8D,$F3
Data.b $45,$22,$D4,$0A,$20,$E3,$4B,$F0,$71,$68,$D8,$98,$6B,$D8,$20,$4A,$08,$2F,$28,$36
Data.b $1F,$32,$BE,$E7,$F3,$F3,$73,$D0,$B2,$EC,$1A,$DE,$BC,$8C,$68,$FA,$1E,$F4,$6C,$1C
Data.b $9E,$D0,$20,$82,$6C,$AA,$61,$2A,$C0,$A5,$5F,$15,$8C,$3C,$AC,$A3,$D7,$F7,$29,$06
Data.b $61,$DB,$9B,$24,$14,$33,$C8,$94,$FE,$3C,$5D,$84,$0F,$B1,$D6,$44,$10,$E0,$FA,$49
Data.b $CE,$3B,$82,$2C,$07,$35,$AE,$67,$25,$FC,$2D,$40,$06,$C5,$78,$6E,$4B,$96,$29,$BA
Data.b $9B,$23,$F3,$74,$EB,$AB,$C5,$0B,$84,$79,$12,$79,$34,$DE,$3F,$4D,$25,$74,$F0,$D7
Data.b $28,$4D,$03,$B2,$96,$11,$40,$90,$19,$CB,$F8,$6F,$FF,$9A,$62,$A7,$13,$51,$46,$7F
Data.b $F0,$C2,$51,$92,$A1,$9C,$2B,$72,$85,$D7,$1E,$0A,$A6,$2D,$29,$86,$DC,$DD,$DD,$81
Data.b $9A,$16,$0D,$EC,$58,$61,$5E,$83,$77,$F0,$16,$31,$9F,$5C,$1E,$38,$E0,$28,$73,$85
Data.b $BA,$1D,$F5,$D0,$B3,$B1,$3B,$13,$F9,$C5,$79,$D3,$CC,$47,$37,$65,$09,$33,$C1,$02
Data.b $29,$CF,$0E,$79,$A5,$02,$C4,$E1,$E0,$6A,$65,$C9,$21,$F2,$A3,$5F,$DF,$32,$EA,$74
Data.b $B8,$78,$30,$69,$C8,$C9,$3C,$07,$1F,$5A,$8C,$FB,$AA,$5E,$2C,$7F,$55,$F5,$4A,$91
Data.b $9F,$CE,$0C,$8E,$11,$95,$60,$44,$59,$CA,$9A,$A0,$D8,$E2,$30,$59,$94,$29,$D0,$CF
Data.b $73,$24,$91,$79,$0E,$52,$29,$2C,$20,$E8,$B0,$54,$FF,$87,$75,$AE,$A2,$A2,$C7,$82
Data.b $E5,$35,$92,$42,$25,$1F,$1C,$C8,$E0,$A6,$26,$68,$65,$AE,$70,$91,$22,$A9,$C0,$A1
Data.b $26,$58,$E6,$33,$4F,$A5,$BB,$55,$CA,$9D,$32,$81,$BC,$04,$F7,$9A,$1D,$88,$25,$B4
Data.b $F4,$09,$94,$DC,$D9,$CA,$30,$79,$4D,$AA,$E1,$85,$BD,$54,$A4,$95,$1A,$52,$DE,$C0
Data.b $2B,$3A,$EF,$62,$AD,$D0,$A1,$4E,$94,$24,$9D,$AB,$62,$86,$51,$11,$27,$2A,$B5,$62
Data.b $D3,$A0,$D4,$CC,$F5,$CB,$58,$80,$1F,$F5,$A1,$DA,$BE,$64,$53,$30,$19,$C5,$60,$C6
Data.b $AC,$66,$27,$8C,$F0,$49,$B9,$5E,$38,$33,$5A,$79,$36,$29,$FC,$6D,$10,$A3,$BE,$CB
Data.b $2F,$EF,$A7,$FB,$2A,$2F,$4A,$32,$AF,$F5,$F3,$22,$A4,$2A,$06,$D3,$D5,$5C,$7E,$21
Data.b $5E,$F0,$A8,$4F,$87,$88,$6B,$7D,$F3,$B4,$FC,$A0,$AC,$D0,$D9,$2B,$5E,$64,$BA,$D6
Data.b $57,$E8,$A3,$E6,$33,$00,$5F,$36,$0B,$4D,$E5,$FD,$3B,$15,$18,$50,$92,$B5,$82,$97
Data.b $9A,$7C,$6A,$7E,$FA,$46,$82,$ED,$86,$46,$66,$2B,$10,$77,$67,$80,$FD,$E8,$54,$92
Data.b $52,$28,$D5,$36,$C8,$06,$2B,$EA,$A8,$8F,$BE,$5F,$1B,$9C,$8B,$17,$06,$FC,$DC,$13
Data.b $10,$81,$47,$11,$22,$BE,$51,$D7,$3C,$E1,$AC,$22,$D8,$CD,$34,$7B,$24,$FB,$50,$43
Data.b $79,$50,$FA,$4D,$4B,$20,$E3,$7A,$CA,$88,$5D,$BB,$AD,$72,$7E,$69,$C3,$E2,$F9,$BA
Data.b $44,$EE,$CC,$3A,$21,$DC,$38,$BF,$5F,$BA,$33,$BC,$6C,$4F,$3F,$2D,$1E,$32,$B5,$CF
Data.b $35,$3C,$F4,$03,$28,$C6,$EB,$E4,$DA,$A3,$C5,$C4,$1C,$F1,$29,$BE,$76,$F7,$B8,$BD
Data.b $62,$4D,$DE,$90,$5F,$59,$5D,$C3,$41,$1F,$9F,$90,$A8,$F5,$AE,$CA,$1E,$93,$DC,$7B
Data.b $88,$84,$07,$59,$78,$8D,$BA,$AD,$04,$C5,$94,$D0,$6A,$32,$67,$EF,$51,$92,$B4,$69
Data.b $3C,$BF,$9F,$64,$89,$3E,$56,$FA,$D4,$1F,$B8,$89,$92,$2B,$34,$8E,$DB,$F7,$73,$6C
Data.b $53,$3A,$5F,$B4,$11,$EB,$D9,$24,$17,$B6,$6B,$97,$8F,$33,$C9,$2A,$1E,$C9,$B9,$34
Data.b $23,$5B,$6C,$92,$B6,$5F,$00,$8E,$3F,$9C,$5C,$B6,$89,$5F,$E0,$C2,$BC,$49,$62,$F9
Data.b $72,$F9,$3B,$4D,$23,$A2,$6D,$84,$AC,$19,$C1,$A9,$56,$19,$45,$49,$4D,$2F,$ED,$31
Data.b $44,$E6,$5A,$62,$34,$DA,$EC,$CB,$EC,$1C,$F1,$9B,$86,$72,$F9,$80,$BE,$C7,$16,$45
Data.b $E1,$CE,$63,$41,$A0,$34,$74,$B4,$A5,$CE,$37,$EC,$0E,$AF,$F2,$6D,$DA,$02,$C7,$EF
Data.b $43,$24,$E6,$C9,$ED,$FB,$4A,$29,$E6,$EE,$69,$6B,$AC,$32,$1F,$2F,$DF,$E3,$E7,$6F
Data.b $6E,$DF,$51,$4A,$51,$61,$00,$60,$2A,$C5,$3C,$5E,$6A,$7E,$57,$9C,$85,$5B,$03,$AC
Data.b $50,$63,$40,$30,$DF,$F1,$5B,$88,$D4,$FE,$B0,$C6,$E5,$B7,$1F,$0D,$FF,$EE,$FB,$87
Data.b $1A,$78,$4D,$CA,$F8,$FD,$6C,$B2,$52,$B0,$5A,$D3,$3B,$0B,$C9,$BF,$39,$84,$50,$0F
Data.b $2F,$3F,$4F,$3F,$8A,$97,$25,$5C,$C2,$6B,$B3,$5D,$9D,$4E,$2F,$30,$54,$C5,$CB,$AC
Data.b $32,$B3,$7D,$68,$CD,$6F,$CD,$DC,$6F,$6D,$1F,$5B,$C7,$60,$FE,$4D,$A8,$86,$05,$F0
Data.b $3A,$7C,$1F,$BC,$1C,$85,$CC,$A7,$60,$5B,$2B,$21,$35,$82,$DF,$99,$B5,$0C,$8B,$E1
Data.b $A5,$A2,$72,$14,$32,$9F,$82,$09,$AF,$2D,$34,$F2,$B1,$3E,$C5,$A2,$CE,$AC,$78,$58
Data.b $12,$AF,$CC,$3A,$DC,$27,$10,$4A,$F1,$DB,$96,$90,$3A,$B7,$A7,$12,$BA,$D3,$2C,$0D
Data.b $CB,$E3,$65,$8E,$3F,$B3,$AB,$A3,$C3,$AC,$AD,$90,$62,$E5,$D0,$87,$D5,$02,$32,$FE
Data.b $E8,$94,$D0,$61,$15,$BC,$BC,$55,$E6,$74,$75,$F8,$27,$78,$AD,$DC,$95,$D6,$88,$99
Data.b $38,$25,$A4,$90,$CE,$18,$57,$58,$11,$2F,$3B,$26,$7D,$CD,$2A,$2D,$41,$55,$C9,$CD
Data.b $AA,$AE,$53,$42,$EA,$71,$3A,$BF,$2D,$EB,$93,$3E,$71,$95,$13,$D6,$C5,$4B,$AD,$9E
Data.b $84,$E3,$F7,$23,$3A,$2A,$89,$96,$4E,$F1,$75,$E2,$87,$47,$EB,$D7,$00,$78,$9C,$75
Data.b $C9,$63,$D5,$43,$0B,$BC,$FC,$59,$BD,$74,$8A,$8F,$6D,$AA,$EF,$58,$DD,$24,$15,$EF
Data.b $94,$DF,$C9,$03,$C8,$AF,$4B,$01,$3E,$1C,$38,$00,$14,$DA,$E1,$15,$0D,$ED,$24,$BA
Data.b $86,$F2,$1D,$B5,$BC,$98,$A8,$A4,$D5,$D2,$53,$0C,$26,$E3,$D4,$F0,$51,$A9,$95,$D1
Data.b $99,$94,$5B,$F8,$A1,$79,$DE,$47,$53,$B3,$2A,$0F,$A6,$B6,$0F,$75,$B8,$43,$BB,$99
Data.b $DA,$33,$D7,$37,$D8,$E7,$26,$A9,$6E,$4C,$04,$D0,$FA,$60,$C9,$8B,$C9,$D6,$FA,$90
Data.b $F9,$01,$31,$B3,$14,$F1,$E2,$78,$11,$DD,$F5,$36,$24,$BA,$D2,$4E,$2E,$DB,$95,$F2
Data.b $4D,$AC,$84,$B9,$27,$93,$91,$2D,$E8,$08,$9D,$26,$60,$F9,$1E,$FF,$35,$AF,$6F,$07
Data.b $1E,$25,$C6,$08,$3B,$C2,$7D,$DB,$95,$C7,$8B,$08,$20,$20,$96,$13,$D4,$69,$86,$88
Data.b $4A,$23,$A6,$D7,$07,$EB,$B0,$01,$B0,$FC,$36,$D2,$35,$C7,$6F,$23,$AF,$D1,$29,$C8
Data.b $B3,$13,$70,$14,$77,$BC,$0D,$72,$E3,$20,$46,$F6,$1B,$20,$59,$CA,$FD,$1A,$E3,$5A
Data.b $2B,$8A,$A5,$3B,$3C,$70,$4D,$B6,$06,$6B,$4E,$5D,$E1,$93,$F7,$8B,$F0,$7F,$55,$09
Data.b $27,$BE,$0A,$98,$66,$1D,$7B,$6D,$0E,$56,$66,$C6,$3F,$53,$58,$8F,$0A,$A7,$83,$37
Data.b $02,$96,$6F,$F5,$14,$8C,$10,$2C,$0E,$93,$C9,$EF,$2D,$E1,$65,$45,$52,$19,$6A,$F6
Data.b $1B,$28,$60,$44,$1C,$A8,$FF,$FB,$44,$9B,$22,$97,$37,$CC,$C1,$29,$82,$C1,$DF,$EB
Data.b $B0,$18,$B7,$14,$46,$89,$28,$B9,$35,$C1,$8E,$1E,$BE,$E5,$D8,$15,$7D,$58,$1D,$A0
Data.b $3F,$EC,$A4,$57,$7A,$D1,$8B,$7E,$02,$00,$00,$00,$00,$49,$45,$4E,$44,$AE,$42,$60
Data.b $82
EndDataSection