Student Project Ideas
If you are interested in participating in the Google Summer of Code program with wxWidgets, we have prepared a list of some potential projects you could work on below. Please see our main Summer of Code page for details on how to apply.
Please notice that this list is not exclusive, ie that you can submit proposals to work on projects which are not listed here -- but please post to wx-dev mailing list to discuss them first if you plan to do this.
Notice that the projects are sorted roughly in order of their importance:
- wxAndroid: Start the work on a port to Android.
- wxiOS: Continue the porting project started during GSoC 2011.
- wxUniv: Bring the wxUniv port up to current wxWidgets standards.
- Multi-touch gestures support: Support for multi-touch gestures.
- Direct2D-based wxGraphicsContext: Provide an implementation of wxGraphicsContext for Windows using Direct2D.
- Windows 7 Taskbar: Add support for various advanced taskbar features available since Windows 7.
- Power Management: Cross platform support for power management events.
- Cross Platform System Sound: Provide a way to play various "system sounds".
- Cross Platform Animation: Finish the implementation of the animation API started during GSoC 2011.
- Several wxWebView-related projects:
- Features switches: Make wxWebView more flexible to allow using it as a general purpose display control.
- Chromium: Integrate and extend the Chromium backend.
- Cookies and Downloads: Add support for managing cookies and handling file downloads.
- wxRichTextCtrl RTL Support: Support right-to-left languages and BiDi in wxRichTextCtrl.
- wxAUI Native Art Providers: Make wxAUI blend in better with native rendering methods on each platform.
Alternatively, you could decide to select a project depending on your background, so that if you are a...
- Windows programmer -- then you could help us with Direct2D-based wxGraphicsContext or the taskbar improvements
- Linux hacker -- then you could be interested in cross-platform power management or system sound projects.
- Mac guru -- then, in addition to the two projects above, you could be interested in wxiOS.
- Mobile enthusiast -- then either wxAndroid or wxiOS could be exciting for you.
- Somebody else -- tell us what could be interesting for you!
Create minimally functional Android port.
The goal of this project, or projects, as there could be more than one student working on this, would be to start a wxAndroid port, i.e. an implementation of wxWidgets API targeting the Android OS. It is infeasible to fully write such a port in the GSoC time frame, but we believe that a motivated student could provide a good foundation for such port and, ideally, something at least minimally working.
The plan is to start by implementing the low-level classes needed by all
wxWidgets applications, such as
wxEventLoop and a few others. Once this is done it should be possible to use
wxGLCanvas to write Android applications using OpenGL for their graphics.
The next step could be to either implement more low-level classes such as the
GDI classes (
wxBitmap or the corresponding
wxGraphicsBitmap) and use the wxUniversal port for the GUI controls, or start
implementing the GUI controls using native equivalents. In any case, the
student definitely would not be expected to fully finish this part.
Providing access to native Android API from C++ for wxWidgets needs, which would be required for the native controls use, could be a separate project in its own right. It would consist in either improving one of the currently existing tools, such as CLE, cppjvm, JACE or JCC or writing a new one to allow easily creating and using Java objects, including overriding their virtual methods, from C++ code.
Vadim Zeitlin, Bryan Petty
Some knowledge of the Android API would be definitely useful.
Improve wxiOS port
A previous GSoC project has created the basics of a wxWidgets port to iOS. The task for this year would be to make this port really usable and complete the missing parts.
In particular the wxiOS branch, in which all the work had been done up to now, would need to be merged into the mainline and all standard controls would need to be implemented. Note that part of this project -- which ideally should be done before submitting the proposal to work on it -- would consist of building the existing wxiOS sources and ascertaining its current state.
Stefan Csomor, Václav Slavik
Familiarity with Cocoa/iOS.
Fix bugs and implement missing features in wxUniversal
wxUniversal is a special wxWidgets port which implements high-level GUI controls using wxWidgets itself instead of wrapping the native toolkit as all the other ports do. It is useful for platforms which don't have their own native UI (such as e.g. DirectFB) or those in which the native UI is difficult to wrap (see the discussion of wxAndroid project).
Unfortunately wxUniversal hasn't got much attention for many years and the changes elsewhere in wxWidgets have introduced quite a few bugs in it. Also many relatively recent controls are not implemented.
An incomplete list of known problems that would need to be corrected includes:
- Fix several appearance bugs seen in wxX11 port, such as too big padding for
the buttons, wrongly drawn borders for many controls, occasional drawing
artefacts such as failure to invert the selection in
wxButtonand related classes should be refactored to inherit from
wxAnyButtonas in the other ports.
wxMenucode needs to be updated to handle mouse capture loss/change events correctly.
wxSlidershouldn't result in a crash.
- Implement support for popup windows and provide
wxTooltipimplementation using it.
- Update the existing theme or write a new one to provide a less dated than the currently used "classic Windows"-like appearance.
- Update the code to avoid using
wxDeprecatedGUIConstantswhich result in hundreds of warnings when building it currently.
More problems might be discovered while working on this project.
Some prior experience with wxWidgets would be helpful, as with any other project, but no platform/toolkit-specific knowledge is needed for this task.
Support multi-touch gestures
The goal of this project is to generate wxWidgets events for the multi-touch gestures recognized by the underlying system and, possibly, also the raw touches which compose them. But it's adding support for the high level events, such as "zoom", "pan" or "rotate" which is the most important part of this project.
Modern desktop systems all support sending such events but do it in different ways, so the first part of this project will be to find a subset of events and information carried by them sufficiently rich to be useful, yet also supported by more than one, and ideally by all three, major platforms.
Eric Jensen, Stefan Csomor
Ability to work with more than one platform is definitely required.
Implement wxGraphicsContext using Direct2D
Currently, wxGraphicsContext is implemented using GDI+ under Windows. GDI+ seems, unfortunately, to be abandoned by Microsoft and has a lot of problems including generally very poor performance (as it is not hardware-accelerated at all) and horrible text rendering, especially at small font sizes.
Since Windows 7 (and Vista with updates installed) another solution is available: Direct2D. This project would consist of implementing a new wxGraphicsContext backend using this new API, and its companion DirectWrite for the text output.
Windows, COM (at a basic level), Direct2D itself would be great but can be learned during the project.
Add support for Windows 7 taskbar features
Windows Vista/7 has added support for several new features to the task bar which are all accessible via ITaskbarList3 interface:
- Overlays: example
- Buttons: example
- Progress display
- Custom, possibly live, thumbnails: example
- More control over grouping: example
- Jump lists.
None of these features have equivalents under the other platforms, unfortunately, but it would be nice to be able to make use of them at least under Windows.
Windows, COM (at a basic level).
Power management under non-Windows platforms
wxWidgets has support for power events but it's currently only implemented on Windows and doesn't work for Vista and later systems right now, e.g. it's impossible to prevent the system from suspending in this way (which was used until Windows XP) any more. The goal of this project would be to update power management support for Windows Vista/7 (which is simple to do, see this thread) and, most importantly, also implement them for Linux and/or OS X. This will include devising an API which can be implemented on all platforms and actually implementing it for Windows and at least one of Linux/OS X (and ideally both).
Paul Cornett, Stefan Csomor
Linux part will require the use of DBUS and/or DeviceKit so experience using them would be handy. OS X part obviously would be easier with some prior experience with this platform (foundation level) API.
Cross-platform animation support
Animations are becoming and more important in the modern UIs but are not yet supported by wxWidgets. The goal of this project would be to allow simple to use cross-platform (including falling back to suppressing animations entirely on the systems that don't support them) API for animating parts of the program UI.
This project has been started during GSoC 2011 but never brought to completion. The goal would be to revisit the work done so far and finish the implementation of it for Windows and Cocoa.
Notice that in 2011 there was no simple way to support animation with GTK+, but if this has changed since then, working on GTK-specific implementation would be welcome too and could replace Windows or Cocoa part of this work.
Cross platform support for playing system sounds
wxWidgets provides a
wxBell() function which is as simple as it gets and the
wxSound class which allows sound files to be played but requires the file (or
sound data) to be present and produces the same result under all platforms
(meaning that it won't sound good on any of them). The goal of this project
would be to provide a way to play various "system sounds" in a simple and
portable way and respecting the user settings (in particular, not play anything
at all if the sound effects are turned off).
Difficulty is 5 is for a minimal usable implementation, 7 for something sufficiently powerful to represent libcanberra API while still being implementable on the other platforms.
Experience with the platforms being targeted would be welcome.
- Windows example (not sure if this is the best way though)
- OS X system sound reference
- libcanberra from Freedesktop, i.e. modern Linux systems.
Make wxWebView more configurable
The goal of this project would be to add the necessary API to allow for such "controlled" use of wxWebView. Notice that ideally this would need to be done for all three of the existing backends, ie Internet Explorer, WebKit and Chromium, and at the very least for the first two.
Steven Lamerton, Vadim Zeitlin
Any experience with using
IID_IWebBrowser and/or WebKit would be helpful.
Integrate and extend the Chromium backend
Steven Lamerton, Bryan Petty
Knowledge of Chromium would be a plus.
wxWebView currently provides a simple
RunScript() function for running
would be required that ensures uniform behaviour across the different backends.
Before applying for this project please contact the wx-dev mailing list as
further research is required.
Steven Lamerton, Vadim Zeitlin
wxWebView Cookies and Downloads
Currently wxWebView does not support cookies. This has been implemented as a GTK+ specific patch, but this is not useful for a cross-platform library. The idea here would be to implement a cross-platform API for this that supports at least GTK+, Windows, and OSX - covering "the big three" platforms usually required for new additions to wxWidgets.
Additionally, wxWebView has no way of managing file downloads. At a minimum, we would require a download request event available to be tied into, but ideally providing a full API for managing multiple downloads, and tracking status is desired.
Considering how similar these two projects are, and the approximate time required to implement both, the proposal here is to join both tasks into one potential project for Summer of Code.
Steven Lamerton, Bryan Petty, Stefano Mtangoo
Any experience with using
IID_IWebBrowser and WebKit would be helpful.
Right-to-left languages support in wxRichTextCtrl
The goal is to support right-to-left languages such as Hebrew, including support for composing individual diacritics from within wxRichTextCtrl.
This will also require improving support for the entry of Unicode characters in wxWidgets globally, ie adding events for various IME actions and so would be useful even for the programs not using wxRichTextCtrl.
Julian Smart, Vadim Zeitlin
Good knowledge of Unicode and BiDi would be helpful. Knowledge of IME under different platforms is also needed.
Native art providers for wxAUI
The goal is to make wxAUI blend in better on a set of platforms, particularly on Mac, GTK+ and Windows 7. The original wxAUI art is rather Windows XP-like and it should be possible to take colours from the current theme and apply them to wxAUI. Mostly this will be writing separate art provider classes, but occasionally it may be necessary to dig deeper into the wxAUI code.
No platform-specific experience is needed as the art provider should behave in the same way under all platforms.
- The ribbon classes, implemented as a GSoC 2009 project, has customisable art and demonstrates a Vista/Windows 7-like art mode.
- wxRendererNative documentation