Problems with the current API
In no particular order:
- GTK+ does sometimes assume nothing will be drawn, and then does not call into the engine.
- The detail strings are fixed, and cannot easily evolve over time.
- There are pretty much no guarantees for applications (like whether modify_*() works) (Ways to fail are: pixmap theme, bg_pixmap background)
- Themes cannot take widget properties into account.
- Most paddings are hardcoded inside applications.
- Engines currently need to use the widget pointer to achieve some things.
- When drawing the strings the color needs to depend on the color from the background. However, this color is often not known.
The widget_class, etc. lines are sorted in the order they appear in the gtkrc. Sorting them for relevance is better.
- The margins in widgets have a fixed size and cannot change depending on the screens resolution.
- Themes do not have a very fine control of the size and layout of GTK+ widgets.
- There is a large amount of inconsistencies in how the different widgets are drawn.
- Custom drawing for application specific widgets cannot be themed.
- It is hard to fake widgets, both because engines sometimes rely on the passed in widgets, and because what GTK+ does is not documented/defined properly.
- GTK+ engines draw directly on the X window. Passing in a cairo context could make scaling and other advanced features possible (eg. canvases).
No fine grained control of size/layout of widgets
This point comes directly from the Sugar GTK+ theme. Here the normal button should have a specific height (45px). Another thing is that the theme has rounded corners, and the icon should be placed into the rounded part of the button. However, the text should be centered on the rest of the button. It is not possible to do this from the theme with GTK+.