| 66 | | See [HackingGtk the hacker's guide to WebKit/GTK+]. |
| 67 | | |
| 68 | | == Code layout == |
| 69 | | |
| 70 | | The GTK+ port targets the cross-platform GLib and GTK+ APIs. This means that it can be built against any of the windowing systems supported by GTK+ and Cairo without modification -- those tested so far are X11 and DirectFB. Windows should work too, possibly needing a couple of tweaks. |
| 71 | | |
| 72 | | This means that developers adding code specific to a certain windowing system should make sure their changes are conditionally compiled only when that windowing system is available. This might be done at configure time or with a switch passed to the build system, or even just using the definitions provided by the gdk headers. |
| 73 | | |
| 74 | | The main components of the port: |
| 75 | | |
| 76 | | === Gtk+-specific modules === |
| 77 | | |
| 78 | | * Gtk+/Gtk UI platform: [http://trac.webkit.org/projects/webkit/browser/trunk/WebCore/platform/gtk WebCore/platform/gtk] |
| 79 | | |
| 80 | | * "Page/Gtk": [http://trac.webkit.org/projects/webkit/browser/trunk/WebCore/page/gtk WebCore/page/gtk] |
| 81 | | |
| 82 | | * "Loader/Gtk": [http://trac.webkit.org/projects/webkit/browser/trunk/WebCore/loader/gtk WebCore/loader/gtk] |
| 83 | | |
| 84 | | * Public API: [http://trac.webkit.org/projects/webkit/browser/trunk/WebKit/gtk WebKit/gtk] |
| 85 | | |
| 86 | | * GtkLauncher (example application): [http://trac.webkit.org/projects/webkit/browser/trunk/WebKitTools/GtkLauncher WebKitTools/GtkLauncher] |
| 87 | | |
| 88 | | There may be other gtk-port related directories which have yet to be listed here. |
| 89 | | |
| 90 | | === Shared code modules === |
| 91 | | |
| 92 | | While the Gtk+ port is the primary consumer of these backends, we aim to keep them portable, avoiding even ifdef'd sections specific to the Gtk+ port: |
| 93 | | |
| 94 | | * curl http backend: [http://trac.webkit.org/projects/webkit/browser/trunk/WebCore/platform/network/curl WebCore/platform/network/curl] |
| 95 | | |
| 96 | | * cairo graphics backend: [http://trac.webkit.org/projects/webkit/browser/trunk/WebCore/platform/graphics/cairo WebCore/platform/graphics/cairo] |
| 97 | | |
| 98 | | * cairo graphics SVG backend: [http://trac.webkit.org/projects/webkit/browser/trunk/WebCore/platform/graphics/svg/cairo WebCore/platform/graphics/svg/cairo] |
| 99 | | |
| 100 | | == Current tasks (July '07) == |
| 101 | | |
| 102 | | * Make things work with debugging enabled (when NDEBUG is removed, assertions are triggered right now) |
| 103 | | * Fix animated GIF images -- consider using GdkPixbuf? |
| 104 | | * Continue to fix the curl backend |
| 105 | | * Start to consider consolidating the widget into a single place as the Qt port has done, and look into implementing eg. createFrame() |
| 106 | | * Look into supporting the canvas |
| 107 | | * Attempt to merge the Cairo code in the Win32 port -- the equivalent code is copy-and-pasted into the "Gdk" port in some places. This will help reduce code duplication but also help towards getting WebKit/Gdk/Gtk+ working on Windows |
| | 66 | See [wiki:"HackingGtk" the hacker's guide to WebKit/GTK+]. |
| 110 | | == Issues known == |
| 111 | | |
| 112 | | === CURL === |
| 113 | | * Review and possibly integrate the [http://www.sand-labs.org/svn/trunk/BAL/Implementations/Network/CURL/ sand-labs CURL backend] code. It has a slightly different API, so needs to be back-ported, but looks like it may be more feature-complete, able to handle redirects properly etc. |
| 114 | | * The non zero select timeout feels bad. Make it possible to write a GSourceFunc to not poll the sockets and have a timeout: This can probably be done by integrating code from MIT/X11 licensed [http://atterer.net/glibcurl/ glibcurl]. |
| 115 | | * Cookie handling is completely lacking as pointed out on the mailing list |
| 116 | | * Errors of curl need to be properly populated |
| 117 | | |
| 118 | | === Gtk === |
| 119 | | * A lot of classes are not yet implemented |
| 120 | | * For painting we have some issues in regard to Expose Events and when WebKit will call paint. |
| 121 | | |
| 122 | | === Theming === |
| 123 | | * Consider taking code directly from Mozilla's LGPL licensed Gtk+ theming backend. They deal with a lot of corner cases which don't look fun to re-implement. |
| 124 | | * Focus ring drawing |
| 125 | | * Scrollbars for PlatformScrollbar will be terrible as we need to implement a HitTest but don't know where the elements of the scrollbar hide |
| 126 | | * Native theming for text entries |
| 127 | | * Find a way to draw a GtkComboBox, at least the button part. This is needed to implement theming of the <select> element properly. |