Canvas bei Linux in einer VM

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Lord
Beiträge: 324
Registriert: 21.01.2008 19:11

Re: Canvas bei Linux in einer VM

Beitrag von Lord »

@all

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
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Canvas bei Linux in einer VM

Beitrag von ts-soft »

Lord hat geschrieben: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?
Ja, während die linke Taste gedrückt wird, aber nicht mehr, wenn sie losgelassen wurde.
Ich dachte darum geht es hier?

PS: Hättest auch erwähnen können, das Du mit VMWare arbeitest, bzw. dann auch erwähnen sollen,
welche Version (Player, Server, Workstation oder Fusion), so geht jeder von VirtualBox aus, da es
von den kostenlosen Möglichkeiten das beste ist (VMWare Player ist lahm und sieht scheiße aus :mrgreen: , Server ist
alt und funktioniert nicht besonders gut)

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Lord
Beiträge: 324
Registriert: 21.01.2008 19:11

Re: Canvas bei Linux in einer VM

Beitrag von Lord »

Hallo ts-soft!

Es kann sein, daß ich mich da nicht deutlich genug ausgedrückt habe.
Ich hätte besser statt "nach" "trotz" schreiben sollen.

Ich meinte tatsächlich die Situation, daß der Mauscursor das Canvas
nicht verlassen kann, während die linke Maustaste gedrückt ist.
Sobald die linke Maustaste losgelassen wird, "darf sie wieder raus".

Ansonsten hatt ich in meinem ersten Posting erwähnt, daß es sich bei
der VM um VMWare handelt. Es ist die Workstation-Version.
Lord hat geschrieben:Hallo!

Frage an die Linuxnutzer:

Wie verhält sich bei euch folgender Code:

Code: Alles auswählen

OpenWindow(0, 10, 10, 400, 400, "Canvas-Test")
CanvasGadget(0, 5, 5, 390, 390)

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
    Case #PB_Event_Gadget
      Select EventType()
        Case #PB_EventType_LeftClick
          SetGadgetAttribute(0, #PB_Canvas_Clip, #True)
          SetWindowTitle(0, "Canvas-Test - LMB")
        Case #PB_EventType_RightClick
          SetGadgetAttribute(0, #PB_Canvas_Clip, #False)
           SetWindowTitle(0, "Canvas-Test - RMB")
     EndSelect
  EndSelect
ForEver
Ich habe Ubuntu 12.04 in VMWare laufen.
Bei obigem Code kann der Mauszeiger nach Drücken der
linken Maustaste das CanvasGadget verlassen.
Lasse ich das Programm auf Windows laufen, kann die
Maus das Gadget nicht verlassen.

Ist das jetzt die VM oder verhält sich das CanvasGadget
in Linux anders als in Windows?
Dank an alle Beteiligten für die Hilfe.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Canvas bei Linux in einer VM

Beitrag von ts-soft »

Lord hat geschrieben:Ansonsten hatt ich in meinem ersten Posting erwähnt, daß es sich bei
der VM um VMWare handelt. Es ist die Workstation-Version.
Sorry, hab ich übersehen, bzw. wurde davon abgelenkt, da bobobo Virtualbox erwähnt hat,
habe irgendwie gedacht, Du würdest VirtualBox nutzen.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Canvas bei Linux in einer VM

Beitrag von bobobo »

Die Mauzeigerintergration gibt es unter Vmware sicher auch.

DAS IST WENN MAN DIE MAUS IN CLIENT UND HOST GLEICHZEITIG BENUTZEN KANN
OHNE EIN EINFANGEN AUF DEM CLIENT.
Virtualbox macht das nach Installation der Gasterweiterungen
und dann ist das an und abschaltbar.


Es spricht überigens nichts ernsthaftes gegen den Einsatz von virtualbox statt vmware
(Mir erscheint es sogar für die Desktopvirtualisierung die bessere Lösung)

ich habe hier Barematell.VMWARE-Systeme und greife per rdp oder auch
über die Vsphere -konsole drauf zu.

Eine Einstellung für dir Mausintergarion finde ich auf die Schnelle auch nicht.

im Vmwareplayer kann das anders sein.

eventuell muss man auch die vmaretools deinstallieren. (mit allen Nachteilen die
sonst so hat)
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Lord
Beiträge: 324
Registriert: 21.01.2008 19:11

Re: Canvas bei Linux in einer VM

Beitrag von Lord »

Hallo bobobo!
bobobo hat geschrieben:Die Mauzeigerintergration gibt es unter Vmware sicher auch.

DAS IST WENN MAN DIE MAUS IN CLIENT UND HOST GLEICHZEITIG BENUTZEN KANN
OHNE EIN EINFANGEN AUF DEM CLIENT.
Virtualbox macht das nach Installation der Gasterweiterungen
und dann ist das an und abschaltbar.
...
...
Eine Einstellung für dir Mausintergarion finde ich auf die Schnelle auch nicht.

im Vmwareplayer kann das anders sein.

eventuell muss man auch die vmaretools deinstallieren. (mit allen Nachteilen die
sonst so hat)
Am Anfang der Seite hatte ich geschrieben:
Lord hat geschrieben:...
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).
...
und im letzten Posting:
Lord hat geschrieben:...
Ansonsten hatt ich in meinem ersten Posting erwähnt, daß es sich bei
der VM um VMWare handelt. Es ist die Workstation-Version.
...
Ansonsten muß ich noch sagen, daß ich kein Programmier-Profi
bin so wie ihr. Ich bin froh, daß ich Linux überhaupt zum Laufen
bekommen habe. Da werde ich jetzt nicht nochmal anfangen mit
dem Rumgefummel und eine andere VM installieren um darin dann
wieder Linux zu installieren......

Mir reicht die Auskunft, daß auf einem nicht virtualisierten Linux
der Mauscursor das Canvagadget bei gedrückter linker Maustaste
nicht verlassen kann.
Bild
Antworten