static void win_refresh(win_t * win)
{
- double Z = (win->gvc->zoom * win->gvc->dpi) / POINTS_PER_INCH;
-
XFillRectangle(win->dpy, win->pix, win->gc, 0, 0,
win->gvc->width, win->gvc->height);
case 4:
/* scrollwheel zoom in at current mouse x,y */
win->fit_mode = 0;
- win->gvc->focus.x += bev->x * win->gvc->zoom;
- win->gvc->focus.y += bev->y * win->gvc->zoom;
+ win->gvc->focus.x += (bev->x - win->gvc->width / 2.) * win->gvc->zoom * (ZOOMFACTOR - 1.);
+ win->gvc->focus.y += -(bev->y - win->gvc->height / 2.) * win->gvc->zoom * (ZOOMFACTOR - 1.);
win->gvc->zoom *= ZOOMFACTOR;
- win->gvc->focus.x *= ZOOMFACTOR;
- win->gvc->focus.y *= ZOOMFACTOR;
- win->gvc->focus.x -= bev->x * win->gvc->zoom;
- win->gvc->focus.y -= bev->y * win->gvc->zoom;
win->needs_refresh = 1;
break;
case 5: /* scrollwheel zoom out at current mouse x,y */
win->fit_mode = 0;
- win->gvc->focus.x += bev->x * win->gvc->zoom;
- win->gvc->focus.y += bev->y * win->gvc->zoom;
win->gvc->zoom /= ZOOMFACTOR;
- win->gvc->focus.x /= ZOOMFACTOR;
- win->gvc->focus.y /= ZOOMFACTOR;
- win->gvc->focus.x -= bev->x * win->gvc->zoom;
- win->gvc->focus.y -= bev->y * win->gvc->zoom;
+ win->gvc->focus.x -= (bev->x - win->gvc->width / 2.) * win->gvc->zoom * (ZOOMFACTOR - 1.);
+ win->gvc->focus.y -= -(bev->y - win->gvc->height / 2.) * win->gvc->zoom * (ZOOMFACTOR - 1.);
win->needs_refresh = 1;
break;
}
static int left_cb(win_t * win)
{
win->fit_mode = 0;
- win->gvc->focus.x -= PANFACTOR * win->gvc->zoom;
+ win->gvc->focus.x += PANFACTOR * win->gvc->zoom;
win->needs_refresh = 1;
return 0;
}
static int right_cb(win_t * win)
{
win->fit_mode = 0;
- win->gvc->focus.x += PANFACTOR * win->gvc->zoom;
+ win->gvc->focus.x -= PANFACTOR * win->gvc->zoom;
win->needs_refresh = 1;
return 0;
}
static int up_cb(win_t * win)
{
win->fit_mode = 0;
- win->gvc->focus.y -= PANFACTOR * win->gvc->zoom;
+ win->gvc->focus.y += -(PANFACTOR * win->gvc->zoom);
win->needs_refresh = 1;
return 0;
}
static int down_cb(win_t * win)
{
win->fit_mode = 0;
- win->gvc->focus.y += PANFACTOR * win->gvc->zoom;
+ win->gvc->focus.y -= -(PANFACTOR * win->gvc->zoom);
win->needs_refresh = 1;
return 0;
}
static int zoom_in_cb(win_t * win)
{
win->fit_mode = 0;
- win->gvc->focus.x += win->gvc->width * win->gvc->zoom;
- win->gvc->focus.y += win->gvc->height * win->gvc->zoom;
win->gvc->zoom *= ZOOMFACTOR;
- win->gvc->focus.x *= ZOOMFACTOR;
- win->gvc->focus.y *= ZOOMFACTOR;
- win->gvc->focus.x -= win->gvc->width * win->gvc->zoom;
- win->gvc->focus.y -= win->gvc->height * win->gvc->zoom;
win->needs_refresh = 1;
return 0;
}
static int zoom_out_cb(win_t * win)
{
win->fit_mode = 0;
- win->gvc->focus.x += win->gvc->width * win->gvc->zoom;
- win->gvc->focus.y += win->gvc->height * win->gvc->zoom;
win->gvc->zoom /= ZOOMFACTOR;
- win->gvc->focus.x /= ZOOMFACTOR;
- win->gvc->focus.y /= ZOOMFACTOR;
- win->gvc->focus.x -= win->gvc->width * win->gvc->zoom;
- win->gvc->focus.y -= win->gvc->height * win->gvc->zoom;
win->needs_refresh = 1;
return 0;
}