/************************************************************************** ... **************************************************************************/ void update_map_canvas_scrollbars(void) { float shown_h, top_h, shown_v, top_v; int xmin, ymin, xmax, ymax, xsize, ysize; int scroll_x, scroll_y; get_mapview_scroll_window(&xmin, &ymin, &xmax, &ymax, &xsize, &ysize); get_mapview_scroll_pos(&scroll_x, &scroll_y); top_h = (float)(scroll_x - xmin) / (float)(xmax - xmin); top_v = (float)(scroll_y - ymin) / (float)(ymax - ymin); shown_h = (float)xsize / (float)(xmax - xmin); shown_v = (float)ysize / (float)(ymax - ymin); XawScrollbarSetThumb(map_horizontal_scrollbar, top_h, shown_h); XawScrollbarSetThumb(map_vertical_scrollbar, top_v, shown_v); }
/************************************************************************** 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)); }
/************************************************************************** ... **************************************************************************/ void scrollbar_jump_callback(Widget w, XtPointer client_data, XtPointer percent_ptr) { float percent=*(float*)percent_ptr; int xmin, ymin, xmax, ymax, xsize, ysize; int scroll_x, scroll_y; if (!can_client_change_view()) { return; } get_mapview_scroll_window(&xmin, &ymin, &xmax, &ymax, &xsize, &ysize); get_mapview_scroll_pos(&scroll_x, &scroll_y); if(w==map_horizontal_scrollbar) { scroll_x = xmin + (percent * (xmax - xmin)); } else { scroll_y = ymin + (percent * (ymax - ymin)); } set_mapview_scroll_pos(scroll_x, scroll_y); }