mirror of
git://projects.qi-hardware.com/eda-tools.git
synced 2024-11-19 09:41:54 +02:00
eeshow/: add panning (middle mouse button)
This commit is contained in:
parent
e2ff07457c
commit
c8b8dbd174
28
eeshow/gui.c
28
eeshow/gui.c
@ -103,16 +103,32 @@ static void canvas_coord(const struct gui_ctx *ctx,
|
|||||||
|
|
||||||
static void pan_begin(struct gui_ctx *ctx, int x, int y)
|
static void pan_begin(struct gui_ctx *ctx, int x, int y)
|
||||||
{
|
{
|
||||||
|
if (ctx->panning)
|
||||||
|
return;
|
||||||
|
ctx->panning = 1;
|
||||||
|
ctx->pan_x = x;
|
||||||
|
ctx->pan_y = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void pan_update(struct gui_ctx *ctx, int x, int y)
|
static void pan_update(struct gui_ctx *ctx, int x, int y)
|
||||||
{
|
{
|
||||||
|
if (!ctx->panning)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ctx->x -= (x - ctx->pan_x) << ctx->zoom;
|
||||||
|
ctx->y -= (y - ctx->pan_y) << ctx->zoom;
|
||||||
|
ctx->pan_x = x;
|
||||||
|
ctx->pan_y = y;
|
||||||
|
|
||||||
|
gtk_widget_queue_draw(ctx->da);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void pan_end(struct gui_ctx *ctx, int x, int y)
|
static void pan_end(struct gui_ctx *ctx, int x, int y)
|
||||||
{
|
{
|
||||||
|
pan_update(ctx, x, y);
|
||||||
|
ctx->panning = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -153,7 +169,7 @@ static gboolean motion_notify_event(GtkWidget *widget, GdkEventMotion *event,
|
|||||||
|
|
||||||
canvas_coord(ctx, event->x, event->y, &x, &y);
|
canvas_coord(ctx, event->x, event->y, &x, &y);
|
||||||
// fprintf(stderr, "motion\n");
|
// fprintf(stderr, "motion\n");
|
||||||
pan_update(ctx, x, y);
|
pan_update(ctx, event->x, event->y);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -168,11 +184,12 @@ static gboolean button_press_event(GtkWidget *widget, GdkEventButton *event,
|
|||||||
fprintf(stderr, "button press\n");
|
fprintf(stderr, "button press\n");
|
||||||
switch (event->button) {
|
switch (event->button) {
|
||||||
case 1:
|
case 1:
|
||||||
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
pan_begin(ctx, x, y);
|
pan_begin(ctx, event->x, event->y);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
;
|
break;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -188,11 +205,12 @@ static gboolean button_release_event(GtkWidget *widget, GdkEventButton *event,
|
|||||||
fprintf(stderr, "button release\n");
|
fprintf(stderr, "button release\n");
|
||||||
switch (event->button) {
|
switch (event->button) {
|
||||||
case 1:
|
case 1:
|
||||||
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
pan_end(ctx, x, y);
|
pan_end(ctx, event->x, event->y);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
;
|
break;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user