void carmen_map_graphics_adjust_scrollbars(GtkMapViewer *map_view, carmen_world_point_p new_centre) { double x_value, y_value; carmen_point_t screen; GtkAdjustment *x_scroll_adj, *y_scroll_adj; world_to_screen(new_centre, &screen, map_view); x_scroll_adj = map_view->x_scroll_adj; y_scroll_adj = map_view->y_scroll_adj; screen.x += map_view->x_scroll_adj->value; screen.y += map_view->y_scroll_adj->value; x_value = screen.x - (x_scroll_adj->page_size/2); y_value = screen.y - (y_scroll_adj->page_size/2); if (x_value + x_scroll_adj->page_size > x_scroll_adj->upper) x_value = x_scroll_adj->upper - x_scroll_adj->page_size; if (x_value < 0) x_value = 0; if (y_value + y_scroll_adj->page_size > y_scroll_adj->upper) y_value = y_scroll_adj->upper - y_scroll_adj->page_size; if (y_value < 0) y_value = 0; if (fabs(x_scroll_adj->value - x_value) < 10.0 && fabs(y_scroll_adj->value - y_value) < 10.0) return; gtk_adjustment_set_value(x_scroll_adj, x_value); gtk_adjustment_set_value(y_scroll_adj, y_value); map_view->centre = *new_centre; }
Imath::Box2i viewport_t::world_to_screen( const Imath::Box2f& b) const { return Imath::Box2i( world_to_screen( Imath::V2f( b.min.x, b.min.y)), world_to_screen( Imath::V2f( b.max.x, b.max.y))); }