Hallo!
Ich habe wieder einmal eine kleine Frage über Glut.
Mein Anliegen ist es eine Veränderung der OpenGL Darstellung durch eine Mausbewegung zu erlangen. Das ist mit "glutMotionFunc" und "glutPassiveMotionFunc" gut möglich.
Wenn aber der Mauscursor am "Rand" des Bildschirmes angelangt ist, werden auch nur die Koordinaten dessen übergeben.
Meine Frage lautet: Wie kann ich den Mauscursor (am besten mit glut) verstecken und wie kann ich den Bewegungsraum desselben unendlich vergrößern.
Danke, Gruß, Tom.
Hallo Tom,
Am 29. Juni 2003 schrieb Tom Guder:
Meine Frage lautet: Wie kann ich den Mauscursor (am besten mit glut) verstecken und wie kann ich den Bewegungsraum desselben unendlich vergrößern.
Ich bin zwar kein GLUT-Experte, fürchte aber, dass beides nicht geht. Ich bin mir nicht einmal sicher, ob letzteres mit X überhaupt geht. Das Verstecken sollte mit Xlib-Funktionen möglich sein -- siehe auch XDefineCursor(3x), allerdings ist das nicht mehr plattformunabhängig.
Torsten
Torsten Werner email@twerner42.de wrote:
Hallo Tom,
Am 29. Juni 2003 schrieb Tom Guder:
Meine Frage lautet: Wie kann ich den Mauscursor (am besten mit glut) verstecken und wie kann ich den Bewegungsraum desselben unendlich vergrößern.
Ich bin zwar kein GLUT-Experte, fürchte aber, dass beides nicht geht. Ich bin mir nicht einmal sicher, ob letzteres mit X überhaupt geht. Das Verstecken sollte mit Xlib-Funktionen möglich sein -- siehe auch XDefineCursor(3x), allerdings ist das nicht mehr plattformunabhängig.
Doch, sollte mindestens mit Einschränkungen gehen. Das lebende Beispiel für sowas sind xeyes (allerdings ohne versteckte Maus) und SDL-Spiele, die nicht fullscreen laufen (allerdings ohne sich auf dem ganzen bewegende Maus - evtl. wollen die Spiele das aber auch nur nicht).
mfg, Fabian
Hallo Fabian,
Am 30. Juni 2003 schrieb Fabian Hänsel:
Am 29. Juni 2003 schrieb Tom Guder:
Meine Frage lautet: Wie kann ich den Mauscursor (am besten mit glut) verstecken und wie kann ich den Bewegungsraum desselben unendlich vergrößern.
Das lebende Beispiel für sowas sind xeyes (allerdings ohne versteckte Maus) und SDL-Spiele, die nicht fullscreen laufen (allerdings ohne sich auf dem ganzen bewegende Maus - evtl. wollen die Spiele das aber auch nur nicht).
Mir ist nicht klar, an welcher Stelle xeyes den Bewegungsraum der Maus unendlich vergrößert.
Torsten
Torsten Werner email@twerner42.de wrote:
Hallo Fabian,
Am 30. Juni 2003 schrieb Fabian Hänsel:
Das lebende Beispiel für sowas sind xeyes (allerdings ohne versteckte Maus) und SDL-Spiele, die nicht fullscreen laufen (allerdings ohne sich auf dem ganzen bewegende Maus - evtl. wollen die Spiele das aber auch nur nicht).
Mir ist nicht klar, an welcher Stelle xeyes den Bewegungsraum der Maus unendlich vergrößert.
Normalerweise läuft ein X-Programm in einem ihm vom Windowmanager zugwiesenen Fenster. Es emfpängt dann all die Mouse-Events, bei denen die Maus über dem entsprechenden Fenster ist. Xeyes aber kriegt alle Mouse-Events, unabhängig davon, ob man den Zeiger über dem xeyes zugewiesenen Zeichenbereich bewegt oder über einem anderen, und richtet dann die Pupillen darauf aus.
Das nette Augenpaar macht dies, indem es die Koordinaten direkt vom X-Server abfragt, was dein Glut-Programm dann auch irgendwie machen müsste. Keine Ahnung, wie das genau geht, aber die xeyes-Quelltexte sollten noch überschaubar sein (mindestens verglichen mit denen richtiger Anwendungen), was es zumindest einfacher macht.
mfg, Fabian
Am 30. Juni 2003 schrieb Fabian Hänsel:
Normalerweise läuft ein X-Programm in einem ihm vom Windowmanager zugwiesenen Fenster.
Lies bitte nochmal Toms ursprüngliche Anfrage:
Wenn aber der Mauscursor am "Rand" des Bildschirmes angelangt ist, werden auch nur die Koordinaten dessen übergeben.
*Rand des Bildschirms* klingt nach einem Programm, das im Fullscreen-Modus läuft (kein Problem mit GLUT). Was hat das mit der xeyes-Thematik zu tun? Läuft xeyes bei dir im Fullscreen-Modus und macht es etwas besonderes mit den Randkoordinaten des Bildschirms? Ich denke nein, womit Toms Frage nach wie vor unbeantwortet bleibt.
Und wenn ich XQueryPointer(3X11) lese, kann ich nicht erkennen, dass man dort relative Änderungen der Mausbewegung abfragen kann, wie es uns Josef suggerieren wollte.
Was meines Erachtens erfolgversprechender ist: XSelectExtensionEvent(3X11) aus den xinput extensions.
Torsten
Hallo!
Am Montag, 30. Juni 2003 21:50 schrieb Torsten Werner:
Was meines Erachtens erfolgversprechender ist: XSelectExtensionEvent(3X11) aus den xinput extensions.
Ich hoffte Plattformunabhängig bleiben zu können, doch nun werde ich es damit probieren. Vielen Dank und Gruß,
Tom Guder
Torsten Werner email@twerner42.de wrote:
Am 30. Juni 2003 schrieb Fabian Hänsel:
Normalerweise läuft ein X-Programm in einem ihm vom Windowmanager zugwiesenen Fenster.
Lies bitte nochmal Toms ursprüngliche Anfrage:
Wenn aber der Mauscursor am "Rand" des Bildschirmes angelangt ist, werden auch nur die Koordinaten dessen übergeben.
*Rand des Bildschirms* klingt nach einem Programm, das im Fullscreen-Modus läuft (kein Problem mit GLUT). Was hat das mit der xeyes-Thematik zu tun? Läuft xeyes bei dir im Fullscreen-Modus und
Ups, nein, natürlich nicht. Schuldigung, hatte ich übersehen. Ich dachte an "am Rand des Fensters".
mfg, Fabian
On Sunday 29 June 2003 23:38, Torsten Werner wrote:
Ich bin mir nicht einmal sicher, ob letzteres mit X überhaupt geht.
IIRC bekommt man zwar weiterhin die Randkoordinaten, aber dennoch die relativen Änderungen der Mausbewegung. Es gibt für MotionEvent ein paar Masken, u.a. GrabWindow (?) welche von Toolkits normalerweise genutzt werden, denn wenn der Mauszeiger aus dem Fenster draußen ist, bekommt man die Events nicht mehr.
Bei glut muß man das wohl selbst machen. Ein "Verstecken" hilft auf alle Fälle nicht.
Es gibt aber XQueryPointer, womit man (wie auch das angesprochene xeyes das macht) über Xlib global die Position des Mauszeigers abfragen kann, diese muß dann auf das eigene Fenster gemappt werden.
Ha, hat mir mein X11-Vortrag doch noch was gebracht :)
Josef
lug-dd@mailman.schlittermann.de