gint ghid_port_window_motion_cb (GtkWidget * widget, GdkEventButton * ev, GHidPort * out) { gdouble dx, dy; static gint x_prev = -1, y_prev = -1; gboolean moved; if (out->panning) { if (gtk_events_pending ()) return FALSE; dx = gport->zoom * (x_prev - ev->x); dy = gport->zoom * (y_prev - ev->y); if (x_prev > 0) ghid_port_ranges_pan (dx, dy, TRUE); x_prev = ev->x; y_prev = ev->y; return FALSE; } x_prev = y_prev = -1; moved = ghid_note_event_location (ev); #if ENABLE_TOOLTIPS queue_tooltip_update (out); #endif ghid_show_crosshair (TRUE); if (moved && have_crosshair_attachments ()) ghid_draw_area_update (gport, NULL); return FALSE; }
void ghid_notify_mark_change (bool changes_complete) { render_priv *priv = gport->render_priv; /* We sometimes get called before the GUI is up */ if (gport->drawing_area == NULL) return; if (changes_complete) priv->mark_invalidate_depth --; if (priv->mark_invalidate_depth < 0) { priv->mark_invalidate_depth = 0; /* A mismatch of changes_complete == false and == true notifications * is not expected to occur, but we will try to handle it gracefully. * As we know the mark will have been shown already, we must * repaint the entire view to be sure not to leave an artaefact. */ ghid_invalidate_all (); return; } if (priv->mark_invalidate_depth == 0) DrawMark (); if (!changes_complete) { priv->mark_invalidate_depth ++; } else if (gport->drawing_area != NULL) { /* Queue a GTK expose when changes are complete */ ghid_draw_area_update (gport, NULL); } }