Hi Dongwon,

On Tue, 2025-05-13 at 01:26 +0000, Kim, Dongwon wrote:
> Hi,
> 
> > Subject: [PATCH 3/9] gtk/ui: Introduce helper gd_update_scale
> > 
> > The code snippet updating scale_x/scale_y is general and will be
> > used in next
> > patch. Make it a function.
> > 
> > Signed-off-by: Weifeng Liu <weifeng.li...@gmail.com>
> > ---
> >  include/ui/gtk.h |  2 ++
> >  ui/gtk.c         | 30 +++++++++++++++++++-----------
> >  2 files changed, 21 insertions(+), 11 deletions(-)
> > 
> > diff --git a/include/ui/gtk.h b/include/ui/gtk.h index
> > aa3d637029..d3944046db 100644
> > --- a/include/ui/gtk.h
> > +++ b/include/ui/gtk.h
> > @@ -224,4 +224,6 @@ int gd_gl_area_make_current(DisplayGLCtx *dgc,
> >  /* gtk-clipboard.c */
> >  void gd_clipboard_init(GtkDisplayState *gd);
> > 
> > +void gd_update_scale(VirtualConsole *vc, int ww, int wh, int fbw,
> > int
> > +fbh);
> > +
> >  #endif /* UI_GTK_H */
> > diff --git a/ui/gtk.c b/ui/gtk.c
> > index 8f5bb4b62e..47af49e387 100644
> > --- a/ui/gtk.c
> > +++ b/ui/gtk.c
> > @@ -801,6 +801,24 @@ void
> > gd_update_monitor_refresh_rate(VirtualConsole *vc, GtkWidget
> > *widget)
> > #endif  }
> > 
> > +void gd_update_scale(VirtualConsole *vc, int ww, int wh, int fbw,
> > int
> > +fbh) {
> > +    if (!vc) {
> > +        return;
> > +    }
> > +
> > +    if (vc->s->full_screen) {
> > +        vc->gfx.scale_x = (double)ww / fbw;
> > +        vc->gfx.scale_y = (double)wh / fbh;
> > +    } else if (vc->s->free_scale) {
> > +        double sx, sy;
> > +
> > +        sx = (double)ww / fbw;
> > +        sy = (double)wh / fbh;
> > +
> > +        vc->gfx.scale_x = vc->gfx.scale_y = MIN(sx, sy);
>  
> I assume you are trying to keep the w/h ratio same here in case free-
> scale == true.
> Why would we do that? We can easily stretch the host window to any
> direction then the scale-x and scale-y
> could be different any time.
> 
Currently, the code doesn’t clarify how we should handle aspect ratios.
However, I noticed that in the gd_draw_event function, when free-
scale=true, it preserves a fixed aspect ratio. I believe this is a
reasonable approach (in my humble opinion, it's unlikely that people
want to see distorted images), so I’ve decided to retain this behavior
for now and align other parts to follow the same logic, ensuring a
consistent experience for users.

Best regards,
Weifeng

> > +    }
> > +}
> >  /**
> >   * DOC: Coordinate handling.
> >   *
> > @@ -908,17 +926,7 @@ static gboolean gd_draw_event(GtkWidget
> > *widget,
> > cairo_t *cr, void *opaque)
> >      ww_widget =
> > gdk_window_get_width(gtk_widget_get_window(widget));
> >      wh_widget =
> > gdk_window_get_height(gtk_widget_get_window(widget));
> > 
> > -    if (s->full_screen) {
> > -        vc->gfx.scale_x = (double)ww_widget / fbw;
> > -        vc->gfx.scale_y = (double)wh_widget / fbh;
> > -    } else if (s->free_scale) {
> > -        double sx, sy;
> > -
> > -        sx = (double)ww_widget / fbw;
> > -        sy = (double)wh_widget / fbh;
> > -
> > -        vc->gfx.scale_x = vc->gfx.scale_y = MIN(sx, sy);
> > -    }
> > +    gd_update_scale(vc, ww_widget, wh_widget, fbw, fbh);
> > 
> >      ww_surface = fbw * vc->gfx.scale_x;
> >      wh_surface = fbh * vc->gfx.scale_y;
> > --
> > 2.49.0
> > 

Reply via email to