#!/dev/null # # Tk image utility functions # #Manage cache of images to reduce memory wastage # proc inCacheV {v f} { set f "@${f}@" set i [indexof $v $f] if [streq $i {}] { return {}} inc i 1 index $v $i } proc cacheV {v f i} { append global $v "@${f}@" append global $v $i } set ICache [list] proc tkimage {dir file} { local file local img set file "${dir}/$file" set img [inCacheV $ICache $file] if not [streq $img {}] {return $img} set img [image $file] cacheV ICache $file $img return $img } proc tkicon {dir file res} { local file local img set file "${dir}/img/${res}/$file" set img [inCacheV $ICache $file] if not [streq $img {}] {return $img} set img [image $file] cacheV ICache $file $img return $img } # # tksize - returns image size # # Relies on image magic to convert to image and provide header # set SCache [list ] proc tksize {dir file} { local f local ret local r set f "${dir}/$file" set ret [inCacheV $SCache $file] if not [streq $ret {}] { return $ret } set fd [open "${dir}/${file}#info" 0] set ret [read $fd 100] close $fd set r " -width [index $ret 3] -height [index $ret 4] " cacheV SCache $file $r return $r } list