/************************************************************************** ... **************************************************************************/ void scrollbar_scroll_callback(Widget w, XtPointer client_data, XtPointer position_val) { int position = XTPOINTER_TO_INT(position_val); int scroll_x, scroll_y, xstep, ystep; get_mapview_scroll_pos(&scroll_x, &scroll_y); get_mapview_scroll_step(&xstep, &ystep); if (!can_client_change_view()) { return; } if(w==map_horizontal_scrollbar) { if (position > 0) { scroll_x += xstep; } else { scroll_x -= xstep; } } else { if (position > 0) { scroll_y += ystep; } else { scroll_y -= ystep; } } set_mapview_scroll_pos(scroll_x, scroll_y); update_map_canvas_scrollbars(); }
/************************************************************************** Refresh map canvas scrollbar as canvas size changes **************************************************************************/ void update_map_canvas_scrollbars_size(void) { int xmin, ymin, xmax, ymax, xsize, ysize, xstep, ystep; get_mapview_scroll_window(&xmin, &ymin, &xmax, &ymax, &xsize, &ysize); get_mapview_scroll_step(&xstep, &ystep); map_hadj = gtk_adjustment_new(-1, xmin, xmax, xstep, xsize, xsize); map_vadj = gtk_adjustment_new(-1, ymin, ymax, ystep, ysize, ysize); gtk_range_set_adjustment(GTK_RANGE(map_horizontal_scrollbar), map_hadj); gtk_range_set_adjustment(GTK_RANGE(map_vertical_scrollbar), map_vadj); g_signal_connect(map_hadj, "value_changed", G_CALLBACK(scrollbar_jump_callback), GINT_TO_POINTER(TRUE)); g_signal_connect(map_vadj, "value_changed", G_CALLBACK(scrollbar_jump_callback), GINT_TO_POINTER(FALSE)); }