2017-10-06 11 views
-3

Ich frage mich, wie der Quellcode für GUI-Elemente aussehen würde? Ich nehme an, dass der sehr grundlegende Code ein Teil des Betriebssystemcodes wäre?Wie sieht der GUI Quellcode aus?

Der größte Grund, warum ich neugierig bin, ist, weil ich wissen möchte, wie viel Verarbeitung jedes GUI-Element dauert. Z.B. Hört jede Taste bei jedem Taktzyklus auf, ob sie gedrückt wurde? Wie sehen Bilder zur GPU aus? Sind das nur 2D-Matrizen, die jeden Taktzyklus aktualisiert werden?

Verzeihen Sie mir für die mehrere Fragen in einem. Ich habe mich etwas umgeschaut, aber ich habe keine guten Quellen dafür gefunden, wie die GUI auf der unteren Ebene funktioniert und wie diese Anweisungen aussehen könnten.

+0

Habe es: https: // github.com/GNOME/gtk – ceejayoz

+0

Sie übertreiben dies grob. Pixel sind Bits oder Bytes in einem RAM, die die Logik liest und in die richtigen Signale für den Monitor konvertiert. Eine Schaltfläche ist nur Pixel. Das Anklicken hat nichts mit dem Display oder den Pixeln zu tun, es ist das Eingabegerät mit einem berechneten x/y, das die Software dem GUI zuordnet, um die Bounding Box zu finden, wo der Knopf dann die Software reagiert. und macht bei Bedarf neue Pixel. –

+0

Warum die Down-Stimmen? Das ist meine erste Frage. Wenn es einen besseren Weg gibt, diese Frage zu formulieren, würde ich mich über die konstruktive Kritik freuen. – Shaws34

Antwort

0

Nein, jede anständige GUI führt keine Schleife über jedes Element, das die Mausposition und den Tastenstatus in einer Busy-Wait-Schleife abfragt.

Das gebräuchlichste Design sendet Ereignisse an Clientprozesse, wenn etwas passiert. Sie warten auf sie und führen Callback-Funktionen als Reaktion auf Benutzeraktionen aus.

Normalerweise gibt es einen GUI-Server (integriert in "das Betriebssystem" (Windows)) oder läuft in einem User-Space-Prozess (der X-Server unter Linux)), der mit physischen und virtuellen Mäusen/Tastaturen kommuniziert und diese übersetzt Positions-/Schaltflächenstatus-Updates für den virtuellen Mauszeiger.

Bei Bedarf wird ein Ereignis an den Clientprozess gesendet, in dessen Fenster der Benutzer beispielsweise geklickt hat.

Der Client registriert mit dem Server, von welchen Ereignissen er wissen möchte, und verwendet eine Systemaufruf-/GUI-Bibliotheksfunktion, um auf Ereignisse zu warten. Dies ist genau wie ein Prozess, der auf Daten in einem Netzwerk-Socket oder auf einem seriellen Port oder was auch immer wartet. In Linux mit X11 ist es buchstäblich ein Socket (zwischen dem X-Server und dem Client) und verwendet genau das gleiche System select, poll oder epoll Systemaufruf auf Ereignisse warten, wie es auf Netzwerkdaten warten würde. In der Tat kann es auf beide gleichzeitig in einem Thread warten, indem es auf mehrere Dateideskriptoren wartet. Siehe poll(2).


Wenn der Client ein Ereignis wird, rechnet sie aus, welche Taste oder Textbox oder was auch immer das Ereignis für ist, und betreibt eine Callback-Funktion, die zuvor registriert wurde, wenn die Schaltfläche erstellt wurde.

In einigen GUI-Systemen kann der Client-Prozess den Server über seine Schaltflächen informieren, sodass der Server Begrenzungsrechteckrechtecke prüft, anstatt Nachrichten über jedes Mausereignis zu senden, damit der Client aussortiert.


Wie sehen Bilder wie auf die GPU? Sind sie nur 2D-Matrizen,

Ja, mehr oder weniger. Siehe zum Beispiel . Die GPU-Hardware selbst kann mit Bildern in verschiedenen Formaten umgehen, wie zum Beispiel RGBA mit verschiedenen Breiten (Bittiefen) oder YUV.

jeden Taktzyklus aktualisiert?

Nein, nicht wenn sie sich nicht bewegen oder verändern!

Verwandte Themen