Over the summer I worked on implementing the new screenshot UI for GNOME Shell as part of Google Summer of Code 2021. This post is an overview of the work I did and work still left to do.
The project was about adding a dedicated UI to GNOME Shell for taking screenshots and recording screencasts. The idea was to unify related functionality in a discoverable and easy to use interface, while also improving on several aspects of existing screenshot and screencast tools.
Over the summer, I implemented most of the functionality:
- Capturing screen and window snapshots immediately, letting the user choose what to save later.
- Area selection, which can be resized and dragged after the first selection.
- Screen selection.
- Window selection presenting an Overview-like view.
- Mouse cursor capturing which can be toggled on and off inside the UI.
- Area and screen video recording.
- Correct handling of HiDPI and mixed DPI setups.
I opened several merge requests:
- The main GNOME Shell merge request with the screenshot UI.
- A Mutter merge request adding a function to snapshot the screen into a GPU texture.
- A Mutter merge request adding a function to get the scale of the cursor texture, required for correct mixed DPI handling.
I expect that Mutter merge requests won’t require many further changes before merging. The screenshot UI however still has some work that I will do past GSoC, detailed in the main merge request. This work includes adding window selection support for screen recording, ensuring all functionality is keyboard- and touch-accessible, and working with the designers to polish the final result. GNOME 41 is already past the UI freeze, but GNOME 42 seems to me like a realistic target for finishing and landing the screenshot UI.
For the purposes of GSoC, I additionally made two frozen snapshots of work done over the GSoC period that I will not update further: three commits in this mutter tag and 16 commits in this gnome-shell tag.
I also wrote several blog posts about my work on the screenshot UI:
- GSoC 2021: GNOME Shell Screenshot UI, an introduction post showing the panel and the initial implementation of area and screen selection.
- GSoC 2021: Selection Editing and Window Selection, a post showcasing handles for resizing the area selection, a better animation for opening the UI and window selection implementation.
- GSoC 2021: Screenshots with Pointer, a post that details how I implemented showing mouse cursor on the screenshots and explains the challenges arising from mixed DPI.
Additionally, I gave a short presentation of my work at GUADEC, GNOME’s annual conference.
Over the course of this GSoC project I learned a lot about GNOME Shell’s UI internals which will help me with GNOME Shell contributions in the future. I enjoyed working on an awesome upgrade to taking screenshots and screencasts in GNOME. For me participating in the GNOME community is a fantastic experience and I highly recommend everyone to come hang out and contribute.
I would like to once again thank my mentor Jonas Dreßler for answering my questions, as well as Tobias Bernard, Allan Day and Jakub Steiner for providing design feedback.