Erste Gehversuche mit GTK2

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Mathias
Beiträge: 6162
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Erste Gehversuche mit GTK2

Beitrag von Mathias »

Ich habe mal die ersten Versuche mit GTK2 gestartet. Es scheint auch eine spannende Sache zu sein.
Ich habe vor kurzen mich mal schlau über die Uralte "Athena Widget", welche für X11 ist, gemacht.
GTK hat viele Ähnlichkeiten mit diesem Oldie.
Im Vergleich mit der LCL, fährt die eine ganz andere Schienen.

Was mich verwunder sind die Connect-signale, die werden mit einem String übergeben.
g_signal_connect(window, 'destroy', G_CALLBACK(@gtk_main_quit), nil);
Ich dachte für sowas nimmt man eine Event-Konstante. Ein Byte ist doch schneller abgefragt, als ein String.
Weis einer, wieso dies so gemacht wird ?
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: Erste Gehversuche mit GTK2

Beitrag von PascalDragon »

Mathias hat geschrieben:
Di 31. Jan 2023, 18:27
Was mich verwunder sind die Connect-signale, die werden mit einem String übergeben.
g_signal_connect(window, 'destroy', G_CALLBACK(@gtk_main_quit), nil);
Ich dachte für sowas nimmt man eine Event-Konstante. Ein Byte ist doch schneller abgefragt, als ein String.
Weis einer, wieso dies so gemacht wird ?
Weil das flexibler ist. Außerdem wird der Name nicht bei jedem Aufruf abgefragt, sondern nur während der Verbindung bzw. beim Trennen der Verbindung.
FPC Compiler Entwickler

hum4n0id3
Beiträge: 301
Registriert: So 5. Mai 2019, 15:23

Re: Erste Gehversuche mit GTK2

Beitrag von hum4n0id3 »

Warum Gtk2? Der Stand der Dinge ist Gtk4.

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

Re: Erste Gehversuche mit GTK2

Beitrag von Mathias »

hum4n0id3 hat geschrieben:
Mi 1. Feb 2023, 00:40
Warum Gtk2? Der Stand der Dinge ist Gtk4.
Weil mit gesagt wurde, das GTK2 fast fehlerfrei ist und von Lazarus direkt unterstützt wird.

Mit den Versionen werde ich irgendwie auch nicht schlau.
Es gibt viele GTK1 - GTK4 Beispiele für C/C++ und dort steht überall folgendes, egal welche Version das verwendet wird.

Code: Alles auswählen

#include <gtk/gtk.h>
Weil das flexibler ist. Außerdem wird der Name nicht bei jedem Aufruf abgefragt, sondern nur während der Verbindung bzw. beim Trennen der Verbindung.
Du meinst, wen man zB. selbst ein neuen Event hinzufügen will, hat man mit Strings mehr Möglichkeiten als mit Konstanten ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Erste Gehversuche mit GTK2

Beitrag von theo »

Mathias hat geschrieben:
Mi 1. Feb 2023, 14:13
Mit den Versionen werde ich irgendwie auch nicht schlau.
Es gibt viele GTK1 - GTK4 Beispiele für C/C++ und dort steht überall folgendes, egal welche Version das verwendet wird.

Code: Alles auswählen

#include <gtk/gtk.h>
Die liegen halt in unterschiedlichen Verzeichnissen.
/usr/include/gtk-3.0/gtk/gtk.h
/usr/include/gtk-2.0/gtk/gtk.h

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

Re: Erste Gehversuche mit GTK2

Beitrag von Mathias »

Was noch komisch ist, wo ist die lib von GTK2 ?

Code: Alles auswählen

-rw-r--r-- 1 root root 4669864 Mär 23  2022 libgtk-x11-2.0.so.0.2400.33
lrwxrwxrwx 1 root root      27 Mär 23  2022 libgtk-x11-2.0.so.0 -> libgtk-x11-2.0.so.0.2400.33
lrwxrwxrwx 1 root root      27 Mär 23  2022 libgtk-x11-2.0.so -> libgtk-x11-2.0.so.0.2400.33
-rw-r--r-- 1 root root  952648 Okt 11 22:20 libgtksourceview-5.so.0.0.0
lrwxrwxrwx 1 root root      27 Okt 11 22:20 libgtksourceview-5.so.0 -> libgtksourceview-5.so.0.0.0
-rw-r--r-- 1 root root  649472 Sep  1 09:52 libgtksourceview-4.so.0.0.0
lrwxrwxrwx 1 root root      27 Sep  1 09:52 libgtksourceview-4.so.0 -> libgtksourceview-4.so.0.0.0
-rw-r--r-- 1 root root  682240 Mär 12  2022 libgtksourceview-3.0.so.1.8.0
lrwxrwxrwx 1 root root      29 Mär 12  2022 libgtksourceview-3.0.so.1 -> libgtksourceview-3.0.so.1.8.0
-rw-r--r-- 1 root root 4540752 Sep 12 16:45 libgtkmm-3.0.so.1.1.0
lrwxrwxrwx 1 root root      21 Sep 12 16:45 libgtkmm-3.0.so.1 -> libgtkmm-3.0.so.1.1.0
-rw-r--r-- 1 root root 3508392 Mär  9  2022 libgtkmm-2.4.so.1.1.0
lrwxrwxrwx 1 root root      21 Mär  9  2022 libgtkmm-2.4.so.1 -> libgtkmm-2.4.so.1.1.0
-rw-r--r-- 1 root root  223648 Feb 14  2022 libgtk-layer-shell.so.0.7.0
lrwxrwxrwx 1 root root      27 Feb 14  2022 libgtk-layer-shell.so.0 -> libgtk-layer-shell.so.0.7.0
-rw-r--r-- 1 root root 8254320 Sep 19 22:39 libgtk-4.so.1.800.1
lrwxrwxrwx 1 root root      19 Sep 19 22:39 libgtk-4.so.1 -> libgtk-4.so.1.800.1
lrwxrwxrwx 1 root root      13 Sep 19 22:39 libgtk-4.so -> libgtk-4.so.1
-rw-r--r-- 1 root root 8611248 Aug 24 15:11 libgtk-3.so.0.2404.30
lrwxrwxrwx 1 root root      21 Aug 24 15:11 libgtk-3.so.0 -> libgtk-3.so.0.2404.30
lrwxrwxrwx 1 root root      21 Aug 24 15:11 libgtk-3.so -> libgtk-3.so.0.2404.30
Ist die etwa ilbgtk-x11-2.0... versteckt ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Erste Gehversuche mit GTK2

Beitrag von theo »

Mathias hat geschrieben:
Mi 1. Feb 2023, 16:42
Ist die etwa ilbgtk-x11-2.0... versteckt ?
Ja.
Was ich bei dir immer nicht verstehe, auch mit dem X11 "Projekt": Was willst du eigentlich und wenn ja warum? :wink:

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Erste Gehversuche mit GTK2

Beitrag von Socke »

Mathias hat geschrieben:
Mi 1. Feb 2023, 16:42
Ist die etwa ilbgtk-x11-2.0... versteckt ?
Nein, das ist Version 2.0 der libgtk-x11.

Du kannst einmal bei einem von dir erstellten Lazarus-Programm nachschauen:

Code: Alles auswählen

ldd project1
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Erste Gehversuche mit GTK2

Beitrag von theo »

Socke hat geschrieben:
Mi 1. Feb 2023, 17:08
Mathias hat geschrieben:
Mi 1. Feb 2023, 16:42
Ist die etwa ilbgtk-x11-2.0... versteckt ?
Nein, das ist Version 2.0 der libgtk-x11.
Nein, das ist schon die. Auch gtk2.pas linkt diese

Code: Alles auswählen

gtklib = 'libgtk-x11-2.0.so';     

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

Re: Erste Gehversuche mit GTK2

Beitrag von Mathias »

Socke hat geschrieben:
Mi 1. Feb 2023, 17:08
Mathias hat geschrieben:
Mi 1. Feb 2023, 16:42
Ist die etwa ilbgtk-x11-2.0... versteckt ?
Nein, das ist Version 2.0 der libgtk-x11.

Du kannst einmal bei einem von dir erstellten Lazarus-Programm nachschauen:

Code: Alles auswählen

ldd project1
Wow, die List ist ja riessig. Ich hätte nie gedacht, das Lazarus so viele Abhängigkeiten hat. Die libgtk-x11 ist auch zu finden. Also muss fast gtk2 in dieser stecken, da keine nackte libgtk2 zu finden ist.
Was ich bei dir immer nicht verstehe, auch mit dem X11 "Projekt": Was willst du eigentlich und wenn ja warum? :wink:
Ich wollte einfach mal wissen, wie die GUI dazumal aufgebaut war.
Die liegen halt in unterschiedlichen Verzeichnissen.
/usr/include/gtk-3.0/gtk/gtk.h
/usr/include/gtk-2.0/gtk/gtk.h
Wen ich es richtig verstehe, muss der C/C++ Programmierer die GTK-Version mit folgendem Parameter erzwingen ?

Code: Alles auswählen

`pkg-config gtk+-2.0 --libs`
In der Pascal-Programmierer zB. die Version 3 so:

Code: Alles auswählen

  procedure gtk_widget_set_tooltip_text(window: PGtkWidget; title: Pgchar); cdecl; external 'gtk-3';
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Erste Gehversuche mit GTK2

Beitrag von Winni »

Mathias hat geschrieben:
Mi 1. Feb 2023, 17:52
Wen ich es richtig verstehe, muss der C/C++ Programmierer die GTK-Version mit folgendem Parameter erzwingen ?
Im geschweifte-Klammern-Forum fragen.

Dies ist ein Lazarus / fpc Forum

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Erste Gehversuche mit GTK2

Beitrag von af0815 »

Alles in geschweiften Klammern ist Kommentar. SCNR

die Lib muss 'gtk-3' heissen. Dazu hier mehr https://lazarus-ccr.sourceforge.io/fpcd ... 890007.1.1
Daher nach den Konventionen 'libgtk-3.so'
Der Prefix lib und der Namen so ist in Konventionen festgelegt. Siehe https://www.freepascal.org/docs-html/pr ... 27900012.1
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Erste Gehversuche mit GTK2

Beitrag von theo »

Mathias hat geschrieben:
Mi 1. Feb 2023, 17:52
Was ich bei dir immer nicht verstehe, auch mit dem X11 "Projekt": Was willst du eigentlich und wenn ja warum? :wink:
Ich wollte einfach mal wissen, wie die GUI dazumal aufgebaut war.
Was heisst "dazumal"? Kann es sein, dass du immer noch nicht verstanden hast, was das ist?
https://de.wikipedia.org/wiki/X_Window_System

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Erste Gehversuche mit GTK2

Beitrag von Winni »

Hallo Mathias

Da bei Dir die verschiedenen Ebenen der graphischen Anzeige bunt durcheinander gehen,
habe ich dir mal den Bezugsrahmen aufgeschrieben

Code: Alles auswählen

| KDE • Gnome • XFCE • ..... | Desktop Umgebung
| gtk*     •  qt*            | Widget Set
|         X11                | Window-Manager & Netzwerkprotoll
| Unix • Linux • FreeBSD •...| Betriebssystem

Jede Schicht hat seine Aufgabe und reicht seine Befehle an die höhere Schicht weiter, die für bestimmte Aufgaben zuständig ist.

Für die z.B. Fenster-Dekoration ist die Desktop-Umgebung zuständig.
Frühe KDE-Versionen lieferten z.B. die Möglichkeit, Fenster mit bayrischen Schindeldächern zu verzieren.


Hoffe es hilft.

Winni

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

Re: Erste Gehversuche mit GTK2

Beitrag von Mathias »

| gtk* • qt* | Widget Set
Somit habe ich im ersten Post doch recht gehabt.
Das alte "X Athena Widgets", erfüllte dazumal den gleiche Zweck wie heute das GTK. Nur hatte man dazumal meistens FVWM verwendet und heute KDE, Cinnamon, etc ?
Und dazumal als es noch kein QT und GTK gab habe viele Programmierer ihre Widget selbst gemacht und dies war auch der Grund, da kein Programm gleich aussah wie da andere. Und Athena war eines der ersten standardisierten Widget für X11 ?
Bei Win3x sah es anderes aus, da war schon ein Widget an Board ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten