Notes from the first day
(decisions and concrete tasks marked in bold)
Some idle chatter in the morning around GL and tools - gputop was mentioned. Matthias built it but couldn't get it to produce any useful output. Lionel is here this weekend, and we should make sure to get him to explain gputop to us.
Emmanuele was looking at our open questions, and said YES! to dropping thread support and to reducing the number of X extensions that we are making conditional.
We briefly touched on modules and want to always build in platform input modules, but probably still support loading other ones if they are around. For print backends, we may need to keep the module loading as well, for dependency reasons (json-glib for cloud, cups for cups). But we should drop papi and test and maybe lpr.
To investigate: can we turn this into a gio extension point ?
Discussion of coordinates: application vs device. Decision: gdk is always in device pixels, gtk toplevels translate to application pixels. This affects gdkmonitor and gdkwindow, mainly. gsk render nodes are in application pixels, the gsk renderer translates to device pixels.
questions here: who is responsible for resizing windows when we move between outputs with different scales ?
Moving windows between displays is currently broken, but fixable. We should fix it, probably. Open question: do we actually want to make display closing/opening work and fix it ?
We should drop gdk_disable_multidevice and the core x device manager implementation.
We should stop building without X extensions that are reasonably established, and Wayland extensions as well.
Clipboard and DND gets presented by Benjamin Clipboard modernization is done, with GdkClipboard. DND is still a work in progress. After Benjamin is done with the GDK parts, we need to clean up GtkSelectionData, create gestures for starting drags and accepting drops, and redo the event propagation for this.
Event handling gets presented by Carlos
Plan for the legacy controller: move the ::event signal there, don't create them by default. Idea: we could have a gesture for triggering a context menu. Plan for key events: use capture-bubble like we do for other events, use focus widget as target. Benjamin describes how he envisions this working for all kinds of events, generating enter-leave events when we change targets. Hi-level gestures we should add: drag/drop, context-menu. We want to drop GtkBindingSet and keybinding signals and the css theming machinery, and instead use a gesture.
Benjamin presents GdkTexture. Currently exists for cairo surfaces, pixbufs and GL textures. We discussed the possibility of having an icon texture that hides the icon-theme machinery. Emmanuele brings up language bindings problems for this api. Suggestion: add gdk_texture_download_as_bytes
As an aside, we currently don't have animated css backgrounds. Doing this is a bit complicated (it needs the css machinery to deal with 'self-changing' values). This is needed to support a) gifs b) shaders c) movies. Benjamin outlines his idea for having a GdkVideoTexture that would take separate textures for y,u,v (or a single texture that combines the 3 planes in a well-defined way)
Benjamin explains size allocation changes. Widget size allocations are now always relative to the parent widget, not the parent or toplevel window. Widget coordinates are always content - the css stuff is outside. The size_allocate vfunc is only called when the content size changes. 3 styles of api:
- widget talks about itself
- widget talks about direct child
- widget talks about arbitrary other widget
We need to add a matrix argument to get transformations into this. Too many (wrong) allocation apis: gtk_widget_get_allocation gtk_widget_get_own_allocation gtk_widget_get_outer_allocation gtk_widget_get_padding_box gtk_widget_get_width/height
Emmanuele interjects that we should be able to write a CoreAnimation renderer. Benjamin suggests that most of our gdk backended objects, it would be nice to have default implmentations of the vfuncs that do as well as they can (in doubt, do nothing).
We should just do the G_DECLARE_TYPE boilerplate reduction.
We should ask the mir people to update the mir backend and tell them that it will be removed before the next release if nothing happens.
Talking about snapshots - conclusions:
Don't move GtkSnapshot to gsk
- Replace init/finish by new/free and make it public
Cursors. Animated cursors don't work anymore. We didn't hook up css cursors to our cursor setting, since it rarely makes sense.
GLib intermission: We talked about 2.58 plans and getting more maintainers.
- A composite entry example, recreating something like the firefox location entry with tags and icons and dropdowns - this can be done now
- Shadertoy - requires Benjamin to finish a lot of plumbing around his shader compiler first
- A zooming scroll view
- Port the map view from gnome-maps
- Redo the mirrored entry gtk-demo example using gsk
OpenGL renderer status: OpenGL ES almost works. Known issues:
- colors get mixed up
- text does not work
- compiling shaders and creating GL contexts is really slow on Timm's system
The necessary swizzling for the color mismatch was identified