Classic GTK1 GUI Library

gitlab.com

126 points by MaximilianEmel 5 days ago


robinsrowe - an hour ago

Thank you! Nice that people care about my work on GTK1. I haven't announced a GTK1 release, so don’t expect it to be stable yet.

GTK1 interests me as it is necessary to build retro apps I like. CinePaint being one, and also dozens of other classic GTK apps. A technical reason to care about GTK1 is code size. GTK2 is much larger than GTK1. GTK3 is much larger than GTK2.

> it seems to be based on Gtk1.2 but it is its own thing.

Yes. Historically, GTK1 was maintained as 3 separate projects across the 3 major operating systems by three different teams, not a single codebase. I created the Windows port. Later I took over the MacOS port that someone had started, but had abandoned before completion. After gtk.org deprecated Linux GTK1, I took on that code, too.

As I combine code from different versions of GTK1 from different operating systems, it breaks things. My current effort is to complete integration of the MacOS and Linux code with my Windows code, and remove resultant bugs.

> maintain the legacy API and upgrade the internal architecture to use more modern approaches.

GTK1 is of a GTK 1.2 flavor plus some enhancements. Yes, I want to smooth off old rough edges, to make GTK1 better with fonts and pixbuffers.

> I present you gtkaa [GTK1 anti-aliasing patch]

Thank you! Will take a stab at integrating that. I previously integrated the GTK1 dark-mode patch. If there are other interesting GTK1 patches in the archives somewhere, let me know. I’ve heard that gtk.org wasn’t very welcoming to GTK1 patches.

> Is there a lightweight distribution of GTK2?

Maybe in the future.

CinePaint conditionally compiled with GTK1 or GTK2 using an #ifdef. Not a lot of changes to make it build either as GTK1 or GTK2. The GTK2 API broke GTTK1 compatibility in some silly ways. For example, changing the order or arguments in function calls of the same name. Or, making an API that took one call in GTK1 take 2 calls in GTK2, or vice versa. Minor stuff, at least in the calls used by CinePaint.

Are other GTK1 apps as easy to port to GTK2 as was CinePaint? I want to add common GTK2 APIs to GTK1 to see how that goes. Doing so would make GTK1 into a very lightweight implementation of the GTK2 API.

badsectoracula - 20 hours ago

Is it binary backwards compatible with Gtk1.2? AFAICT from the description it seems to be based on Gtk1.2 but it is its own thing.

I've being using Gtk 1.2 + patches[0] (which i made by combining the last release with a few patches from Slackware) to occasionally check Lazarus' Gtk1 support. It is also neat if you want to make self-contained binaries, for example this little animation utility i wrote some time ago[1] has a Gtk1-based build with Gtk1 linked statically on it and the tool relying on just X11 and OpenGL.

[0] http://runtimeterror.com/pages/badsector/gtk12/

[1] http://runtimeterror.com/tools/piecemod/

joz1-k - 21 hours ago

Nice to see that someone is still maintaining the original GTK1 toolkit. It's like the classic Win32 UI API for the Linux/Unix. Linux UI libraries are a constantly moving target and one can be easily more occupied by adapting to those toolkit API changes instead of focusing on the features of the application itself. I guess that CinePaint developers decided at some point that they don't want to endure API changes in the UI toolkit anymore.

On the other hand, I think GTK1 doesn't even support Unicode.

jandrese - 16 hours ago

One thing that GTK lost in the transition to GTK2 was working well over slow Internet connections. I remember how even on a dial up modem you got pretty acceptable performance out of a GTK1 app, so long as it wasn't shoving big bitmaps around. GTK2 on the other hand was always dog slow over remote X connections for no apparent reason.

rcarmo - 17 hours ago

I'm so happy to know this exists because every single cross-platform UI toolkit I've used in the past few decades is more complex and weird.

(Not that GTK1 can't be complex and weird, more that we've lost the art of creating native GUI toolkits that make sense.)

HexDecOctBin - 20 hours ago

Somewhat tangential: Is there a lightweight distribution of GTK2? I was shopping for a cross-platform GUI library with a C API, and GTK2 seemed like the right choice. But the Windows distribution [1] had 30-40 DLLs and none of them seemed to be optional in DependencyWalker.

[1] https://github.com/tschoonj/GTK-for-Windows-Runtime-Environm...

vintagedave - 21 hours ago

I never followed the history of GTK very much but reading about non-compatibility between versions surprises me, just as a matter of software engineering re a critical dependency.

I am unsure from the page, just that it implied: is there software in 2025 still using GTK v1?

thedumbname - 18 hours ago

Tried to build on Windows, Mac, Linux: different errors on each platform.

itomato - 17 hours ago

I was about to make a Cinepaint joke, but it seems that's already been addressed.

zerr - 19 hours ago

Is Glade unmaintained nowadays? The last release is 3 years old.

Western0 - 19 hours ago

I like GTK but......

small example have error (memory leak) in valgrind

dsijak - 18 hours ago

Ubuntu doesn’t ship libgtk1.2 anymore in standard repositories.

roschdal - 20 hours ago

GTK1 is the best GTK.

wer232essf - 19 hours ago

[dead]