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.
Screen recording in the new screenshot UI