diff options
author | Drew DeVault <sir@cmpwn.com> | 2017-08-06 14:43:33 -0400 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2017-08-06 14:53:29 -0400 |
commit | 69cc94ef23ea2b11c65a4c06e5e17aaea95a973e (patch) | |
tree | 1565003b44cdee61965bdfdf669348c9f60ebc38 /src/viewport.c | |
parent | 2ffd6edea17c1ec8fdb33d1135e27db0eb080625 (diff) | |
download | imv-69cc94ef23ea2b11c65a4c06e5e17aaea95a973e.tar.gz |
Prevent scrolling images indefinitely off-screen
With this change, if you scroll the image well beyond the viewport,
scrolling any amount in the other direction will immediately bring it
back on screen.
Diffstat (limited to 'src/viewport.c')
-rw-r--r-- | src/viewport.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/viewport.c b/src/viewport.c index d096a45..036749f 100644 --- a/src/viewport.c +++ b/src/viewport.c @@ -57,12 +57,29 @@ void imv_viewport_scale_to_actual(struct imv_viewport *view, const struct imv_te imv_viewport_center(view, tex); } -void imv_viewport_move(struct imv_viewport *view, int x, int y) +void imv_viewport_move(struct imv_viewport *view, int x, int y, + const struct imv_texture *tex) { view->x += x; view->y += y; view->redraw = 1; view->locked = 1; + int w = (int)((double)tex->width * view->scale); + int h = (int)((double)tex->height * view->scale); + int ww, wh; + SDL_GetWindowSize(view->window, &ww, &wh); + if (view->x < -w) { + view->x = -w; + } + if (view->x > ww) { + view->x = ww; + } + if (view->y < -h) { + view->y = -h; + } + if (view->y > wh) { + view->y = wh; + } } void imv_viewport_zoom(struct imv_viewport *view, const struct imv_texture *tex, enum imv_zoom_source src, int amount) |