Unavailable appearance

Richard Suchenwirth 2003-08-07 - Buttons and other UI items that are disabled, are drawn on Windows in a style called "Unavailable appearance", which looks like the font had a sunken relief. Here is a workaround to have this effect in Tk too: We first create a label with a white text, save this using Img to a photo image, and do a bit of image processing to add gray pixels as left-top neighbors to white pixels:

WikiDbImage unavailable.jpg


 package require Img
 pack [label .x -text Unavailable -fg white]
 after idle
 set im [image create photo -format window -data .x]
 set w [image width $im]
 set h [image height $im]
 for {set y 1} {$y<$h} {incr y} {
   for {set x 1} {$x<$w} {incr x} {
      if {[$im get $x $y]=={255 255 255}} {
         $im put gray40 -to [expr {$x-1}] [expr {$y-1}]
      }
   }
 }
 .x config -image $im

However, this does not reflect the -state of the button - more code is needed for that functionality.

Come to think, this might be done in Tk core at the place where -disabledforeground is displayed, by rendering the text in white before, shifted by 1 pixel each in x,y directions; conditionally for Windows, or: for all platforms?


PT Tile does this for widgets with a disabled state and for themes that require this sort of effect (eg: winnative and xpnative - also alt IIRC)