-
Pl
chevron_right
Toluwaleke Ogundipe: GSoC Final Report: Printing in GNOME Crosswords
news.movim.eu / PlanetGnome • 22 October • 3 minutes
A few months ago, I introduced my GSoC project : Adding Printing Support to GNOME Crosswords . Since June, I’ve been working hard on it, and I’m happy to share that printing puzzles is finally possible!
The Result
GNOME Crosswords now includes a Print option in its menu, which opens the system’s print dialog. After adjusting printer settings and page setup, the user is shown a preview dialog with a few crossword-specific options, such as ink-saving mode and whether (and how) to include the solution. The options are intentionally minimal, keeping the focus on a clean and straightforward printing experience.
Below is a short clip showing the feature in action:
The resulting file: output.pdf
Crosswords now also ships with a standalone command-line tool,
ipuz2pdf
, which converts any IPUZ puzzle file into a print-ready PDF. It offers a similarly minimal set of layout and crossword-specific options.
The Process
- Studied and profiled the existing code and came up with an overall approach for the project.
- Built a new grid rendering framework, resulting in a 10× speedup in rendering. Dealt with a ton of details around text placement and rendering, colouring, shapes, and more.
- Designed and implemented a print layout engine with a templating system , adjusted to work with different puzzle kinds, grid sizes, and paper sizes.
- Integrated the layout engine with the print dialog and added a live print preview .
-
Bonus:
Created
ipuz2pdf, a standalone command-line utility (originally for testing) that converts an IPUZ file into a printable PDF.
The Challenges
Working on a feature of this scale came with plenty of challenges. Getting familiar with a large codebase took patience, and understanding how everything fit together often meant careful study and experimentation. Balancing ideas with the project timeline and navigating code reviews pushed me to grow both technically and collaboratively.
On the technical side, rendering and layout had their own hurdles. Handling text metrics, scaling, and coordinate transformations required a mix of technical knowledge, critical thinking, and experimentation. Even small visual glitches could lead to hours of debugging. One notably difficult part was implementing the box layout system that powers the dynamic print layout engine.
The Lessons
This project taught me a lot about patience, focus, and iteration. I learned to approach large problems by breaking them into small, testable pieces, and to value clarity and simplicity in both code and design. Code reviews taught me to communicate ideas better, accept feedback gracefully, and appreciate different perspectives on problem-solving.
On the technical side, working with rendering and layout systems deepened my understanding of graphics programming. I also learned how small design choices can ripple through an entire codebase, and how careful abstraction and modularity can make complex systems easier to evolve.
Above all, I learned the value of collaboration, and that progress in open source often comes from many small, consistent improvements rather than big leaps.
The Conclusion
In the end, I achieved all the goals set out for the project, and even more. It was a long and taxing journey, but absolutely worth it.
The Gratitude
I’m deeply grateful to my mentors, Jonathan Blandford and Federico Mena Quintero , for their guidance, patience, and support throughout this project. I’ve learned so much from working with them. I’m also grateful to the GNOME community and Google Summer of Code for making this opportunity possible and for creating such a welcoming environment for new contributors.
What Comes After
No project is ever truly finished, and this one is no exception. There’s still plenty to be done, and some already have tracking issues . I plan to keep improving the printing system and related features in GNOME Crosswords.
I also hope to stay involved in the GNOME ecosystem and open-source development in general. I’m especially interested in projects that combine design, performance, and system-level programming. More importantly, I’m a recent CS graduate looking for a full-time role in the field of interest stated earlier. If you have or know of any opportunities, please reach out at feyidab01@gmail.com .
Finally, I plan to write a couple of follow-up posts diving into interesting parts of the process in more detail. Stay tuned!