diff -ru -X /home/jjm/cvs/no.freeciv FreecivCVS/client/gui-xaw/gui_main.c freeciv/client/gui-xaw/gui_main.c --- FreecivCVS/client/gui-xaw/gui_main.c Fri Jan 28 09:38:38 2000 +++ freeciv/client/gui-xaw/gui_main.c Mon Mar 13 14:02:01 2000 @@ -187,7 +187,7 @@ Window root_window; /* this pixmap acts as a backing store for the map_canvas widget */ -Pixmap map_canvas_store; +Pixmap map_canvas_store = 0; int map_canvas_store_twidth, map_canvas_store_theight; /* this pixmap acts as a backing store for the overview_canvas widget */ @@ -266,7 +266,6 @@ int i; Pixmap icon_pixmap; XtTranslations TextFieldTranslations; - Dimension w,h; parse_options(argc, argv); @@ -420,13 +419,7 @@ x_interval_id=XtAppAddTimeOut(app_context, 500, (XtTimerCallbackProc)timer_callback, NULL); - XtVaGetValues(map_canvas, XtNheight, &h, XtNwidth, &w, NULL); - map_canvas_store_twidth=w/NORMAL_TILE_WIDTH; - map_canvas_store_theight=h/NORMAL_TILE_HEIGHT; - map_canvas_store=XCreatePixmap(display, XtWindow(map_canvas), - map_canvas_store_twidth*NORMAL_TILE_WIDTH, - map_canvas_store_theight*NORMAL_TILE_HEIGHT, - display_depth); + map_canvas_resize(); overview_canvas_store=0; set_overview_dimensions(80, 50); diff -ru -X /home/jjm/cvs/no.freeciv FreecivCVS/client/gui-xaw/mapview.c freeciv/client/gui-xaw/mapview.c --- FreecivCVS/client/gui-xaw/mapview.c Sat Jan 22 22:13:13 2000 +++ freeciv/client/gui-xaw/mapview.c Mon Mar 13 14:28:49 2000 @@ -751,14 +751,13 @@ void map_canvas_expose(Widget w, XEvent *event, Region exposed, void *client_data) { - Dimension height, width; + Dimension width, height; int tile_width, tile_height; - XtVaGetValues(w, XtNheight, &height, XtNwidth, &width, NULL); - + XtVaGetValues(w, XtNwidth, &width, XtNheight, &height, NULL); tile_width=(width+NORMAL_TILE_WIDTH-1)/NORMAL_TILE_WIDTH; tile_height=(height+NORMAL_TILE_HEIGHT-1)/NORMAL_TILE_HEIGHT; - + if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) { if(!intro_gfx_sprite) load_intro_gfx(); if(height!=scaled_intro_pixmap_height || width!=scaled_intro_pixmap_width) { @@ -772,50 +771,40 @@ scaled_intro_pixmap_width=width; scaled_intro_pixmap_height=height; } - + if(scaled_intro_pixmap) XCopyArea(display, scaled_intro_pixmap, XtWindow(map_canvas), civ_gc, event->xexpose.x, event->xexpose.y, event->xexpose.width, event->xexpose.height, event->xexpose.x, event->xexpose.y); + + if(map_canvas_store_twidth !=tile_width || + map_canvas_store_theight!=tile_height) { /* resized? */ + map_canvas_resize(); + } return; } if(scaled_intro_pixmap) { XFreePixmap(display, scaled_intro_pixmap); scaled_intro_pixmap=0; scaled_intro_pixmap_height=0; } - - if(map.xsize) { /* do we have a map at all */ - int tile_width=(width+NORMAL_TILE_WIDTH-1)/NORMAL_TILE_WIDTH; - int tile_height=(height+NORMAL_TILE_HEIGHT-1)/NORMAL_TILE_HEIGHT; + if(map.xsize) { /* do we have a map at all */ if(map_canvas_store_twidth !=tile_width || map_canvas_store_theight!=tile_height) { /* resized? */ - - XFreePixmap(display, map_canvas_store); - - map_canvas_store_twidth=tile_width; - map_canvas_store_theight=tile_height; - - - map_canvas_store=XCreatePixmap(display, XtWindow(map_canvas), - tile_width*NORMAL_TILE_WIDTH, - tile_height*NORMAL_TILE_HEIGHT, - display_depth); - + map_canvas_resize(); + XFillRectangle(display, map_canvas_store, fill_bg_gc, 0, 0, NORMAL_TILE_WIDTH*map_canvas_store_twidth, NORMAL_TILE_HEIGHT*map_canvas_store_theight); - + update_map_canvas(0, 0, map_canvas_store_twidth, map_canvas_store_theight, 1); - + update_map_canvas_scrollbars(); refresh_overview_viewrect(); - - } - else { + } else { XCopyArea(display, map_canvas_store, XtWindow(map_canvas), civ_gc, event->xexpose.x, event->xexpose.y, @@ -824,6 +813,26 @@ } } refresh_overview_canvas(); +} + +/************************************************************************** +... +**************************************************************************/ +void map_canvas_resize(void) +{ + Dimension width, height; + + if (map_canvas_store) + XFreePixmap(display, map_canvas_store); + + XtVaGetValues(map_canvas, XtNwidth, &width, XtNheight, &height, NULL); + map_canvas_store_twidth=((width-1)/NORMAL_TILE_WIDTH)+1; + map_canvas_store_theight=((height-1)/NORMAL_TILE_HEIGHT)+1; + + map_canvas_store=XCreatePixmap(display, XtWindow(map_canvas), + map_canvas_store_twidth*NORMAL_TILE_WIDTH, + map_canvas_store_theight*NORMAL_TILE_HEIGHT, + display_depth); } /************************************************************************** diff -ru -X /home/jjm/cvs/no.freeciv FreecivCVS/client/gui-xaw/mapview.h freeciv/client/gui-xaw/mapview.h --- FreecivCVS/client/gui-xaw/mapview.h Sat Sep 18 15:27:10 1999 +++ freeciv/client/gui-xaw/mapview.h Mon Mar 13 14:21:51 2000 @@ -36,6 +36,7 @@ void *client_data); void map_canvas_expose(Widget w, XEvent *event, Region exposed, void *client_data); +void map_canvas_resize(void); void pixmap_put_tile(Pixmap pm, int x, int y, int map_x, int map_y, int citymode);