2013-07-22 28 views
7

Dies ist mehr eine Wortschatzfrage als alles andere.Linux auf dem Bildschirm unabhängig von Windows-Manager zeichnen

Einführung

ich den Point Cloud Library bin mit Face Tracking-Daten zu erhalten. Mit diesen Daten möchte ich verfolgen, wo sich ein Benutzer auf dem Bildschirm befindet. Das ist kein Problem.

Problem

Benutzer-Feedback zu geben, würde Ich mag die Einschätzung des Gesichts-Richtung als roten Kreis auf dem Bildschirm des Benutzers ziehen, im Grunde als (nur ein winziges Fenster schaffen sie) gesehen here . Ich möchte, dass dieser Kreis überall auf dem Bildschirm erscheint und ich möchte, dass er immer sichtbar ist. Ich möchte nicht, dass es von einem anderen aktiven Fenster abgedeckt wird. Wenn es die Interaktion mit dem Fenster behindert, geht es mir gut.

Mein Problem ist, dass ich nicht weiß, wo ich anfangen soll.

Ich könnte nur den Cursor steuern, aber das ist weniger als ideal, weil ich noch den Cursor bewegen möchte, während ich Gesichtserkennung verwende.

Ich denke, ich muss OpenGL verwenden, aber alle Beispiele, die ich gesehen habe, waren in X Windows. Zum Beispiel, der Code, den ich here nach dem Erhalten eines Hinweises here gefunden habe, gebe mir ein schönes permanentes Fenster, aber das Fenster erfasst immer noch alle meine Mausklicks. Wie zeichne ich etwas auf einem Bildschirm mit OpenGL, das X-Fenster unabhängig ist?

Bin ich das aus der falschen Richtung vollständig? Wenn ja, was sollte ich googeln?

Ich werde jede Antwort akzeptieren, die mir einen Ausgangspunkt gibt.

Plattform

ich Ubuntu 12.04 mit dem Unity-Desktop verwenden.

+0

Dies könnte Sie beginnen: http://StackOverflow.com/Questions/9363491/How-To-Make-Transparent-window-on-linux –

+0

Ich lese das und lief den Code, aber es sieht aus wie das Fenster würde immer noch versteckt sein, wenn ich ein anderes Fenster aktiviere. – Seanny123

+3

Sie brauchen _need_ nicht, um OpenGL zu verwenden, obwohl es eine gute Idee wäre (aus Gründen der Leistung und vielleicht wäre es einfacher, zu zeichnen). Nun, für die eigentliche Frage, würde ich empfehlen, in die "zusammengesetzte" X.org-Erweiterung (http://www.x.org/archive/X11R7.5/doc/compositeproto/compositeproto.txt) zu schauen.Das sollte dich irgendwo anfangen =) – MiJyn

Antwort

2

Erstellen Sie ein normales Fenster. Sagen Sie der WM, dass sie Dekorationen überspringen sollen, um das Fenster immer oben zu halten. Verwenden Sie XFixesSetWindowShapeRegion(), um einen kreisförmigen Ausgabebereich und einen leeren Eingabebereich separat festzulegen. Sie benötigen einen Compositing Window Manager XFixes Erweiterungen dafür zu arbeiten.

Sie können Ihr Fenster auch halbtransparent machen (dies erfordert einen Compositing-Fenstermanager).

Ein modernes Toolkit wie gtk sollte einfach zu bedienende APIs haben, um all das zu tun.

Kein OpenGL wird zu irgendeinem Zeitpunkt benötigt.

+0

Würde dieses Fenster noch alle Mausklicks erfassen, die darauf ausgeführt wurden? – Seanny123

+0

Nein würde es nicht, die leere Eingabeform kümmert sich darum. Im Grunde wird es keine Mauseingabe erhalten. Ich bin mir nicht sicher über die Tastatureingabe. –

+0

@ n.m .: Für die Shape-Erweiterung ist kein Compositing-WM erforderlich. Shape gibt es schon seit Ewigkeiten, lange bevor das Compositing überhaupt wahrgenommen wurde. – datenwolf

Verwandte Themen