Subject: Re: bug#74725: 31.0.50; image-scaling-factor is ignored by create-image

From: Po Lu <[email-masked]>
Date: Sun, 08 Dec 2024 16:03:28 +0800

Eli Zaretskii <[email-masked]> writes:

>> From: Po Lu <[email-masked]>
>> Cc: David Ponce <[email-masked]>,  [email-masked],  [email-masked]
>> Date: Sun, 08 Dec 2024 08:01:39 +0800
>> 
>> Eli Zaretskii <[email-masked]> writes:
>> 
>> >> author	Po Lu <[email-masked]>	2024-06-03 16:34:51 +0800
>> >> committer	Po Lu <[email-masked]>	2024-06-03 16:36:29 +0800
>> >> commit	56376585134d627f96c71b7b063ec51548d3ad3f (patch)
>> >> 
>> >> Which replaced
>> >> 
>> >> -                        (list :scale
>> >> -                              (image-compute-scaling-factor
>> >> -                               image-scaling-factor)))
>> >> 
>> >> By this
>> >> 
>> >> +                        (list :scale 'default))
>> >> 
>> >> In create-image.
>> >> 
>> >> With the side effect that the image spec don't change when the scaling
>> >> factor changes, so the same cached image in always used.
>> >
>> > Po Lu, what were the reasons for that particular part of the commit?
>> 
>> The scale applied by image-scaling-factor is liable to differ by
>> display
>
> How so?  Please elaborate.

When it is set to `auto' (the default value), the scaling factor to be
applied is decided by the configuration of a frame, namely, its
FRAME_COLUMN_WIDTH.

>> and computing the default scale in Lisp would result in images
>> being displayed with an incorrect scale in the presence of multiple
>> displays.
>
> How does the above changeset solve this problem, then?

By moving its application to image.c, which knows where an image is
being displayed and can apply specific scales for each frame.

>> Image caches must be flushed when image-scaling-factor is modified,
>> unless it is set to `auto' and a display's scale changes, because
>> image.c has no means of detecting variable modifications and so only the
>> latter event can be automatically detected.
>
> Please describe the issue in more detail, as I don't think I follow
> what you are saying here.  If we need to detect changes in variables,
> we can use the add-variable-watcher technique, similar to what we do
> in frame.el with variables that need to force redisplay (but maybe I
> don't understand the problem you are describing).
>
> In any case, I don't think changes in image-scaling-factor are
> supposed to be immediately reflected on display, if that's what you
> have in mind.  This is not the documented effect of this variable.

What I am trying to communicate is that changes to
`image-scaling-factor' must be accompanied by flushing the image cache
if it is to take effect on all previously displayed images.  This isn't
a problem, and the OP should simply flush the image cache after
modifying image-scaling-factor, rather than rely on the erroneous
behavior of find-image which was removed.