Zuerst ein Dank an alle für eure Antworten.
Wenn ich das jetzt richtig verstanden habe, funktioniert
das Clipping in einem "realen" Linuxsystem, während es
bei einem Linux in einer VM nicht geht.
Wie bei mir in einem "realen" Windowssystem, führt ein
#PB_Canvas_ClipMouse bei einem Klick mit der linken
Maustaste auf das CanvasGadget zu einem Eingrenzen
des Bewegungsbereiches des Mousecursors auf die Canvas-
fläche und das Setzen von #PB_Canvas_Clip auf #True
nach einem Klick mit der linken Maustaste zu der Ein-
grenzung, welche durch Setzen von #PB_Canvas_Clip auf
#False wieder aufgehoben wird.
Die Einstellungen in VMWare in den Preferences für den
Mousecursor führen auch zu keiner Veränderung des Ver-
haltens (und den Shortcut CTRL I gibt es auch nicht).
Folglich ist doch die VM Schuld und PB funktioniert hier
richtig. Deshalb eine letzte Frage: Funktioniert der folgende
Code in einem "realen" Linux? Wird also auch hier der Maus-
Cursor auf das Canvas beschränkt, während die linke Taste
gedrückt wird?
Der Code ist ein Extrakt aus einem unter Windows laufenden
Programm, das auch unter Linux laufen soll.
Code: Alles auswählen
Global ImgXSize.i
Global ImgYSize.i
Global WinX
Global WinY
Global XF.f
Global YF.f
Procedure LMBDLoop()
ResizeGadget(3, #PB_Ignore, #PB_Ignore,#PB_Ignore, WinY-180)
Repeat
Protected Event.i=WaitWindowEvent(20)
Protected EventType.i=EventType()
Protected EventGadget.i=EventGadget()
If Event=#PB_Event_Gadget And EventGadget=1
Protected cmx=GetGadgetAttribute(1,#PB_Canvas_MouseX)
Protected cmy=GetGadgetAttribute(1,#PB_Canvas_MouseY)
StatusBarText(1, 0,Right("0000"+Str(cmx*xf), 4)+" : "+Right("0000"+Str(cmy*yf),4),#PB_StatusBar_Center )
StatusBarText(1, 1, Right("000"+Str(cmx), 3)+" : "+Right("000"+Str(cmy),3))
Select cmx
;{
Case 0 To 17
Select cmy
Case 0 To 17
GrabImage(1, 4, 0, 0,360,360)
*hImg4=ResizeImage(4, 180,180)
StartDrawing(ImageOutput(3))
Box(0,0,180,180,0)
DrawImage(ImageID(4), 90-cmx*XF/2, 90-cmy*YF/2)
LineXY( 90, 0, 90, 180, $0000FF)
LineXY( 0, 90, 180, 90, $0000FF)
StopDrawing()
Case 18 To WinY-19
GrabImage(1, 4, 0, cmy*YF-180,360,360)
*hImg4=ResizeImage(4, 180,180)
StartDrawing(ImageOutput(3))
Box(0,0,180,180,0)
DrawImage(ImageID(4), 90-cmx*XF/2, 0)
LineXY( 90, 0, 90, 180, $0000FF)
LineXY( 0, 90, 180, 90, $0000FF)
StopDrawing()
Case WinY-18 To WinY
GrabImage(1, 4, 0, ImgYSize-1-360, 360,360)
*hImg4=ResizeImage(4, 180,180)
StartDrawing(ImageOutput(3))
Box(0,0,180,180,0)
DrawImage(ImageID(4), 90-cmx*XF/2, (ImgYSize-1-cmy*yf)/2-90)
LineXY( 90, 0, 90, 180, $0000FF)
LineXY( 0, 90, 180, 90, $0000FF)
StopDrawing()
EndSelect
;}
;{
Case 18 To WinX-19
Select cmy
Case 0 To 17
GrabImage(1,4, cmx*XF-180, 0, 360,360)
*hImg4=ResizeImage(4, 180,180)
StartDrawing(ImageOutput(3))
Box(0,0,180,180,0)
DrawImage(ImageID(4), 0, 90-cmy*YF/2)
LineXY( 90, 0, 90, 180, $0000FF)
LineXY( 0, 90, 180, 90, $0000FF)
StopDrawing()
Case 18 To WinY-19
GrabImage(1, 3, cmx*XF-180, cmy*YF-180,360,360)
*hImg3=ResizeImage(3, 180,180)
StartDrawing(ImageOutput(3))
LineXY( 90, 0, 90, 180, $0000FF)
LineXY( 0, 90, 180, 90, $0000FF)
StopDrawing()
Case WinY-18 To WinY
GrabImage(1,4, cmx*XF-180, ImgYSize-1-360, 360,360)
*hImg4=ResizeImage(4, 180,180)
StartDrawing(ImageOutput(3))
Box(0,0,180,180,0)
DrawImage(ImageID(4), 0, (ImgYSize-1-cmy*yf)/2-90)
LineXY( 90, 0, 90, 180, $0000FF)
LineXY( 0, 90, 180, 90, $0000FF)
StopDrawing()
EndSelect
;}
;{
Case WinX-18 To WinX
Select cmy
Case 0 To 17
GrabImage(1, 4, ImgXSize-1-360, 0,360,360)
*hImg4=ResizeImage(4, 180,180)
StartDrawing(ImageOutput(3))
Box(0,0,180,180,0)
DrawImage(ImageID(4),((ImgXSize-cmx*xf)/2)-90, 90-cmy*YF/2)
LineXY( 90, 0, 90, 180, $0000FF)
LineXY( 0, 90, 180, 90, $0000FF)
StopDrawing()
Case 18 To WinY-19
GrabImage(1, 4, ImgXSize-1-360, cmy*YF-180,360,360)
*hImg4=ResizeImage(4, 180,180)
StartDrawing(ImageOutput(3))
Box(0,0,180,180,0)
DrawImage(ImageID(4),((ImgXSize-cmx*xf)/2)-90, 0)
LineXY( 90, 0, 90, 180, $0000FF)
LineXY( 0, 90, 180, 90, $0000FF)
StopDrawing()
Case WinY-18 To WinY
GrabImage(1,4, ImgXSize-1-360, ImgYSize-1-360, 360,360)
*hImg4=ResizeImage(4, 180,180)
StartDrawing(ImageOutput(3))
Box(0,0,180,180,0)
DrawImage(ImageID(4), ((ImgXSize-1-cmx*xf)/2)-90, (ImgYSize-1-cmy*yf)/2-90)
LineXY( 90, 0, 90, 180, $0000FF)
LineXY( 0, 90, 180, 90, $0000FF)
StopDrawing()
;}
EndSelect
EndSelect
SetGadgetState(2, ImageID(3))
HideGadget(2,0)
EndIf
Until EventType=#PB_EventType_LeftButtonUp; Or Eventype=#PB_EventType_MouseLeave
ResizeGadget(3, #PB_Ignore, #PB_Ignore,#PB_Ignore, WinY)
HideGadget(2,1)
EndProcedure
*hImg1=CreateImage(1, 7500, 6492)
ImgXSize.i=ImageWidth(1)
ImgYSize.i=ImageHeight(1)
WinX=ImgXSize/10
WinY=ImgYSize/10
XF.f=1.0*ImgXSize/WinX
YF.f=1.0*ImgYSize/WinY
StartDrawing(ImageOutput(1))
Box(0,0,ImgXSize, ImgYSize, $0000FF)
Box(1,1,ImgXSize-2,ImgYSize-2, $00FFFF)
Box(180,180, ImgXSize-360,ImgYSize-360, $00FF00)
LineXY(0,0, ImgXSize-1, ImgYSize-1, $000000)
LineXY(ImgXSize-1,0, 0, ImgYSize-1, $000000)
StopDrawing()
CopyImage(1,2)
*hImg2=ResizeImage(2, WinX, WinY)
*hImg3=CreateImage(3, 180, 180)
OpenWindow(0, 0, 0, WinX+180, WinY+24, "Test", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
CreateStatusBar(1, WindowID( 0))
AddStatusBarField(180)
AddStatusBarField(64)
TreeGadget(0, 0,0, 180, WinY):HideGadget(0,1)
CanvasGadget(1,181,0,WinX, WinY, #PB_Canvas_ClipMouse)
SetGadgetAttribute(1, #PB_Canvas_Image, *hImg2)
ImageGadget(2, 0, WinY-180, 180,180,0)
TreeGadget(3, 0,0, 180, WinY)
Repeat
Define Event.i=WaitWindowEvent()
Define EventType.i=EventType()
Define EventGadget.i=EventGadget()
Select Event
Case #PB_Event_Gadget
Select EventGadget
Case 1
Select EventType
Case #PB_EventType_MouseEnter
SetGadgetAttribute(1, #PB_Canvas_Cursor, #PB_Cursor_Cross)
Case #PB_EventType_MouseLeave
SetGadgetAttribute(1, #PB_Canvas_Cursor, #PB_Cursor_Default)
Case #PB_EventType_LeftButtonDown
LMBDLoop()
EndSelect
EndSelect
EndSelect
Until Event=#PB_Event_CloseWindow