diff -u freeciv-1.11.10/client/gui-gtk/gui_main.c freeciv-1.11.10-mine/client/gui-gtk/gui_main.c --- freeciv-1.11.10/client/gui-gtk/gui_main.c Fri Aug 3 07:08:39 2001 +++ freeciv-1.11.10-mine/client/gui-gtk/gui_main.c Sat Aug 4 17:31:13 2001 @@ -123,7 +123,7 @@ GtkWidget * text_scrollbar; GtkWidget * inputline; -GtkWidget * map_horizontal_scrollbar, *map_vertical_scrollbar; +/*GtkWidget * map_horizontal_scrollbar, *map_vertical_scrollbar;*/ gint gdk_input_id; GdkWindow * root_window; @@ -363,11 +363,13 @@ GtkWidget *ahbox; GtkWidget *frame; + GtkWidget *map_scroll_button; GtkWidget *menubar; GtkWidget *table; GtkWidget *ebox, *paned; GtkStyle *text_style; int i; + gint *dir; paned = gtk_vpaned_new(); gtk_container_add(GTK_CONTAINER(toplevel), paned); @@ -545,12 +547,12 @@ gtk_table_attach_defaults(GTK_TABLE(table), more_arrow_pixmap, 4, 5, 1, 2); } - table = gtk_table_new( 2, 2, FALSE ); + table = gtk_table_new( 3, 3, FALSE ); gtk_box_pack_start( GTK_BOX( hbox ), table, TRUE, TRUE, 0 ); frame = gtk_frame_new( NULL ); gtk_table_attach(GTK_TABLE(table), frame, - 0, 1, 0, 1, + 1, 2, 1, 2, GTK_EXPAND|GTK_SHRINK|GTK_FILL, GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0 ); @@ -564,13 +566,109 @@ gtk_drawing_area_size(GTK_DRAWING_AREA(map_canvas), 510, 300); gtk_container_add(GTK_CONTAINER(frame), map_canvas); - map_horizontal_scrollbar = gtk_hscrollbar_new(NULL); - gtk_table_attach(GTK_TABLE(table), map_horizontal_scrollbar, 0, 1, 1, 2, - GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); - - map_vertical_scrollbar = gtk_vscrollbar_new(NULL); - gtk_table_attach(GTK_TABLE(table), map_vertical_scrollbar, 1, 2, 0, 1, - 0, GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0); + /* map_horizontal_scrollbar = gtk_hscrollbar_new(NULL); + gtk_table_attach(GTK_TABLE(table), map_horizontal_scrollbar, 0, 1, 1, 2, + GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); + + map_vertical_scrollbar = gtk_vscrollbar_new(NULL); + gtk_table_attach(GTK_TABLE(table), map_vertical_scrollbar, 1, 2, 0, 1, + 0, GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0);*/ + + dir=(gint*)malloc(2*sizeof(int)); + dir[0]=1; + dir[1]=is_isometric?-1:0; + map_scroll_button=gtk_button_new_with_label(is_isometric?_("N\no\nr\nt\nh\nE\na\ns\nt"):_("E\na\ns\nt")); + gtk_table_attach(GTK_TABLE(table), map_scroll_button, 2, 3, 1, 2, + 0, GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0); + gtk_signal_connect(GTK_OBJECT(map_scroll_button), "button_press_event", + GTK_SIGNAL_FUNC(map_scroll_push_callback), + (gpointer)dir); + gtk_signal_connect(GTK_OBJECT(map_scroll_button), "button_release_event", + GTK_SIGNAL_FUNC(map_scroll_release_callback),NULL); + + dir=(gint*)malloc(2*sizeof(int)); + dir[0]=is_isometric?1:0; + dir[1]=1; + map_scroll_button=gtk_button_new_with_label(is_isometric?_("SouthEast"):_("South")); + gtk_table_attach(GTK_TABLE(table), map_scroll_button, 1, 2, 2, 3, + GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); + gtk_signal_connect(GTK_OBJECT(map_scroll_button), "button_press_event", + GTK_SIGNAL_FUNC(map_scroll_push_callback), + (gpointer)dir); + gtk_signal_connect(GTK_OBJECT(map_scroll_button), "button_release_event", + GTK_SIGNAL_FUNC(map_scroll_release_callback),NULL); + + dir=(gint*)malloc(2*sizeof(int)); + dir[0]=-1; + dir[1]=is_isometric?1:0; + map_scroll_button=gtk_button_new_with_label(is_isometric?_("S\no\nu\nt\nh\nW\ne\ns\nt"):_("W\ne\ns\nt")); + gtk_table_attach(GTK_TABLE(table), map_scroll_button, 0, 1, 1, 2, + 0, GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0); + gtk_signal_connect(GTK_OBJECT(map_scroll_button), "button_press_event", + GTK_SIGNAL_FUNC(map_scroll_push_callback), + (gpointer)dir); + gtk_signal_connect(GTK_OBJECT(map_scroll_button), "button_release_event", + GTK_SIGNAL_FUNC(map_scroll_release_callback),NULL); + + dir=(gint*)malloc(2*sizeof(int)); + dir[0]=is_isometric?-1:0; + dir[1]=-1; + map_scroll_button=gtk_button_new_with_label(is_isometric?_("NorthWest"):_("North")); + gtk_table_attach(GTK_TABLE(table), map_scroll_button, 1, 2, 0, 1, + GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); + gtk_signal_connect(GTK_OBJECT( map_scroll_button ), "button_press_event", + GTK_SIGNAL_FUNC(map_scroll_push_callback), + (gpointer)dir); + gtk_signal_connect(GTK_OBJECT(map_scroll_button), "button_release_event", + GTK_SIGNAL_FUNC(map_scroll_release_callback),NULL); + + dir=(gint*)malloc(2*sizeof(int)); + dir[0]=is_isometric?0:1; + dir[1]=-1; + map_scroll_button=gtk_button_new_with_label(is_isometric?_("N"):_("NE")); + gtk_table_attach(GTK_TABLE(table), map_scroll_button, 2, 3, 0, 1, + GTK_SHRINK, GTK_SHRINK, 0, 0); + gtk_signal_connect(GTK_OBJECT( map_scroll_button ), "button_press_event", + GTK_SIGNAL_FUNC(map_scroll_push_callback), + (gpointer)dir); + gtk_signal_connect(GTK_OBJECT(map_scroll_button), "button_release_event", + GTK_SIGNAL_FUNC(map_scroll_release_callback),NULL); + + dir=(gint*)malloc(2*sizeof(int)); + dir[0]=is_isometric?0:-1; + dir[1]=1; + map_scroll_button=gtk_button_new_with_label(is_isometric?_("S"):_("SW")); + gtk_table_attach(GTK_TABLE(table), map_scroll_button, 0, 1, 2, 3, + GTK_SHRINK, GTK_SHRINK, 0, 0); + gtk_signal_connect(GTK_OBJECT( map_scroll_button ), "button_press_event", + GTK_SIGNAL_FUNC(map_scroll_push_callback), + (gpointer)dir); + gtk_signal_connect(GTK_OBJECT(map_scroll_button), "button_release_event", + GTK_SIGNAL_FUNC(map_scroll_release_callback),NULL); + + dir=(gint*)malloc(2*sizeof(int)); + dir[0]=-1; + dir[1]=is_isometric?0:-1; + map_scroll_button=gtk_button_new_with_label(is_isometric?_("W"):_("NW")); + gtk_table_attach(GTK_TABLE(table), map_scroll_button, 0, 1, 0, 1, + GTK_SHRINK, GTK_SHRINK, 0, 0); + gtk_signal_connect(GTK_OBJECT( map_scroll_button ), "button_press_event", + GTK_SIGNAL_FUNC(map_scroll_push_callback), + (gpointer)dir); + gtk_signal_connect(GTK_OBJECT(map_scroll_button), "button_release_event", + GTK_SIGNAL_FUNC(map_scroll_release_callback),NULL); + + dir=(gint*)malloc(2*sizeof(int)); + dir[0]=1; + dir[1]=is_isometric?0:1; + map_scroll_button=gtk_button_new_with_label(is_isometric?_("E"):_("SE")); + gtk_table_attach(GTK_TABLE(table), map_scroll_button, 2, 3, 2, 3, + GTK_SHRINK, GTK_SHRINK, 0, 0); + gtk_signal_connect(GTK_OBJECT( map_scroll_button ), "button_press_event", + GTK_SIGNAL_FUNC(map_scroll_push_callback), + (gpointer)dir); + gtk_signal_connect(GTK_OBJECT(map_scroll_button), "button_release_event", + GTK_SIGNAL_FUNC(map_scroll_release_callback),NULL); /* Event signals */ gtk_signal_connect( GTK_OBJECT( map_canvas ), "expose_event", @@ -607,7 +705,6 @@ text_style->text[GTK_STATE_INSENSITIVE]= text_style->text[GTK_STATE_NORMAL]; gtk_widget_set_style (text, text_style); - gtk_text_set_word_wrap(GTK_TEXT(text), 1); main_message_area = GTK_TEXT (text); diff -u freeciv-1.11.10/client/gui-gtk/mapview.c freeciv-1.11.10-mine/client/gui-gtk/mapview.c --- freeciv-1.11.10/client/gui-gtk/mapview.c Sat Jul 28 12:23:18 2001 +++ freeciv-1.11.10-mine/client/gui-gtk/mapview.c Sat Aug 4 17:31:13 2001 @@ -24,6 +24,8 @@ #include #include +#include + #include "fcintl.h" #include "game.h" #include "government.h" /* government_graphic() */ @@ -67,11 +69,14 @@ #define EXTRA_BOTTOM_ROW (is_isometric ? 6 : 1) /* contains the x0, y0 coordinates of the upper left corner block */ -int map_view_x0, map_view_y0; +int map_view_x0, map_view_y0, map_view_dx, map_view_dy; /* used by map_canvas expose func */ int force_full_repaint; +/* used for a delay in the scrolling idle */ +time_t lasttime; + /* T: area above the actual tile. M: the top of the actual tile. B: the bottom of the actual tile. @@ -140,7 +145,6 @@ GdkPixmap *scaled_intro_pixmap; int scaled_intro_pixmap_width, scaled_intro_pixmap_height; -static GtkObject *map_hadj, *map_vadj; /************************************************************************** @@ -874,7 +878,7 @@ } update_map_canvas_visible(); - update_map_canvas_scrollbars(); + /* update_map_canvas_scrollbars();*/ refresh_overview_viewrect(); if (hover_state == HOVER_GOTO || hover_state == HOVER_PATROL) create_line_at_mouse_pos(); @@ -901,7 +905,6 @@ overview_canvas_store_width, overview_canvas_store_height); gtk_widget_set_usize(overview_canvas, 2*x, 2*y); - update_map_canvas_scrollbars_size(); } /************************************************************************** @@ -1087,7 +1090,6 @@ 0, 0, NORMAL_TILE_WIDTH*map_canvas_store_twidth, NORMAL_TILE_HEIGHT*map_canvas_store_theight); - update_map_canvas_scrollbars_size(); map_resized=TRUE; } @@ -1121,7 +1123,7 @@ if(map_resized) { update_map_canvas_visible(); - update_map_canvas_scrollbars(); + /* update_map_canvas_scrollbars();*/ refresh_overview_viewrect(); } @@ -1760,7 +1762,6 @@ { if (!ssprite || !width || !height) return; - gdk_gc_set_clip_origin(civ_gc, canvas_x, canvas_y); gdk_gc_set_clip_mask(civ_gc, ssprite->mask); @@ -1873,66 +1874,43 @@ /************************************************************************** ... **************************************************************************/ -void update_map_canvas_scrollbars(void) -{ - gtk_adjustment_set_value(GTK_ADJUSTMENT(map_hadj), map_view_x0); - gtk_adjustment_set_value(GTK_ADJUSTMENT(map_vadj), map_view_y0); +void map_scroll_push_callback(GtkWidget* w, GtkAdjustment* adj, gpointer data){ + gint *dir=data; + map_view_dx=dir[0]; + map_view_dy=dir[1]; + gtk_idle_add(map_scroll_idle,(gpointer)TRUE); /*The data lets it be removed easily*/ } /************************************************************************** ... **************************************************************************/ -void update_map_canvas_scrollbars_size(void) -{ - map_hadj=gtk_adjustment_new(-1, 0, map.xsize, 1, - map_canvas_store_twidth, map_canvas_store_twidth); - map_vadj=gtk_adjustment_new(-1, 0, map.ysize+EXTRA_BOTTOM_ROW, 1, - map_canvas_store_theight, map_canvas_store_theight); - gtk_range_set_adjustment(GTK_RANGE(map_horizontal_scrollbar), - GTK_ADJUSTMENT(map_hadj)); - gtk_range_set_adjustment(GTK_RANGE(map_vertical_scrollbar), - GTK_ADJUSTMENT(map_vadj)); - - gtk_signal_connect(GTK_OBJECT(map_hadj), "value_changed", - GTK_SIGNAL_FUNC(scrollbar_jump_callback), (gpointer)TRUE); - gtk_signal_connect(GTK_OBJECT(map_vadj), "value_changed", - GTK_SIGNAL_FUNC(scrollbar_jump_callback), (gpointer)FALSE); +void map_scroll_release_callback(GtkWidget* w, GtkAdjustment* adj, gpointer data){ + map_view_dx=0; + map_view_dy=0; + gtk_idle_remove_by_data((gpointer)TRUE); } /************************************************************************** ... **************************************************************************/ -void scrollbar_jump_callback(GtkAdjustment *adj, gpointer hscrollbar) -{ - int last_map_view_x0; - int last_map_view_y0; - - gfloat percent=adj->value; - - if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) - return; - - last_map_view_x0=map_view_x0; - last_map_view_y0=map_view_y0; - - if(hscrollbar) - map_view_x0=percent; - else { - map_view_y0=percent; - map_view_y0=(map_view_y0<0) ? 0 : map_view_y0; - map_view_y0= - (map_view_y0>map.ysize+EXTRA_BOTTOM_ROW-map_canvas_store_theight) ? - map.ysize+EXTRA_BOTTOM_ROW-map_canvas_store_theight : - map_view_y0; - } - - if (last_map_view_x0!=map_view_x0 || last_map_view_y0!=map_view_y0) { +void map_scroll_idle(gpointer data){ + if (difftime(time(NULL),lasttime)>.2){ + map_view_x0+=map_view_dx; + map_view_y0+=map_view_dy; + if (map_view_x0>map.xsize) + map_view_x0=0; + if (map_view_y0>map.ysize+EXTRA_BOTTOM_ROW-map_canvas_store_theight) + map_view_y0=map.ysize+EXTRA_BOTTOM_ROW-map_canvas_store_theight; + if (map_view_x0<0) + map_view_x0=map.xsize-1; + if (map_view_y0<0) + map_view_y0=0; update_map_canvas_visible(); refresh_overview_viewrect(); + time(&lasttime); } } - /************************************************************************** draw a line from src_x,src_y -> dest_x,dest_y on both map_canvas and map_canvas_store diff -u freeciv-1.11.10/client/gui-gtk/mapview.h freeciv-1.11.10-mine/client/gui-gtk/mapview.h --- freeciv-1.11.10/client/gui-gtk/mapview.h Sun Feb 4 08:45:20 2001 +++ freeciv-1.11.10-mine/client/gui-gtk/mapview.h Sat Aug 4 17:43:46 2001 @@ -45,8 +45,9 @@ void pixmap_put_black_tile(GdkDrawable *pm, int canvas_x, int canvas_y); -void scrollbar_jump_callback(GtkAdjustment *adj, gpointer hscrollbar); -void update_map_canvas_scrollbars_size(void); +void map_scroll_push_callback(GtkWidget* w, GtkAdjustment *adj, gpointer data); +void map_scroll_release_callback(GtkWidget* w,GtkAdjustment* adj,gpointer data); +void map_scroll_idle(gpointer data); void get_map_xy(int canvas_x, int canvas_y, int *map_x, int *map_y);