exclusiver Zugriff auf die Maus

  • exclusiver Zugriff auf die Maus

    Hi,
    Ich portiere gerade meinen Emu auf Mac und habe Schwierigkeiten einen Teil der alten direct input Funktionalität zu übertragen.
    zum Problem: Ich verwende die Maus als Input Möglichkeit. In der app verstecke ich den Maus Cursor und zeichne mittels OpenGL ein Fadenkreuz. Die Position des Fadenkreuz wird über die Maus Deltas berechnet. Der echte, jedoch unsichtbare Maus Cursor kann sich außerhalb des App Fenster befinden. Ist dieser zufällig über einer Schaltfläche wird die beim Klick aktiviert. In directx gibt es die Möglichkeit des exclusive Zugriffes auf die Maus für die app. Ich suche so eine Funktionalität für Carbon/Quartz.

    Danke schon mal im Vorraus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von PiCiJi ()

  • Ich glaube, 'portieren' ist eine schlechte Idee.
    Statt Quartz und Carbon solltest du eher OpenGL und Objective-C verwenden.

    Du kannst vermutlich eh einen Großteil des Codes vergessen...

    Aber vielleicht fällt ja dem zerm was Gutes ein. ;)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • ich glaub das wäre bei mir schon ein useability error

    also nutzer würde ich erwarten das wenn ich mit der maus aus dem app fenster fahre das fadenkreuz wieder zum curser wird, damit ich eine andere app in den focus bekommen kann

    sprich ich glaub deine berechnungsmethode ist subotimal wenn die maus sich ausserhalb deines fensters befinden kann

    ansonsten würde ich halt ein tracking rechteck registrieren und entsprechend beachten bzw bekommst du ja so einen dedizierten eventstream

    keine ahnung wie gut das in carbon funktioniert
    snafu
    :() { :|: &};:
    sometimes i dream in hex
    Obey gravity! Because its a law!
  • also nutzer würde ich erwarten das wenn ich mit der maus aus dem app fenster fahre das fadenkreuz wieder zum curser wird, damit ich eine andere app in den focus bekommen kann
    grundsätzlich ja, aber in der Hitze des Gefechtes zieht man die Maus aus dem Anzeigebereich und klickt :) Praktisch kann man das Spiel dann nicht mehr spielen, höchstens im fullscreen.

    Statt Quartz und Carbon solltest du eher OpenGL und Objective-C verwenden. Du kannst vermutlich eh einen Großteil des Codes vergessen...
    ich würde schon wollen das alles in C++ bleibt. Grundsätzlich musste ich nur die directx Komponenten tauschen. ( openal, opengl, carbon(Maus, Keyboard), sdl(Joypad) ) Gui technisch macht QT nen Wahnsinns Job es cross Plattform zum Laufen zu bringen. Die notwendigen Anpassungen kann man an einer Hand abzählen.
  • PiCiJi schrieb:

    also nutzer würde ich erwarten das wenn ich mit der maus aus dem app fenster fahre das fadenkreuz wieder zum curser wird, damit ich eine andere app in den focus bekommen kann
    grundsätzlich ja, aber in der Hitze des Gefechtes zieht man die Maus aus dem Anzeigebereich und klickt :) Praktisch kann man das Spiel dann nicht mehr spielen, höchstens im fullscreen.

    Es ist der Sinn einer Maus, dass man diese irgendwo hin ziehen und dann klicken kann.
    Ich kann den Ansatz Apples schon verstehen und HASSE es, wenn irgendwelche Spiele mich die Maus nicht aus dem Fenster ziehen und herumklicken lassen wollen. (unter Windows z.B., Stichwort Messenger)

    Was spricht gegen Fullscreen?
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Es ist der Sinn einer Maus, dass man diese irgendwo hin ziehen und dann klicken kann.
    Ich kann den Ansatz Apples schon verstehen und HASSE es, wenn irgendwelche Spiele mich die Maus nicht aus dem Fenster ziehen und herumklicken lassen wollen. (unter Windows z.B., Stichwort Messenger)


    mit der Esc Taste wird die Maus wieder aktiviert. Dann müsste Apple aber so konsequent sein und das Unsichtbar Machen des Mauszeigers außerhalb der app ebenfalls verbieten.

    Was spricht gegen Fullscreen?
    nix, ist bereits integriert.

    Ich werde es so machen, das unter Mac die Maus nur im fullscreen sinnvoll verwendet werden kann.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von PiCiJi ()

  • PiCiJi schrieb:

    Dann müsste Apple aber so konsequent sein und das Unsichtbar Machen des Mauszeigers außerhalb der app ebenfalls verbieten.

    Definiere 'außerhalb der App'.
    Sobald du in eine andere App wechselst ist der Mauszeiger meines Wissens wieder sichtbar.
    Deine App besteht nicht nur aus dem Fenster, das du da aktuell siehst.
    Du solltest also eher dafür sorgen, dass die Maus das Fenster nicht verlassen kann.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Lucas de Vil schrieb:

    Definiere 'außerhalb der App'.


    außerhalb des Anzeige Fensters

    Lucas de Vil schrieb:

    Sobald du in eine andere App wechselst ist der Mauszeiger meines Wissens wieder sichtbar.


    ja sobald der unsichtbare Mauszeiger außerhalb des Anzeige Fenster klickt, ist das Fenster meiner app manchmal minimiert. In diesem Fall ist der Maus Cursor wieder sichtbar, was ja auch ok ist.
    Grundsätzlich sind realer Mauszeiger und Fadenkreuz nicht lange auf der gleichen Position, was aber aus Emulationssicht normal ist.

    Deine App besteht nicht nur aus dem Fenster, das du da aktuell siehst.


    das bedeutet ?

    Du solltest also eher dafür sorgen, dass die Maus das Fenster nicht verlassen kann.


    hmm die Schwierigkeit dabei ist zu erkennen, wenn dies der Fall ist. Ein exklusives Binden der Maus an die app wäre hier einfacher. Da dies jedoch nicht möglich ist, werde ich mal schauen was hier geht.
  • PiCiJi schrieb:

    Deine App besteht nicht nur aus dem Fenster, das du da aktuell siehst.

    das bedeutet ?

    Das ein Verlassen des Fensters kein Verlassen der App darstellt und der Mauszeiger deshalb nicht automatisch zurückgesetzt wird.
    Deine Anwendung hat also exklusiven Zugriff auf die Maus. Da du die Events außerhalb des Fensters allerdings nicht abfängst (keine Ahnung ob das mit Carbon überhaupt geht) werden diese einfach an die dahinterliegenden Bereiche weitergeleitet.
    Works As Designed, zumindest unter Mac OS X.

    (Einer der unzähligen Unterschiede. ;))
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P