Saturday, August 31, 2013

Some news from the oxygen world


Last week we've released two feature versions of oxygen-gtk, namely 1.4.0 for oxygen-gtk2 and 1.2.0 for oxygen-gtk3.

Alongside with the usual amount of bug fixes, the main new feature of these releases is the ability to get them compiled and working on non-linux operating systems, and more precisely on windows (see screenshot).

The Gimp, running on Windows (tm) with oxygen-gtk

The process of compiling oxygen-gtk2 and oxygen-gtk3 on windows is somewhat complicated (requires cmake, MinGW, gtk2/gtk3). Forcing applications such as Gimp or Pidgin to use the style - once it is successfuly compiled - is even more complicated, since these applications are usually distributed with bundled versions of gtk and standalone configuration files. Describing this is beyond the scope of this post and daring users will have to resort to google to get it right.

For the gtk3 version, we also enabled support for non X11 backends, such as Broadway, which allows to run gtk applications in your browser, via HTML5.
Oxygen-gtk3-demo, embedded into a web browser, using the Broadway backend


For the kde/qt version, oxygen has been successfully ported to KDE-Frameworks 5. This allows to use oxygen together with Qt5 (see screenshot) and ensures that Oxygen will still be available for future releases of KDE.

Some text editor using oxygen-qt together with qt-5.0.2

There is some development foreseen for oxygen before it is released alongside with KDE Frameworks 5.0, in view of revisiting spacing and alignment between widgets, and making the whole style more DPI independent.

Tuesday, January 17, 2012

Oxygen-gtk3 1.0 is out

The first release of KDE's Oxygen widget theme, ported to GTK 3.X applications, has been uploaded to kde ftp servers on Tuesday January 17 2012 and is available for download here. It is called oxygen-gtk3.

This release is still experimental, notably due to the small amount of GTK 3 applications it has been tested on. Still, since snapshots of the running git repository were already being circulated around for some time, we deemed it appropriate to release the current code, if only because it would make book-keeping and bug tracking easier. Also, we expect rapid progress as bug reports are being filled by users.

The result is already quite satisfactory, as illustrated on the screenshot below.

All the features of the GTK 2.x version have successfully been ported to the GTK 3.x version, and a large fraction of the code base is actually shared between the two. This includes:
  • grabbing windows from empty areas;
  • smooth animations on mouse hover and focus change
  • on fly update of the style appearance when the configuration is changed (via KDE's system settings, or oxygen-settings)

Bug reports should preferentially be filled on KDE's bug tracker, here, rather than on this blog, or on the kde-look web site. This ensures easier interactions with the reporting users.

Like for the GTK 2.x version, there will be one minor bug-fix release every month, and one major feature release every 6 month, more or less in sync with newest KDE release.

The third major release (v1.2.0) of the GTK 2.x port has also been released on the same day and is available for download here. The package name has been changed to oxygen-gtk2, to avoid confusion with the GTK 3.x version. It includes all the bug fixes that were applied to the 1.1 series, together with visual improvements that match the Qt version shipped by KDE 4.8.

Thursday, June 16, 2011

Oxygen-gtk 1.1 is out

The first major release of Oxygen-gtk has been uploaded to kde ftp servers on Wednesday June 15 and is available for download here.

This release comes with many improvements over the 1.0 series, which include:
  • animations (smooth glow on mouse-over and focus for virtually all widgets, similar with what exists for the Qt version), controlled using the same configuration options as the Qt version, via oxygen-settings;
  • on-fly update of the applications when configuration options are changed, via interfacing of the style to dbus;
  • improvement of the rendering of many widgets to have better consistency with the Qt version of oxygen, and remain in sync with latest design changes that will be shipped with KDE4.7. This affects notably scrollbars, sliders, groupboxes (Aka GtkFrames), etc;
  • real inner shadows for lists, icon views and other text edition widgets (thanks to Ruslan for making this possible);
  • better integration with oxygen's window decoration (effective only with kde 4.7), in the sense that the decoration will detect applications for which the window background gradient cannot be rendered (such as Firefox, Thunderbird, open-office, etc.), and consistently paint itself flat;
  • support for KWin's new shadow system, that applies to menus, drop-down lists and tooltips;
  • a dedicated demo application, called oxygen-gtk-demo, which is similar (though not identical) to its oxygen-demo Qt counterpart, as illustrated in the screenshot below.

This release is meant to be used with KDE SC 4.7, which should become available some time this summer, due to the redesign of some Qt widgets that will be shipped with it. In the meanwhile, users will experience some visual inconsistencies (nothing dramatic though), and might prefer to stick to the 1.0 version.

As for the 1.0 series, we (Ruslan, Cédric and I) will provide some monthly bugfix releases of the 1.1 version, based on bugs reported to us at In parallel we will work on the next major release (1.2), focusing notably (and without any warranty) on the gtk3 port as well as on making oxygen-gtk a more standalone gtk widget style, that can also be used seamlessly outside of KDE.

Sunday, April 17, 2011

User experience, one pixel at a time

  • A couple of weeks ago, I've been attending 2011 user experience Sprint, in Berlin. That was interesting and nice and productive and everything, and above all it was my first live encounter with other KDE people, including Nuno.

There's been (notably) quite some discussions about how information and functionality should be presented to users, organized and formulated, in order to be complete but not overwhelming, sexy, gratifying, and elegant.

Now, no matter how well organized resources, features, and information are, a significant fraction of the above can be wasted if every single brick of the UI is not rendered perfectly.

So Nuno (finger above) and I have been focusing on the remaining UI elements for which we are not fully satisfied, pretty much disregarding how these elements are used later on.

Two screenshots to illustrate the progress we've made during these few days.

First screenshot is Dolphin:
Things one notices:
  • more visible pressed tool buttons at the top
  • new slider at the bottom
  • and new folder icons (quite unrelated with this post actually), on which Nuno has been working lately (and I'm sure he would blog better than I about it).
Things one does not notice (but with which we are happy):
  • improved holes for the scrollbars, progressbars, and main view (note notably how the main view bottom corners are better rounded)
  • improved (well, bug fixed) rendering of the capacity bar at the bottom.
To give proper credit to whom it belongs, some of the improvements above have been primarily instigated by Peter Penz, Dolphin dev.

Second screenshot is K3B:K3B is using nice title frames all over the place for quite some time now (the icons and text over a blue background on the picture above), but which have not been rendered properly by oxygen so far (notably, there was one or two pixel between the frame shadow and the blue content, that was pretty much wasting all the effort). So we finally took some time to fix it, resulting in the above, which is closer, I think, to what was originally intended.

We've made other changes here and there and we still have some in the pipe before KDE 4.7 is out. Most of them are barely noticeable but we believe it will make oxygen look sharper, more polished and pleasant to the eye, one pixel at a time.

Tuesday, April 12, 2011

A taste of things to come

1. Oxygen-gtk

Oxygen-gtk version 1.1.0 will be out some time in June. It will come with a number of new features listed below:
  • interface to dbus that allows on-fly update of the applications on configuration changes (as already documented here)
  • a complete set of mouse-over and focus animations identical to what is available for the Qt version, and configurable using oxygen-settings. This includes smooth highlight effects of buttons, text fields, menu and menubar items, lists, etc.
  • improved consistency with the Qt style: we finally implemented the same design as in Qt for named frames, and Ruslan Kabatsayev did a great job at implementing extended inner shadows in lists and text widgets. This is all illustrated in the screenshot below.

three toolkits, one widget style

2. Gtk3

Oxygen-gtk has been ported to the brand new Gtk3 toolkit, with practically no feature loss with respect to its Gtk2 incarnation. Despite GTK3's complete rewrite of the styling API, the porting turned out to be less painful than originally thought, notably thanks to the high segmentation of our code. From the limited set of applications we could test it on so far, this port is working quite well, as also illustrated in the screenshot above. Obviously all three windows are not pixel-perfect identical, and the metrics of various widgets somewhat vary from one toolkit to the other, but the overall consistency is quite satisfying, already, in my humble opinion.

Now, this is definitely not ready for release yet, notably because of the quite small amount of Gtk3-ready applications we could find on the web, for testing. Also, we had to seriously bypass (hack) the rather limited API of the new theming engine in order to be able to implement all features present in Oxygen's Qt and Gtk2 incarnations. Anyway, the code is available from our git repository using the command:
git clone -b gtk3 git://

3. Shadows

We've been collaborating with KWin dev Martin Graesslin on a new shadow system that let the widget style render the shadows for menus, tooltips, drop-down list, etc. This new feature, also documented here, allows Oxygen to render the same shadows for the widgets listed above as for normal decorated windows, thus improving consistency. The result is illustrated in the next two screenshots, first for a Qt application, second for a famous XUL + Gtk application. Note notably how the menu in the second screenshot have square corners, due to an XUL limitation, and how we adapt the shadow rendering to that case, something which was not possible in the past.

Finally, for the first time I'll meet in person with Nuno in a couple of days, and we'll take this opportunity to revisit (and hopefully improve) the last few UI elements with which he is not so happy today. In the process of doing so, we will notably incorporate some quite useful input from Dolphin dev, Peter Penz.

All the above should become available to everyone by the time KDE-4.7 is out, so stay tune.

Saturday, January 8, 2011

Oxygen + Gtk + DBus

  • Gtk: one of the most widely used toolkit to write opensource applications for your desktop, the second one being Qt, used notably for all KDE applications;
  • Oxygen: refers (notably) to KDE's default widget's style, originally written for Qt/KDE applications only;
  • DBus: inter-process communication system used for applications to communicate between each-other. In KDE it is used notably for propagating configuration changes (such as the color scheme) to KDE applications.
This post introduced oxygen-gtk, a native port of the KDE's default widget style to the Gtk toolkit, which allowed applications such as Gimp, Inkscape, and many others, to integrate seamlessly in the KDE desktop. This style was written to follow most of KDE configuration options, such as the icon theme, icon sizes, fonts, etc. However any change to the KDE configuration was only accounted for by GTK applications after the latter were restarted.

Today, we added DBus support to oxygen-gtk, so that Gtk applications keep track of modifications to KDE's configuration and update themselves on fly. This is best illustrated by the screencast below, during which color scheme and font size are changed in KDE's system settings, and Gimp updates accordingly without restart.

This feature is already available for testing in oxygen-gtk's git repository. It will be included in the next feature release of oxygen-gtk (version 1.1.0), some time in June.

mmm... recording a screencast in KDE. Which application should I use ? qt-recordmydesktop, or gtk-recordmydesktop:

Friday, November 26, 2010

Oxygen + Gtk

For the past few month, Ruslan Kabatsayev, Cédric Bellegarde and I have been working on writing (yet another) Gtk port of KDE's oxygen widget style.

Unlike previous attempts we decided to
  • start a new gtk-engine from scratch (as opposed to re-using an existing one). All painting is performed using Cairo; there is no hidden interfacing to Qt, nor hard-coded pixmaps.
  • stick as close as possible to KDE's and oxygen's options. Amongst other things, the engine loads kde palette, icons, and fonts; it respects the color contrast setting, and a number of oxygen's display options (such as the tab style, the list's expander style, the scrollbar width, etc.)
  • try implement at least some of the fancy features of KDE's Oxygen style. Amongst other things, we added mouse-over effects on almost all widgets; support for ARGB colormap (in order to have nice non-pixelated corners for menus, combo boxes or tooltips), and full support for grabbing windows from empty areas (a feature that is in KDE's Oxygen since KDE SC 4.5). We also have plans for adding a large number of the animations found in KDE's Oxygen style, but that will be for the next release.
The primary goal of this port is to improve significantly the integration of Gtk/Gnome applications in KDE. However, we also aim to provide Oxygen as a modern, professional and polished theme for other desktop environments, that works seamlessly without having KDE even installed.

Some screenshots are available at the end of this post.

The sources for this first release are available on KDE ftp servers. We plan to follow the same release plan as KDE:
  • one minor bug-fixing release every month,
  • one major feature release every 6 month
Daring users can also get the latest sources from the git repository directly. We are hosted by

Bug reports and feature requests can be sent to KDE bug tracking system. When doing so one should select product=Oxygen, and component=gtk-engine.

One can also talk to the developers and give direct feedback on IRC, channel #oxygen (ask for hugo).

Now for the screenshots:

Nautilus (front) and Dolphin (back)

GEdit (front) and Kate (back)

Compiz Config Settings Manager (CCSM)

Mandriva's RPM manager (urpmi)

Firefox (unthemed)