From a9145e7f1ec3bb58a06c4c516deb050a916a9403 Mon Sep 17 00:00:00 2001 From: William Chargin Date: Sat, 9 Jul 2022 01:38:13 -0700 Subject: [PATCH] printimage: keep aspect ratio with `-w` xor `-h` (#468) --- tool/viz/printimage.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tool/viz/printimage.c b/tool/viz/printimage.c index 53052a604..e4a71428b 100644 --- a/tool/viz/printimage.c +++ b/tool/viz/printimage.c @@ -169,7 +169,7 @@ static void GetOpts(int *argc, char *argv[]) { PrintUsage(EX_USAGE, stderr); } } - if (!g_flags.full && (!g_flags.width || !g_flags.width)) { + if (!g_flags.full && (!g_flags.width && !g_flags.height)) { ws.ws_col = 80; ws.ws_row = 24; if (ioctl(STDIN_FILENO, TIOCGWINSZ, &ws) != -1 || @@ -385,11 +385,17 @@ void WithImageFile(const char *path, data, 0, yn, 0, xn); cn = 3; } - if (g_flags.height && g_flags.width) { + if (g_flags.height || g_flags.width) { syn = yn; sxn = xn; dyn = g_flags.height; dxn = g_flags.width; + if (dyn && !dxn) { + dxn = dyn * xn * (1 + !g_flags.half) / yn; + } + if (dxn && !dyn) { + dyn = dxn * yn / (xn * (1 + !g_flags.half)); + } if (g_flags.magikarp) { while (HALF(syn) > dyn || HALF(sxn) > dxn) { if (HALF(sxn) > dxn) {