Inkscape is hiring: Accelerating the GTK4 migration
inkscape.org
inkscape.org
It dumps tons of junk in the SVG and has pretty poor tools for managing the SVG hierarchy (resorting to text editing for some things), but at the same time they've used the excuse of being an SVG editor to avoid implementing things like path thickness and mesh gradients for years (yes, there's a path effect extension now but it's hugely buggy).
This SO post at least talks about it: https://superuser.com/questions/1256265/how-to-export-an-min...
I've used it myself plenty of times for my personal website with good results.
As it's currently tooled it can't be set up to align with Blender, really at all, which is really annoying. The box zoom for example frequently trips me up, but that's inconveniently my muscle-memory for panning.
A: It's still far from as intuitive as other 3d programs
B: Blender is a full featured 3d suite with animation,etc so modes makes sense, Inkscape is more of a single-use tool.
Been a while since I used Inkscape but from memory accidental selection does ring a bell, might be more focused ways to make usage smoother (many tools will go back to a selection via an undo, does Inkscape do this?).
But I would disagree that Blender's nature is particularly distinct from Inkscape. More or less the workflow is transitioned from 3D-exclusive to 2.1D. Inkscape is still very much about dragging verts, modifiers, moving, scaling, flipping, rotating... There are obvious non-parallel features like animation but there are also a lot of parallels and I don't think that mapping exclusive edit mode to 'tab', translate to 'g', setting 'MW' to zoom (this is a very convoluted process but can be done)... or at least opening up all that stuff so the user can define it to the extent necessary to reach parity with their favored applications.
There have been install helper available for years: https://mscorefonts2.sourceforge.net/
Additionnally you can extract them from the windows installer iso.
Isn't this... stupid?
Using a larger font size or a font that renders larger at the same font size means you can write less content in the same space.
Sure, it might seem stupid over something trivial as schoolwork, but consider the same situation widely exists in the real world.
You won't say it's stupid when you need to send business documents and there's money on the line if there are incompatibility issues. Suddenly Windows, Office, and Adobe make a ton of practical, industrial sense.
ca 2000 when I was in HS, it was clear that the font & format limits were to also help get students used to submitting printed standardized manuscripts later in academia.
But also to save the teachers from all of the same empty formatting flourishes which people do in the corporate world too. Colored text, unrestrained use of bold, fonts which are harder to read ...
12 pt, double spaced, Times New Roman was honestly a standard which started to be taught as early as elementary school.
In uni, strict formatting rules weren't uncommon either! At my school, within the humanities, formatting was strict to get students used to APA/Chicago and more persnickety guides.
Even in Analytical chemistry, charts made in Excel were banned outright because the prof wanted to push students onto tools capable of generating publication-ready graphics.
You could excuse not having adapted to, say, AI-assisted tools yet. The industry has to figure out best methods, then it has to trickle out so the younger instructors know about, and then it has to be propagated out to everybody, standardized, etc.
But word processors that could ignore fonts and provide word counts were pretty old tech by 2010! If you haven’t adapted your teaching to something that’s been widespread for decades… that seems like a willful ignorance.
If I were to define software quality as a combination of performance and stability, all Adobe products have been in steep decline over the past two decades. Inkscape is still missing a few key features for printing so I do my work in Inkscape then bring it into Illustrator before printing.
The GTK post seems more real, and I hope they find a good candidate
Agreed, but considering the circumstances, I'd be much more confused if they didn't already have someone in mind.
It's a strategic choice whether your company wants to employ FOSS tools for your production, but if you do, or you base your company on consulting for other companies who use those tools, then it is of course in your interest to also influence the continued relevance of said tools. This is why FOSS isn't necessarily cheaper for companies, because if you want to defend your interest, you eventually have to hire software engineers to - at the very least - gain an overview, if not some measure of "ownership" or stabilizing influence over the code base.
Im sure, like many of us, you've sighed about things being needlessly bureacratic at some point in your live, this is one of those things that cause good people to feel very frustrated.
Source: personal experience at the company where I work.It is not quite in the same league, but we already have SVGEdit[1] as an example. as well as diagrams.net, but taking a 2023 approach would be much more performant and open ended.
There is a place/market for both.
https://www.figma.com/blog/building-a-professional-design-to....
I worked for an ad publishing firm many years back, it was common for us to receive vector graphic files that are hundreds of megabyte large. We used Adobe Illustrator and CorelDRAW to handle those files on some fairly fine computers, and yet some graph files from our clients still managed to crash the computer due to RAM exhausting etc.
I image it makes sense for an industrial capable software to want to run as native as possible.
Another thing is color management. Most graphic software supports RGBA, but for publishers, CMYK is also required. I'm not really sure if browser engines supports these color system well enough (not just color conversion between the two, but also color profile for the monitor), because if something is mess up there, it can be expensive to fix (for the ad publisher).
If you really want to, you can run Inkscape in the browser the same way Figma runs in the browser: compile it to WASM.
Igalia has made some massive improvements to the SVG engine in WebKit recently: https://wpewebkit.org/blog/05-new-svg-engine.html
"Error - can't load the page (unsupported web browser)"
I do not think my browser is ready for an 8000x8000 raster image with svg clipping etc. Not to mention the ungodly large bitmap traces, with hundreds of thousands of nodes...
A browser tool like Inkscape would be cool and useful. But no replacement.
Web Assembly might be a way to provide web app support in addition to native but it should never replace native.
Also, energy efficiency is starting to play a greater role here in the EU where hopefully it encourages less use of energy hungry frameworks and more native applications given their better resource use.
Also, posts that open with "I know I'm gonna get downvoted for this but [...]" are an automatic down arrow for me.
I started doing my svg editing by hand last year after becoming frustrated with the nonsense one gets when exporting from most graphic editors.
Yes, it's a little cumbersome but quite straightforward, and one would be surprised how far it's possible to go simply by combining elementary shapes.
Writing something web from scratch is another world, and performances won't ever be close.
I wonder how many people there are with those skills. 1k, 10k? I'd be surprised if the figure was in the neighborhood of 100k.
Out of the pool of Gtk developers? That's basically saying "Have you done gtk and kept up to date?". It's not really the equivalent of the dreadful "5 years of experience in a JS framework that came out last October".
For a migration job, what else would you suggest as the initial requirements? Sounds okay, although they might have to go down if they find out that e.g. every gtk3 developer moved on to Qt, WinUI or Flutter...
(For generic, long-term positions I'm strictly against too specific requirements, by the way. Actual desktop UI experience would be great, though, even in our current sad state)
Being used more by linux doesn't change its nature, and plenty of stuff you never realized use it in many platforms.
I say this as someone using GTK and who was forced to contribute quite a lot of fixes for the macOS backend (in GTK2), because I was one of the few people using it in the way we do on macOS.
Will I sound like too much of a grumpy user if I express dismay at yet another protracted migration?
I think it's a little unfair of him to single out young developers, but I have seen the 1.x -> 2.x rewrite before too so he's not wrong overall. If you want to read the original article search for "The CADT Model" - I would link to the article but JWZ shows requests with referer "news.ycombinator.com" an image that you may not like if you're at work :)
edit: oh I just clicked the link someone posted (in a [Dead] comment), it seems he has removed the functionality I described
IMO anyone who has not configured their browser not to send cross-domain Referer headers deserves whatever they get. There is no user benefit for this privacy leak and browsers should have trashed it decades ago.
Yeah, though I think of “teenage” more as a mindset in this case.
We need a DE for legacy devices as XFCE's development is not a sure thing with further GTK+ releases tied to Gnome and Red Hat.
Rewriting a whole big library, not easy either way.
Your browser probably just doesn’t send the referer header to protect your privacy.
Invoked for the tendency to do rewrites instead of maintaining and bug fixing, since rewrites are more "interesting".
For context:
0: no restrictions/default
1: only send if base domain matches (i.e. news.ycombinator.com would only include the referrer for *.ycombinator.com links)
2: only send if entire domain matches (i.e. news.ycombinator.com would only include the referrer for news.ycombinator.com links)
I've used Inkscape since around 2008 and absolutely love it, but had to switch to affinity designer, because the gui is too slow to work with :(
But the UI performance is just too janky by modern standards, and I too bought Affinity Designer. But Affinity's UI suffers from some truly brain-dead design gaffes that they refuse to fix. I'd be psyched to see Inkscape become a real competitor.
I note the reference to OpenGL, but that has been dropped in Mac OS. I wonder if the Inkscape peeps have plans to address that.
I'm not familiar with Inkscape internals so I don't know how it renders the main window canvas, but Gtk nowadays IIRC uses OpenGL for rendering widgets. So the OpenGL comment may have been wrt that. And for rendering buttons and menus, the OpenGL-on-top-of-Metal, or however the macOS OpenGL implementation nowadays works under the hood, is probably good enough.
I worked around it once—I can't remember how now—and got Inkscape running without lag on my Mac, but it introduced another bug where it would crash when resizing a window. I got done what I needed to do then abandoned it. I doubt chasing down the fixes would take that long for someone with actual experience.
From one of the other comments here, apparently Affinity works with macOS Automator:
https://news.ycombinator.com/item?id=35651823
Not sure if that'd do enough for what you want though.
It struggles a little with this but I don't deal with 3d plots in Inkscape all that much:
https://upload.wikimedia.org/wikipedia/commons/1/1e/Saddle_p...
Then again it can be hard to tell. E.g. The converse is true for me for LibreOffice which used to be fine but crashes within a minute or two every time.
> I'm personally not sure that "user must have an ability to redefine every keyboard shortcut" [...].
[1]: https://gitlab.gnome.org/GNOME/gtk/-/issues/1669
Developers are users too. They are also arguably your most important users - they turn products into ecosystems, their involvement is a force multiplier for your platform. As Gnome is actively hostile towards their users, I'm not surprised they don't care much for third-party developers either (both inside and outside[2] of their ecosystem).
For a GUI toolkit, developers are the only users in one sense.
>> > I'm personally not sure that "user must have an ability to redefine every keyboard shortcut"
I'm not either, but I agree it sucks to just remove existing functionality. OTOH reading the thread it seems on MacOS you can define that outside the application, so integrating with that would be a requirement - did they do that before?
We get people wanting to redefine shortcuts sometimes and I'm just like "wow, can't people just accept the defaults? I'm not even sure how to go about implementing that, never mind on 3 platforms..."
My current UI complaint is corruption of the title bar. Gnome has allowed widgets up there now. Even if I accept the desire to use the space, some widgets can be used to drag the window while others can not. The primary purpose of clicking up there is to move a window and I can't tell if/where I can do that any more. BTW moving windows is important now with Wayland because Apps can't remember where they were and put themselves there on opening, and the Gnome guys haven't realized that's their job now. BTW I agree with the Wayland thinking on this, it's just that the DE hasn't caught up yet.
Also on Windows, MS has made some title bars white/grey and some blue. Same with toolbars. So now when I have multiple windows overlapping it's impossible to tell what is attached to what and what will move the window I want to move. It's like GUI designers think "oh I'd like this" but don't even consider the collateral damage the change will cause.
https://developer.gnome.org/documentation/tutorials/save-sta...
- Yay, one more half baked implementation of loading a file and reading it, with a bit of bad luck it'll be in C too. Surely this will not lead to problems!
- Yay, your app now probably has to bother with saving DPI info and restoring that properly when using a different screen with different DPI.
- Yay, your app now has to bother with not positioning the window out of bounds in case it was on another screen. Surely this will not lead to problems!
You have now added dependencies on displays, IO, parsing. To restore the window's position. Add in client side decorations in this mess to make it even better.
It is an OS/DE's responsibility to give me windows. I'll put whatever the hell I want in there, and it's my job to save that content, but pretending that saving window state is the job of the app is some peak clown shit. On a scale of how bad of a UI toolkit this puts you, you are now at "Win32". Congrats Gtk4.
> - Yay, one more half baked implementation of loading a file and reading it, with a bit of bad luck it'll be in C too. Surely this will not lead to problems!
The link I provided documents this exact process in 4 languages including C and JavaScript and all the saving/loading/parsing and even binding the managed settings to the properties of a window is handled for you by the toolkit. It is 1 function call to initialize the settings and 1 function call per setting to bind it to the window property you want to manage. Oh, and these settings can be configured externally with various tools or GUI's as well if you want to.
> - Yay, your app now probably has to bother with saving DPI info and restoring that properly when using a different screen with different DPI.
AFAIK this is not something the app developer has to do and is handled by the DE with maybe a little help from the toolkit.
> - Yay, your app now has to bother with not positioning the window out of bounds in case it was on another screen. Surely this will not lead to problems!
Nope, an app can only request windows with some requested size, and it's up to the DE/WM to place it. Take tiling window managers for example which might be configured to always open new application bottom right, or top left, or floating or whatever. Sure, an app might dig down into the lower levels to finetune behavior but then the app developer chooses to open this can of worms to make sure it still works with all flavors of DE's/WM's/X11/wayland/etc
> You have now added dependencies on displays, IO, parsing. To restore the window's position. Add in client side decorations in this mess to make it even better.
GTK already has these dependencies and abstracts them for you in higher level API's while still providing access to lower level API's if you choose to use them. (Gdk for displays, Gio for IO and parsing/saving/loading and binding to settings is in Gio as well). Client side decorations is a matter of choosing what base window type you use, so you can have default decorations or start with a blank slate.
I honestly don't know what you expect GTK to do more than it already does.
"The position of the window is best left to the window manager."
Why TF they think size is the apps problem but location is the WM problem is beyond me.
- It is the responsibility of the application developer to determine for each window what size it should be depending on the content in the window which can be dynamic. It's also not a fixed thing, but more a hint to the DE. The relevant GTK method is called gtk_widget_set_size_request(width, height) with the focus on "request" (defined in widget but window inherits it). Saving/restoring window state is left to the developer because of the dynamic nature of windows as explained above.
- It is the responsibility of the toolkit to make sure the window gets created and then communicate the requested size to the DE so it can be placed on the screen.
- It is the responsibility of the DE/WM to place this window where the user expects it and depending on the type of DE/WM it might have different behavior. For example a tiling window manager might be configured to always open new windows in the bottom right, or top left, or have config overrides for specific applications to always open floating or maximized.
So yes, the size is the apps problem (because it knows what content is on a specific window and might know about the previous window size from last time), and the position is the DE's responsibility because that can depend on user configuration and the specific DE/WM used. The app cannot make any assumptions about that. It can only request windows with a specific size.
Because of the dynamic nature of opening windows, app developers should have control over storing/restoring the window size. Simple apps might always store the last window size and restore that exact size on startup. Other apps might have to run some logic first before they know how large the window should be, and then request the toolkit to create a window of that size.
The way this works on macOS is every application defines the top bar menu actions (which can be referenced by their name, e.g. "New Tab", "Copy", etc), and any of these actions can then be referenced by specific keyboard shortcuts - either system default, as defined by the app, or as re-defined (app-specific, or system-wide) by the user. Any redefining can be done in the System Preferences (now Settings) app, so as long as your app uses the system menu, your users get arbitrary user-defined shortcuts for free, with zero extra effort on your side.
This applies to every keyboard shortcut - you can redefine Cmd-C to Ctrl-C if that's what you like. I just checked it and it works. It even does the most sensible thing in Terminal (copies text if something is selected, and sends interrupt otherwise).
I've also checked this right now in Gimp (Gtk2) and Inkscape (Gtk3), and both apps support this functionality on macOS, so I think what the developer referred to here was specifically user-defined shortcuts in Gtk CSS - which leaves Gtk4 on the open source desktop as THE platform that now doesn't support it in any way anymore.
I'm pretty disappointed as before switching to a Mac, I spent almost 15 years on Linux/BSD, and got used to being able to customise anything - with enough hackery, nothing was out of reach. All I actually want is not customisation, but consistent keyboard shortcuts between Linux and Mac. It's pretty disheartening that it's easier to make Mac shortcuts work like on Linux than vice versa.
> We get people wanting to redefine shortcuts sometimes and I'm just like "wow, can't people just accept the defaults? I'm not even sure how to go about implementing that, never mind on 3 platforms..."
On macOS, you have to actually go out of your way to NOT support that. I don't think I've ever seen anything like Mac's shortcut system on Windows or Linux, but this is why things like gtk-key-theme and key bind properties in Gtk CSS have always existed.
And this is precisely the value of a cross-platform toolkit, it is supposed to help you (the application developer) not think too hard about these platform specific details, and provide the user with an escape hatch when they have a case you didn't think about (I'm a big fan of stylish/custom CSS for this reason).
> Also on Windows [...]
I think the situation on Windows has already been steadily turning dire by the time of XP, and hit an inflection point with Vista. I don't even mind a new look sometimes, but for goodness sake, clean up your mess MS...
As developer of another open source project that uses GTK2, I'd note that one of the beautiful things about open source is that for the most part, we do not have to keep up. Worst comes to worst, we dump GTK2 into our source tree ("vendoring") and keep using it.
There are hundreds to hundreds-of-thousands of applications that do not have a native Wayland version? Are you suggesting that you would not run any of them either?
There's complexity in each domain for sure but maybe it is more a matter of demand and supply that impacts this? There's less software being written in C++ with GTK than there are enterprise (or otherwise commerce etc) backend and frontend being written.
"Hiring a senior C++ developer with GTK experience is costlier"
I think you are confusing skill valuation, and operational productivity. Some have an erroneous notion talent is interchangeable. Likewise, applicants with identical base skill-sets on their CV often mistakenly believe they even have long-term employment options (outsourced, youth tax credit churn, and or senior wage suppression).
Most FOSS people are easier to train, as most already can mitigate utter chaos already. =)
Conversely, I have seen Python code bases that are so much of a horror show that you'd question why someone would do such a stupid thing in first place?
The thing is - they didn't do a stupid thing. They didn't know any better.
Experience tells one when it is time for a change.
It has also been my experience, no amount of compensation/background can make someone care about a project. =)
If you just know one language, then you probably are pretty junior.
The fragmentation on Linux desktop causes a lot of churn, both in users looking for more cohesive desktop experiences, and on developers looking to not having to deal with all this mess.
In regards to major backwards-incompatible version changes, to me it's pretty clear that many developers simply don't give enough priority to maintaining backwards compatibility. Most cases i've seen of backward-breaking changes were unnecessary: the new features could've been added while maintaining the existing APIs (maybe deprecating them if needed). The decisions to not maintain the existing (and now deemed "old") APIs were not done on a technical ground, but more on an ideological/purist ground, where the "old" APIs were considered "bad" or too costly to maintain (both claims totally subjective and not supported by much evidence). And simply not enough thought was put in considering how users of the APIs may find it difficult to do a major version update, or might simply churn away and not do the update or look for an alternative.
Now, i don't have direct experience with GTK, so i might be totally bullshitting and maybe nothing that i said applies to GTK major version bumps. But the fact that so many projects find it hard to update and are stuck on older versions for long times, and that the desktop UI paradigm hasn't changed that much in the last 20 years (how much MUST the APIs for windows and UI controls change then?) makes me suspect that there is at least a bit of that backwards-compatibility disregard here too.
GTK3 with its half-assed support of CSS for theming is just just bad, and slow (especially on Macs)
And they continued to change GTK3 API after 3.0, which did not exactly help
If anything, Linux libraries move too slow. Meanwhile, while seeking perfection, the world around them uses the older releases, with all the downsides it entails, so they cannot wait until it is perfect.
> GTK3 with its half-assed support of CSS for theming is just just bad, and slow (especially on Macs)
Still much faster than Cocoa on Linux... What Cocoa on Linux? Exactly. Availability of Gtk on a Mac has 0 impact on how many Linux app will decide to use it.
> And they continued to change GTK3 API after 3.0, which did not exactly help
They added (and yes, deprecated APIs). Nothing that would affect existing applications. Themes were never part of the API and there was a warning, that it is going to change. If someone has to find the hard way, so be it.
I sometimes consider using GTK as a cross-platform GUI vs what we do today (a small wrapper over Windows, macOS, and GTK) so we can have some nice things - like resizable text and SVG icons. Not supporting macOS would mean not using GTK for that. At the moment, no static linking means no GTK for that too because we ship a single binary for Windows and I don't want to deal with an installer.
GTK4 seems to be better and at least it can be fast
Not here to start a flame war. And I know about https://apps.kde.org/karbon/
But nothing matches Inkscape in features: I learned it years ago and still use it every couple of months.
I wanted to report this, but the project uses GitLab's issue tracker. I recall being unable to sign up for a GitLab account using a throwaway email address at the time, so I couldn't report the problem, or even add information later on to the bug reports that others eventually created.
The project really should make it easier for users to contribute bug reports.
I would suggest that they don't have the resources to make it usable. I suspect this move the GTK4 could help the performance on mac.
There was an attempt to have Cairo use OpenGL but it was mostly unsuccessful and abandoned. Even if that worked the paradigms used are very different and would fight performant GPU usage.
I would pay for porting back to GTK2.