The document discusses the "magic" behind Tux Paint, an open source drawing program for children. It describes how Tux Paint provides tools for drawing, shapes, text, stamps, and effects through plug-ins. It also summarizes how Tux Paint handles text input in different languages, scales images, renders UI text in localized languages, and more. The presentation aims to illustrate the technical details and code behind the user-facing features of Tux Paint.
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0 ratings0% found this document useful (0 votes)
226 views
The Magic Behind Tux Paint
The document discusses the "magic" behind Tux Paint, an open source drawing program for children. It describes how Tux Paint provides tools for drawing, shapes, text, stamps, and effects through plug-ins. It also summarizes how Tux Paint handles text input in different languages, scales images, renders UI text in localized languages, and more. The presentation aims to illustrate the technical details and code behind the user-facing features of Tux Paint.
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 16
The Magic Behind Tux Paint
● Bill Kendrick, Lead Developer
All of the important things Tux Paint does
behind the scenes, and transparent to the users.
Sacramento Linux Users Group
June 11, 2009 Background: What's Tux Paint? ● Drawing program for children ● Open Source (GPL) ● Written primarily in C ● Targets the Simple DirectMedia Layer API ● Ports kept up-to-date for Windows (back to Win95), Mac OS X, BeOS and Linux ● Started in June 2002 ● Part of “Tux4Kids” Background: What does it do? ● Drawing (brushes, colors) ● Lines & shapes ● Text ● “Rubber Stamps” (clipart/photos) ● “Magic” tools (variety) ● Save/Load/Print/Un-/Redo ● Easy to use ● Highly configurable What's the Magic? ● Magic tools (duh!) lots of visual effects plug-in API system ● Text tool Input methods bidirectional ● Stamps Scaled PNGs SVGs Tinting ● UI text Localized (80+ languages) Nicely rendered Note on presentation slides ● I'll be interrupting these slides to dig into the source code in an editor and talk about them ● If you're not at this SacLUG meeting, sorry you missed it! Notable Magic Effects ● Bricks & Rails ● Calligraphy ● Flower & Tornado ● Real Rainbow ● Fisheye & Ripples ● Blur & Smudge Magic API ● Callback-driven API based on events: click, drag, release, color / tool change ● Write code in C, build as a shared object (e.g., “.so” on Linux). ● Use 'tp-magic-config' script to compile/install ● See a full presentation at: http://tuxpaint.org/presentations/tuxpaint-magic-api.pdf Text Tool – Input Methods ● Rolled out own ● Japanese ● Chinese (Traditional) ● Korean ● Thai ひらがな Text Tool - Bidirectional ● Using FriBidi... ● Grab Unicode characters from libSDL ● Pass them along to Input Method handler ● Construct string of wchar_t[] ● Cast wchar_t's to FriBidiChar's ● Send it to fribidi_log2vis() ● Cast FriBidiChar's back ● Display! العربيEnglish עבְר ִית ִ Stamps – Scaled PNGs ● Bilinear scaling (optional) ● Sample 4 pixels around the 'in-between' spot (subpixel) ● Blend them, adjusting for how much they contribute (i.e., how close they are to the subpixel) ● Based on: http://www.codeproject.com/cs/media/imageprocessing4.asp ● See also: http://en.wikipedia.org/wiki/Bilinear_filtering Stamps - SVGs ● Old way: libcairo1, libsvg, libsvg-cairo (based on example SDL code in Cairo project, from 2004) ● New way: libcairo2, librsvg, librsvg-cairo ● Ask libraries to render the SVG into a memory buffer ● Create a new SDL surface from that buffer ● Let them scale cake! Stamp Tinting ● ... stuff I didn't write (Thanks, Albert!) ● We can look at it, at least. UI Text Localization ● gettext and .po files ● Python tools to manage Stamp localization (.po↔.txt) ● Bash scripts and PHP to maintain translation status on website http://www.tuxpaint.org/help/po/ ● Some strings used for 'scoring' fonts for the Text tool (“can this font show characters important for the current locale?”) UI Text Rendering ● SDL_ttf was the old way ● SDL_Pango is the new way ● Wrapped SDL_ttf “TTF_Font*” and SDL_Pango “SDLPango_Context*” in a structure, “TuxPaint_Font”. ● Wrote lots of #ifdef'd management code, then was mostly a matter of search and replace: s/TTF_Font/TuxPaint_Font/g Get Tux Paint ● Website http://www.tuxpaint.org/ ● SourceForge.net http://www.sf.net/projects/tuxpaint/ ● Download builds / Download/find packages http://www.tuxpaint.org/download/ ● Download source from CVS repository http://tuxpaint.org/download/source/cvs/ ● Mailing lists, IRC, etc., too! Thanks & happy painting coding ● Bill Kendrick [email protected] ● You can also find me at: the Linux Users' Group of Davis http://www.lugod.org/ ● Day job: CTO & Lead Dev at: Smashwords, Inc. http://www.smashwords.com/
Modern Tkinter for Busy Python Developers: Quickly Learn to Create Great Looking User Interfaces for Windows, Mac and Linux Using Python's Standard GUI Toolkit