As part of Google Summer of Code 2018, I worked on the project Pitivi: UI Polishing. This is my final report to showcase the work that I have done during the program.
I worked on the issue #1302 to integrate Pitivi’s welcome dialog box into its main window and display projects in a more informative, discoverable, and user friendly layout. This is how Pitivi greeted users before I started working on the issue:
My first task was to remove the welcome dialog from Pitivi and integrate a simple greeter perspective that displays the name of recent projects in a listbox with all the relevant buttons placed in the headerbar. This was a big task and took nearly 5 weeks to complete. The main challenge of this task was to understand the big codebase of main window and refactor it. The refactoration lead to the following architectural changes:
In the the new architecture, I have developed a perspective based system which allows easily adding more perspectives to Pitivi. Every class has single responsibility in the new architecture as opposed to everything being managed by main window in the previous architecture.
I also did some code clean up to conclude my greeter perspective’s integration:
- Remove unused “ignore_saved_changes” param from newBlankProject() function in project class – b2f19ea3
- Make newly added shortcuts available when users upgrade Pitivi – 8b3a691a
- Move dialog for locating missing asset to dialogs package – c08007a8
- Remove directly called callback methods – 7a8d23ba
- Remove project title functionality because we only care about project file name – 4ea9d89f
My next task was to display meta info regarding a project such as its directory and last updated timestamp in the greeter perspective. !43 is the merge request for this change and ff672460 is the committed code. This is how the greeter perspective looked like after this change:
My next task was to show a welcome message on greeter perspective when there are no recent projects. !44 is the merge request for this change and d9c8f6c8 is the committed code. This is how the empty (no recent projects) greeter screen looks like:
Finally, I added the following to greeter perspective:
- “Search” feature for easy browsing of recent projects, and
- “Selection” feature for removing project(s) from recent projects list.
After resolving issue #1302, I worked on the issue #1462 to integrate project thumbnails in greeter perspective. The main idea behind these thumbnails is to give the user a hint what a certain project is about. The main challange of this task was to come up with a simple and robust algorithm for thumbnail generation (link). More details about our project thumbnail generation approach can be found here.
I also made the following optimizations to project thumbnails (!54):
- Use assets thumbnails if no thumbnails are present in XDG cache – cb47d926
- While opening greeter perspective, defer loading of project thumbnails until the main thread is idle – 37c973e1
So this is how the greeter perspective looks finally after all these changes:
After wrapping integration of project thumbnails, I added the following features to greeter perspective:
- Right click on a recent project to select it and start selection mode – !67 is the merge request and 6db06472 is the committed code
- Drag & drop a project file from Nautilus onto greeter to open it – !68 is the merge request and 817d885a is the committed code
Next, I worked on the issue #1816 to allow video viewer resizing.
The first task was to integrate a marker on the bottom left corner of the viewer container to allow for easy resizing of the viewer. !60 is the merge request for this change and 25609f3a is the committed code.
Work in Progress…
Two more tasks are left under issue #1816:
- Displaying resize status (in %) over slightly dimmed video, and
- Snapping of viewer to 100% and 50% if the current resize status is between [100%, 100% + Δ ] and [50%, 50% + Δ ] respectively.
I have submitted a merge request !70 for review for both these tasks.
I would like to thank my mentor Alexandru Băluț (aleb) for his help and guidance throughout this project. I would also like to thank all other members of GNOME community who helped me along the way. This turned out to be an amazing summer for me with lots of learning and fun. I will continue to contribute to Pitivi as I feel like this is just the beginning of many exciting things yet to be done in Pitivi to make it the best video editing application.
Until next time 🙂