Re: Tk 9: image -format svg -scaletowidth not working?

Liste des GroupesRevenir à cl tcl 
Sujet : Re: Tk 9: image -format svg -scaletowidth not working?
De : csaba.nemethi (at) *nospam* t-online.de (nemethi)
Groupes : comp.lang.tcl
Date : 09. Jul 2024, 10:15:38
Autres entêtes
Message-ID : <v6iv3q$d2tg$1@tota-refugium.de>
References : 1 2 3
User-Agent : Mozilla Thunderbird
Am 09.07.24 um 09:26 schrieb Mark Summerfield:
On Mon, 08 Jul 2024 14:16:45 +0200, Ralf Fassel wrote:
 
* Mark Summerfield <mark@qtrac.eu>
[snip]
| Can someone tell me what I'm doing wrong?
>
| I'm using Tcl/Tk 9.0b2 on Debian Linux.
>
The manpage says:
>
   Image formats may support sub-options, which are specified using
   additional words in the value to the -format option.
>
This sounds to me as if you need to specify the additional options like
-scaletowidth *with* the -format option, like so:
>
   -format [list svg -scaletowidth 24]
>
instead of
>
   -format svg -scaletowidth 24
 Thank you, I'm now using:
 proc util::icon {svg {width 0}} {
     set opt [expr {$width ? [list -format [list svg -scaletowidth $width]]
\
         : ""}]
     image create photo -file $::PATH/images/$svg {*}$opt
}
 And when I call this for menu items I use:
 set width [expr {int(16 * [tk scaling])}]
...
     -image [util::icon new.svg $width]
 The 'int' is *essential* since -scaletowidth won't accept a real.
 I think adding support for SVG images is a real plus for Tk.
The way you are using [tk scaling] is not quite correct.  I guess your intention was to scale 16 x 16 px images according to the display's (or Tk's) scaling level.  However, [tk scaling] is the number of pixels per point, hence it is not appropriate for scaling a width given in pixels.
The recommended method in Tk 9 is to use the variable tk::svgFmt when creating scaling-aware images (see man tk_svgFmt).  This variable is set at Tk initialization time to {svg -scale 1.0}, {svg -scale 1.25}, etc., and is updated automatically if you increase the scaling with the aid of the "tk scaling" command.  For example, if you invoke "tk scaling 1.666666" or "tk scaling 1.7" then tk::svgFmt will automatically become {svg -scale 1.25}, hence its use as the value of the -format option will result in images of the size 20 x 20 px.
--
Csaba Nemethi  https://www.nemethi.de  mailto:csaba.nemethi@t-online.de

Date Sujet#  Auteur
8 Jul 24 * Tk 9: image -format svg -scaletowidth not working?9Mark Summerfield
8 Jul 24 `* Re: Tk 9: image -format svg -scaletowidth not working?8Ralf Fassel
8 Jul 24  +- Re: Tk 9: image -format svg -scaletowidth not working?1Harald Oehlmann
9 Jul 24  `* Re: Tk 9: image -format svg -scaletowidth not working?6Mark Summerfield
9 Jul 24   +- Re: Tk 9: image -format svg -scaletowidth not working?1Harald Oehlmann
9 Jul 24   `* Re: Tk 9: image -format svg -scaletowidth not working?4nemethi
9 Jul 24    `* Re: Tk 9: image -format svg -scaletowidth not working?3Mark Summerfield
9 Jul 24     `* Re: Tk 9: image -format svg -scaletowidth not working?2nemethi
10 Jul 24      `- Re: Tk 9: image -format svg -scaletowidth not working?1Mark Summerfield

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal