Linux Widget Aufbau

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
Mathias
Beiträge: 6165
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Linux Widget Aufbau

Beitrag von Mathias »

Ich habe eine kleine Demo in X11 programmiert, dies enthält Edit, Buttons und Panels. Dabei habe ich für jede Komponente eine eigenes Fenster kreiert. Mit anderen Worten, die Fenster sind ineinander verschachtelt.
Dies kann man mit "xwininfo --tree" nachprüfen.

Code: Alles auswählen

$ xwininfo -tree

xwininfo: Please select the window about which you
          would like information by clicking the
          mouse in that window.

xwininfo: Window id: 0x5e00001 "Mein Fenster"

  Root window id: 0x2bf (the root window) (has no name)
  Parent window id: 0x2a0042e (has no name)
     4 children:
     0x5e00027 "Write": ()  120x50+400+270  +410+308
     0x5e00025 "New": ()  120x50+250+270  +260+308
     0x5e00023 "Close": ()  120x50+100+270  +110+308
     0x5e00007 "none": ()  660x250+10+10  +20+48
        3 children:
        0x5e0000d "none": ()  640x140+10+100  +30+148
           4 children:
           0x5e00020 "none": ()  620x24+10+97  +40+245
           0x5e0001d "none": ()  620x24+10+68  +40+216
           0x5e0001a "none": ()  620x24+10+39  +40+187
           0x5e00017 "none": ()  620x24+10+10  +40+158
        0x5e0000b "none": ()  260x80+390+10  +410+58
        0x5e00009 "none": ()  370x80+10+10  +30+58
           4 children:
           0x5e00015 "Button3": ()  80x25+265+10  +295+68
           0x5e00013 "Button2": ()  80x25+180+10  +210+68
           0x5e00011 "Button1": ()  80x25+95+10  +125+68
           0x5e0000f "Button0": ()  80x25+10+10  +40+68
Mache ich den Test bei bestehen Programmen, zB. Der Lazarus-IDE, wird nur folgendes ausgespuckt:

Code: Alles auswählen

~$ xwininfo -tree

xwininfo: Please select the window about which you
          would like information by clicking the
          mouse in that window.

xwininfo: Window id: 0x4a00168 "Lazarus-IDE v2.2.2 - Project1"

  Root window id: 0x2bf (the root window) (has no name)
  Parent window id: 0x2a0033b (has no name)
     1 child:
     0x4a00169 (has no name): ()  1x1+-1+-1  +199+157
Wieso ist dies so ?

Ich dachte immer, das jede einzelne Komponente, bei gtk, qt und co. eine eigenes Fenster enthält.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Linux Widget Aufbau

Beitrag von PascalDragon »

Mathias hat geschrieben:
Sa 10. Dez 2022, 08:38
Ich dachte immer, das jede einzelne Komponente, bei gtk, qt und co. eine eigenes Fenster enthält.
Nein, Qt und GTK haben nicht für jede Komponente ein eigenes „Fenster”.
FPC Compiler Entwickler

Mathias
Beiträge: 6165
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Linux Widget Aufbau

Beitrag von Mathias »

Nein, Qt und GTK haben nicht für jede Komponente ein eigenes „Fenster”.
Was hat dies für einen Vorteil ?
Wen ich eine Widget schreiben würde, würde ich die Fensterlösung nehmen, somit hat man für jede Komponente einen geschlossenen Bereich.
Oder braucht dies zu viel Resourcen ? was ich mir schlecht vorstellen kann, ansonsten wären alte X11-Programme nicht so geschrieben. Als Beispiel die Athena. Widget.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Linux Widget Aufbau

Beitrag von PascalDragon »

Weil es die interne Verwaltung einfacher machen kann: man muss sich nicht darum kümmern auch noch ein natives Fensterhandle für jedes Control mit zu pflegen. Und eventuell hat dieses native Element mehr Einschränkungen als für das Widgetset sinnvoll ist (Qt Komponenten erlauben zum Beispiel ein sehr extensives Styling was WinAPI Komponenten meist nicht umsetzen können).
FPC Compiler Entwickler

Mathias
Beiträge: 6165
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Linux Widget Aufbau

Beitrag von Mathias »

Code: Alles auswählen

$ xwininfo -root -tree
Ich habe mal xwininfo für die ganze Root angegeben, interessant, was da alles kommt.
Ein bisschen mehr, als nur den Desktop und Browser an dem ich jetzt den Text eintippe.
Aber verschachtelt ist praktisch nichts.
Startet man eine uralte App wie tkdesk, dort wird recht tief ineinander geschachtelt. Da sieht man recht gut, das früher anders gearbeitet wurde.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten