[LAD] pixmap based knob widgets and theme integration.

Patrick Shirkey pshirkey at boosthardware.com
Mon Sep 27 11:44:56 UTC 2010

On Sun, September 26, 2010 1:35 pm, pete shorthose wrote:
> WRT the recent discussion about pixmap knob widgets and theme
> conformance (that i can't reply to since i wasn't on the list
> at the time, sorry)
> there are a couple of ways that you might achieve this.
> the crux gtk theme engine includes some pixmap recolouring code
> (or used to at any rate). it recolours areas of a pixmap that
> only contain green values to one specified in the gtkrc.
> this might conceivably be stolen and incorporated
> to provide some measure of theme conformance for pixmap
> based widgets (knobs wheels and potentially sliders).
> this method places specific constraints on the source pixmaps used,
> constraints that are easily adhered to when creating pixel art
> (which the crux pixmaps were) but procedurally generated rasters
> (vector or 3d renders) of the kind that are likely to be used with
> a pixmap widget might pose more of a problem since lighting and
> anti aliasing probably induce a variety of colours.
> still, i expect you could get something to work with a bit of effort.
> (imagemagick or scriptfu in the gimp may help there).
> another possibility that was briefly discussed for use with
> phat was that of a composite widget with different layers that
> could be drawn separately, one on top of the other. eg render an SVG
> or pixmap as a background on the first pass, then draw something
> with cairo (a value indicator..) on top.

Well I have found that this will only work with recent gtk (it may have
been fixed by now) if the widget is not being updated often. There was a
memory bug in wither the font or vector functions when drawing text on top
of a dynamically rendered and frequently updated layer.

There are ways around this but they require a bit of flexibility and I
didn't have the time when I was working on my code to figure it out. One
of the methods would have just minimised the bug but not actually fixed
it. That required redrawing only the parts of the widget that need to be

> there are obvious limits to what you can achieve with this kind of
> thing,

Like what exactly? Pretty much only what the mind can think of. Anything
you can achieve in inkscape or gimp will be possible with cairo. That is
much more than most widgets will ever need.

> but you could get some complex effects on a knob while still
> maintaining procedural control over the size, colour and shape of the
> vector elements. (tick marks around the knob, value indicator size
> and colour etc). IIRC we discarded the idea due to it's complexity.
> we wanted a generally configurable knob and the vector elements would
> need anything from extensive widget options right up to a full blown
> markup language to describe them (not a problem for app specific
> widgets).

Drawing with cairo is pretty easy once you get the hang of it. It helps if
you have some working knowledge of gimp or inkscape so you can visualise
the steps required to create the effects. Do you have examples of the kind
of visuals were you interested in creating?

Patrick Shirkey
Boost Hardware Ltd.

More information about the Linux-audio-dev mailing list