java-gnome 4.0.10 (5 Mar 2009) ============================== _Sculptures made of letters_ This release is a landmark, because it features coverage of the Pango text rendering library and so, along with our coverage of Cairo, brings us to a complete solution for drawing graphics with text -- be they custom Widgets, PDF documents, or beautiful vector illustrations. In addition to merging Pango work from numerous contributors, we have made massive improvements to our Cairo coverage, support for writing PDFs, and better access to the system Clipboard. Drawing API improvements ------------------------ We've done a huge amount of refinement to our APIs for the ever fabulous Cairo Graphics drawing library, including full coverage of matrix translations, rotations, and scaling and more integrated ways of setting the source pattern to be used in stroke, paint, and fill operations. Thanks to Kenneth Prugh for having seen this through and having done the lion's share of the testing. * **`org.freedesktop.cairo.Content`** * **`org.freedesktop.cairo.Context`** * **`org.freedesktop.cairo.Matrix`** * `org.freedesktop.cairo.Plumbing` * `org.freedesktop.cairo.Status` * **`org.freedesktop.cairo.Surface`** * **`org.freedesktop.cairo.ImageSurface`** * **`org.freedesktop.cairo.SvgSurface`** * **`org.freedesktop.cairo.XlibSurface`** * **`org.freedesktop.cairo.SurfacePattern`** * `cairo.ExampleDrawingText` The various use cases of setting a source pattern for a Context including RGB, RGBA, other Surfaces, already existing Pixbufs, etc have been combined into a series of `setSource()` method overloads. We've also had a number of improvements in the lower levels of GTK relating to image rendering. The gdk-pixbuf library contains a capable image parser and we can now feed it directly from a Pixbuf constructor. Thanks to new contributor Martin Garton for his hard work getting that tested and accepted. * **`org.gnome.gdk.InterpType`** * **`org.gnome.gdk.Pixbuf`** Drawing graphics often also requires drawing text. This release features coverage of Pango, GNOME's powerful text rendering library. Pango is not just about drawing mere glyphs; it also includes a sophisticated paragraph layout engine which gives us a capable solution for drawing text onto Cairo Surfaces. Thanks are due to Serkan Kaba and Kenneth Prugh have both been really helpful testing; it was Vreixo Formoso who did the original leg work in April that identified Layout as the key class that we needed to concentrate on and cleaned up much of the underlying infrastructure. * **`org.gnome.pango.Alignment`** * **`org.gnome.pango.FontDescription`** * **`org.gnome.pango.Layout`** * **`org.gnome.pango.LayoutLine`** * **`org.gnome.pango.Rectangle`** * **`org.gnome.pango.Style`** * **`org.gnome.pango.Variant`** * **`org.gnome.pango.Weight`** * `org.gnome.pango.Plumbing` * **`org.gnome.pango.Context`** * **`org.freedesktop.cairo.FontOptions`** * **`org.freedesktop.cairo.HintMetrics`** * **`org.gnome.pango.Attribute`** * **`org.gnome.pango.AttributeList`** * **`org.gnome.pango.FontDescriptionAttribute`** * **`org.gnome.pango.SizeAttribute`** * **`org.gnome.pango.StyleAttribute`** * **`org.gnome.pango.VariantAttribute`** * **`org.gnome.pango.WeightAttribute`** * **`org.gnome.pango.UnderlineAttribute`** * **`org.gnome.pango.BackgroundColorAttribute`** * **`org.gnome.pango.ForegroundColorAttribute`** * **`org.gnome.pango.BackgroundColorAttribute`** * **`org.gnome.pango.UnderlineColorAttribute`** As we were working on this we had occasion to continue the polish in and around the TextView / TextBuffer APIs, including a number of convenience methods for inserting text while simultaneously applying multiple TextTags, and supporting changing default fonts. * **`org.gnome.gtk.TextBuffer`** * **`org.gnome.gtk.TextIter`** * **`org.gnome.gtk.TextTag`** * **`org.gnome.gtk.TextView`** * **`org.gnome.gtk.TreeViewColumn`** * **`org.gnome.gtk.Widget`** We've also modelled "notify signals" for when a property changes; see the `TextBuffer.NotifyCursorPosition` signal for this in action. Finally, thanks to contributions from Zak Fenton and Kamil Szymala we have support for applications running in composited window managers to have transparent backgrounds -- which is an exceptionally cool effect, even if it doesn't have much to do with creating HIG compliant usable applications `:)`. * **`org.freedesktop.cairo.Operator`** * **`org.gnome.gdk.Colormap`** * **`org.gnome.gdk.Screen`** * **`org.gnome.gdk.Window`** * **`org.gnome.gtk.Widget`** Handling cut & paste -------------------- The GTK clipboard APIs are fairly complex, in no small part because the underlying implementations in X are really rather complex. Our coverage here in java-gnome is still fairly basic relative to that, but it's been enough for people working on applications like text editors to write text to the system clipboard, get notification when the clipboard changes, and read text back out again. * **`org.gnome.gtk.Clipboard`** Printed document support ------------------------ The work on Pango noted above represented the essential machinery necessary to make effective use of Cairo's PDF backend, and this has started us down the road of covering the GNOME printing APIs. You can now generate `.pdf` documents with java-gnome, and we've included an fun [example](doc/examples/START.html#ExampleLinedPaper) showing this in action. * **`org.freedesktop.cairo.PdfSurface`** * **`org.gnome.gtk.PaperSize`** * **`org.gnome.gtk.InternationalPaperSize`** * **`org.gnome.gtk.NorthAmericanPaperSize`** * **`org.gnome.gtk.Unit`** * `cairo.ExampleLinedPaper` Thanks to Nathan Strum for permission to use one of his sketches in the example (you might find reading the [blog][nathan] where we found this interesting -- it's a fascinating exposé of a graphic artist in action). [nathan]: http://www.atariage.com/forums/index.php?automodule=blog&blogid=118&showentry=5460 Continuing improvement ---------------------- Thanks to new contributor Stefan Schweizer we now have better coverage of signals relating to Notebook style Containers, and to new contributors Miloud Bel and Bruno Dusausoy for numerous small improvements in and around ProgressBar. * **`org.gnome.gtk.Notebook`** * **`org.gnome.gtk.ProgressBar`** Miscellaneous documentation improvements and minor feature improvements always feature in our releases, with minor changes having accrued in many classes. * **`org.gnome.gtk.ShadowType`** * **`org.gnome.gdk.CrossingMode`** * **`org.gnome.gdk.NotifyType`** * **`org.gnome.gtk.AboutDialog`** * **`org.gnome.gtk.Arrow`** * **`org.gnome.gtk.ArrowType`** * **`org.gnome.gtk.Assistant`** * **`org.gnome.gtk.Menu`** Just as important as new coverage is getting rid of cruft that we don't need. Libraries like GTK and GDK are, like any other mature project, full of deprecated, obsolete, and unnecessary code -- not to mention things that we just plain don't need in a Java binding of these underlying native libraries. We're already pretty good about not generating translation Java or JNI C code for such things; this release continues our refinements in this area with a considerable refinement of the `.jar` and `.so` which is ultimately what we ship. Finally, it's worth noting that java-gnome's test suite is now 40 unit test classes with 186 individual test fixtures. Combined with over 30 screenshot generating programs and 17 example programs, we actually have surprisingly good test coverage of our library. It's high time they -- and more to the point the people who work hard to create such tests -- got as much credit as the visible public APIs do. * `UnitTests` * `com.operationaldynamics.codegen.ValidateUtilityMethods` * `com.operationaldynamics.defsparser.ValidateBlockUsage` * `com.operationaldynamics.defsparser.ValidateDefsParsing` * `com.operationaldynamics.codegen.ValidateThingUsage` * `org.freedesktop.bindings.ValidateEnvironment` * `org.freedesktop.bindings.ValidateInternationalization` * `org.gnome.glib.ValidateReferenceCounting` * `org.gnome.glib.ValidateMemoryManagement` * `org.gnome.glib.ValidateGListMethods` * `org.gnome.glib.ValidateConstants` * `org.gnome.gtk.ValidateProperties` * `org.gnome.gtk.ValidateSignalEmission` * `org.gnome.gdk.ValidateScreensAndDisplays` * `org.gnome.gdk.ValidateKeyboardHandling` * `org.gnome.gdk.ValidateImageHandling` * `org.freedesktop.cairo.ValidateCairoInternals` * `org.freedesktop.cairo.ValidateDrawingToFile` * `org.gnome.gtk.ValidateOutParameters` * `org.gnome.gtk.ValidatePacking` * `org.gnome.gtk.ValidateNotebookBehaviour` * `org.gnome.gtk.ValidateFileChoosing` * `org.gnome.gtk.ValidateStockItems` * `org.gnome.gtk.ValidateResponseType` * `org.gnome.gtk.ValidateTreeModel` * `org.gnome.gtk.ValidateTreeStore` * `org.gnome.gtk.ValidateTreeModelFilter` * `org.gnome.gtk.ValidateTreeView` * `org.gnome.gtk.ValidateIconView` * `org.gnome.gtk.ValidateComboBox` * `org.gnome.gtk.ValidateSnapshotUtilities` * `org.gnome.gtk.ValidateAssistant` * `org.gnome.gtk.ValidateTextBuffer` * `org.gnome.gtk.ValidateTextViewProperties` * `org.gnome.gtk.ValidateTextViewBorderWindows` * `org.gnome.gtk.ValidateArrow` * `org.gnome.pango.ValidatePangoTextRendering` * `org.gnome.gtk.ValidatePrinting` * `Harness` * `org.freedesktop.cairo.SnapshotMatrixRotate` * `org.freedesktop.cairo.SnapshotCairoAxis` * `org.freedesktop.cairo.SnapshotCairo` * `org.freedesktop.cairo.SnapshotContextLine` * `org.freedesktop.cairo.SnapshotMatrixScale` * `org.freedesktop.cairo.SnapshotContextArcNegative` * `org.freedesktop.cairo.SnapshotMatrixTranslate` * `org.freedesktop.cairo.SnapshotContextArc` * `org.freedesktop.cairo.SnapshotMatrix` * `org.freedesktop.cairo.SnapshotContextRectangle` * `org.gnome.gtk.SnapshotCalendar` * `org.gnome.gtk.SnapshotTreeView` * `org.gnome.gtk.SnapshotButton` * `org.gnome.gtk.SnapshotAboutDialog` * `org.gnome.gtk.SnapshotArrow` * `org.gnome.gtk.SnapshotTextView` * `org.gnome.gtk.SnapshotRadioButton` * `org.gnome.gtk.SnapshotTextComboBox` * `org.gnome.gtk.SnapshotTreeStore` * `org.gnome.gtk.SnapshotTextComboBoxEntry` * `org.gnome.gtk.SnapshotFileChooserDialog` * `org.gnome.gtk.SnapshotTextViewBorderWindows` * `org.gnome.gtk.SnapshotVScale` * `org.gnome.gtk.SnapshotHScale` * `org.gnome.gtk.SnapshotDialog` * `org.gnome.gtk.SnapshotEntryRed` * `org.gnome.gtk.SnapshotComboBox` * `org.gnome.gtk.SnapshotStatusbar` * `org.gnome.gtk.SnapshotInfoMessageDialog` * `org.gnome.gtk.Snapshot` * `org.gnome.gtk.SnapshotAssistant` * `org.gnome.gtk.SnapshotWindow` * `org.gnome.gtk.SnapshotNotebook` * `org.gnome.gtk.SnapshotQuestionMessageDialog` Anyone can run the tests (and anyone wanting to submit a patch had _better_ run the tests!); they've been accumulating since java-gnome 4.0.0; it's just: $ make test and $ make doc If you're working in Eclipse launch class `UnitTests` as a JUnit test suite. Build improvements ------------------ We have some fixes from new contributor Przemysław Grzegorczyk ensuring we include the correct headers in a few corner cases. This came to us via work on a GNOME Love bug, which is a first for us. Thanks! Meanwhile, the ever industrious Serkan Kaba has added some changes to ensure that our magically locating the native shared library component of java-gnome works properly even under strange and unusual conditions. Configuration and prerequisite detection on Open Solaris is improved thanks to reports from new contributor Kamil Szymala. Instructions for how to optimally lay out your branches when working with java-gnome have been moved to the [`HACKING`](HACKING.html) file. People intending to hack on the bindings from Eclipse are _really_ urged to set things up this way as it will make their lives much easier. Also, using the latest release of Bazaar (ie `bzr >= 1.12`) is definitely recommended -- it's getting really fast. We've upgraded our public branches, so you will need `1.9` at a minimum. Note to those creating packages for distributions: java-gnome now depends on the current stable GTK (ie `gtk+ >= 2.14`). Looking ahead ------------- Coverage of Poppler, GNOME's PDF rendering library is well along, but didn't quite make it in time for this release. It could very likely feature in the next version of java-gnome, as might coverage of GConf, GNOME's simple store for application configuration options. People are also known to be working on coverage of GtkSourceView, libwnck, and librsvg. We'll see what gets contributed! The most exciting part about java-gnome at the moment, though, is the number of people working hard on applications using it. It takes a **long** time to write a mature, well rounded, robust end-user program, but there are some pretty cool projects ticking away out there, and it has been terrific to see the authors of these projects joining our community. Happy developing, AfC Rendering text ============== One thing that was previously missing from our Cairo support was the ability to draw text. To that end we have been working on exposing the excellent Pango text rendering library. The '`pango`' branch where the effort has been underway to polish coverage allowing developers add text when drawing has now been merged to '`mainline`'. Pango is not just about drawing mere words. It also includes a sophisticated paragraph layout engine. This in turn represents the essential machinery necessary to make effective use of Cairo's PDF backend; you can now generate `.pdf` documents with java-gnome, and we've included an fun example showing this in action. Thanks are due to Serkan Kaba and Kenneth Prugh have both been really helpful testing; it was Vreixo Formoso who did the original leg work in April that identified Layout as the key class that we needed to concentrate on and cleaned up much of the underlying infrastructure. The API documentation for [Layout][] is pretty much the center piece of all this work. Improvements to various Cairo backends have also been underway; the descriptions at [XlibSurface][] and [PdfSurface][] may also be of interest. AfC [Layout]: doc/api/org/gnome/pango/Layout.html [XlibSurface]: doc/api/org/freedesktop/cairo/XlibSurface.html [PdfSurface]: doc/api/org/freedesktop/cairo/PdfSurface.html