cairo_t *cr;
- double tx, ty, oldx, oldy;
+ double oldx, oldy;
int needs_refresh, fit_mode, click, active;
Atom wm_delete_window_atom;
win->click = 0;
win->active = 0;
- win->tx = 0.0;
- win->ty = 0.0;
}
static void win_deinit(win_t * win)
XFillRectangle(win->dpy, win->pix, win->gc, 0, 0,
win->gvc->width, win->gvc->height);
- /* FIXME - screen point ==> graph point transforms */
- win->gvc->focus.x = -(win->tx) / Z;
- win->gvc->focus.y = (win->ty) / Z;
-
emit_graph(win->gvc, win->g, win->flags);
XCopyArea(win->dpy, win->pix, win->win, win->gc,
case 4:
/* scrollwheel zoom in at current mouse x,y */
win->fit_mode = 0;
- win->tx += bev->x * win->gvc->zoom;
- win->ty += bev->y * win->gvc->zoom;
+ win->gvc->focus.x += bev->x * win->gvc->zoom;
+ win->gvc->focus.y += bev->y * win->gvc->zoom;
win->gvc->zoom *= ZOOMFACTOR;
- win->tx *= ZOOMFACTOR;
- win->ty *= ZOOMFACTOR;
- win->tx -= bev->x * win->gvc->zoom;
- win->ty -= bev->y * win->gvc->zoom;
+ 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->tx += bev->x * win->gvc->zoom;
- win->ty += bev->y * win->gvc->zoom;
+ win->gvc->focus.x += bev->x * win->gvc->zoom;
+ win->gvc->focus.y += bev->y * win->gvc->zoom;
win->gvc->zoom /= ZOOMFACTOR;
- win->tx /= ZOOMFACTOR;
- win->ty /= ZOOMFACTOR;
- win->tx -= bev->x * win->gvc->zoom;
- win->ty -= bev->y * win->gvc->zoom;
+ 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;
}
static void win_handle_motion(win_t *win, XMotionEvent *mev)
{
switch (win->active) {
- case 0: /* drag object */
+ case 0: /* drag with no button - */
return;
break;
- case 1:
+ case 1: /* drag with button 1 - drag object */
+ /* FIXME - to be implemented */
break;
- case 2: /* pan */
- win->tx += (mev->x - win->oldx) * win->gvc->zoom;
- win->ty += (mev->y - win->oldy) * win->gvc->zoom;
+ case 2: /* drag with button 2 - pan graph */
+ win->gvc->focus.x -= (mev->x - win->oldx) * win->gvc->zoom;
+ win->gvc->focus.y -= -(mev->y - win->oldy) * win->gvc->zoom;
win->needs_refresh = 1;
break;
- case 3: /* unused */
+ case 3: /* drag with button 3 - unused */
break;
}
win->oldx = mev->x;
static int left_cb(win_t * win)
{
win->fit_mode = 0;
- win->tx -= 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->tx += 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->ty -= 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->ty += 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->tx += win->gvc->width * win->gvc->zoom;
- win->ty += win->gvc->height * win->gvc->zoom;
+ 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->tx *= ZOOMFACTOR;
- win->ty *= ZOOMFACTOR;
- win->tx -= win->gvc->width * win->gvc->zoom;
- win->ty -= win->gvc->height * win->gvc->zoom;
+ 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->tx += win->gvc->width * win->gvc->zoom;
- win->ty += win->gvc->height * win->gvc->zoom;
+ 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->tx /= ZOOMFACTOR;
- win->ty /= ZOOMFACTOR;
- win->tx -= win->gvc->width * win->gvc->zoom;
- win->ty -= win->gvc->height * win->gvc->zoom;
+ 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;
}
win->gvc->zoom =
MIN((double) win->gvc->width / (double) dflt_width,
(double) win->gvc->height / (double) dflt_height);
- win->tx = 0.0;
- win->ty = 0.0;
+ win->gvc->focus.x = 0.0;
+ win->gvc->focus.y = 0.0;
win->needs_refresh = 1;
}
return 0;