dkl9 commited on 2026-126 01:07:20
Showing 2 changed files, with 16 additions and 9 deletions.
| ... | ... |
@@ -1,6 +1,7 @@ |
| 1 | 1 |
/* iv/main.c - see README */ |
| 2 | 2 |
|
| 3 | 3 |
#include <libgen.h> |
| 4 |
+#include <math.h> |
|
| 4 | 5 |
#include <stdio.h> |
| 5 | 6 |
#include <stdlib.h> |
| 6 | 7 |
#include <string.h> |
| ... | ... |
@@ -241,6 +242,8 @@ int main(int argc, char** argv) {
|
| 241 | 242 |
unsigned int wdim[2] = {iw, ih};
|
| 242 | 243 |
/* mouse position */ |
| 243 | 244 |
int mpos[2]; |
| 245 |
+ int iic; |
|
| 246 |
+ float dz; |
|
| 244 | 247 |
|
| 245 | 248 |
while (r) {
|
| 246 | 249 |
ef = 0; |
| ... | ... |
@@ -248,7 +251,7 @@ int main(int argc, char** argv) {
|
| 248 | 251 |
switch (ev.type) {
|
| 249 | 252 |
|
| 250 | 253 |
case SDL_KEYUP: |
| 251 |
- int iic = 0; |
|
| 254 |
+ iic = 0; |
|
| 252 | 255 |
switch (handlekey(ev.key.keysym.sym, &sl[ci], ci, fc, wdim)) {
|
| 253 | 256 |
case 4: |
| 254 | 257 |
r = 0; |
| ... | ... |
@@ -286,17 +289,21 @@ int main(int argc, char** argv) {
|
| 286 | 289 |
case SDL_MOUSEMOTION: |
| 287 | 290 |
/* pan-dragging if mouse is down */ |
| 288 | 291 |
if (SDL_GetMouseState(NULL, NULL) & SDL_BUTTON(1)) {
|
| 289 |
- int hid, big; |
|
| 292 |
+ int hid, rhid; |
|
| 290 | 293 |
int rel[2] = {ev.motion.xrel, ev.motion.yrel};
|
| 291 | 294 |
/* clamp panning to edges of window */ |
| 292 | 295 |
TWICE( |
| 296 |
+ /* scaled (onscreen) image size, halved */ |
|
| 293 | 297 |
hid = ZSH(sl[ci].idim[j], sl[ci].zoom - 1.0); |
| 294 |
- big = 2 * hid > wdim[j]; |
|
| 298 |
+ rhid = wdim[j] - hid; |
|
| 299 |
+ if (2 * hid > wdim[j]) {
|
|
| 300 |
+ int tmp = hid; |
|
| 301 |
+ hid = rhid; |
|
| 302 |
+ rhid = tmp; |
|
| 303 |
+ } |
|
| 295 | 304 |
sl[ci].pan[j] = CLAMP( |
| 296 |
- big ? wdim[j] - hid : hid, |
|
| 297 |
- sl[ci].pan[j] + rel[j], |
|
| 298 |
- big ? hid : wdim[j] - hid |
|
| 299 |
- ) |
|
| 305 |
+ hid, sl[ci].pan[j] + rel[j], rhid |
|
| 306 |
+ ); |
|
| 300 | 307 |
) |
| 301 | 308 |
ef = 1; |
| 302 | 309 |
} |
| ... | ... |
@@ -306,7 +313,7 @@ int main(int argc, char** argv) {
|
| 306 | 313 |
|
| 307 | 314 |
case SDL_MOUSEWHEEL: |
| 308 | 315 |
/* scrolling changes zoom */ |
| 309 |
- float dz = DZDS * ev.wheel.y; |
|
| 316 |
+ dz = DZDS * ev.wheel.y; |
|
| 310 | 317 |
sl[ci].zoom += dz; |
| 311 | 318 |
TWICE(sl[ci].pan[j] = mpos[j] - ZSH((mpos[j] - sl[ci].pan[j]), dz)) |
| 312 | 319 |
ef = 1; |
| 313 | 320 |