aboutsummaryrefslogtreecommitdiff
path: root/src/viewport.c
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2017-08-06 14:43:33 -0400
committerDrew DeVault <sir@cmpwn.com>2017-08-06 14:53:29 -0400
commit69cc94ef23ea2b11c65a4c06e5e17aaea95a973e (patch)
tree1565003b44cdee61965bdfdf669348c9f60ebc38 /src/viewport.c
parent2ffd6edea17c1ec8fdb33d1135e27db0eb080625 (diff)
downloadimv-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.c19
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)