diff -urd -X freeciv.current/diff_ignore freeciv.current/client/gui-gtk/plrdlg.c work/client/gui-gtk/plrdlg.c --- freeciv.current/client/gui-gtk/plrdlg.c Thu Aug 30 15:06:00 2001 +++ work/client/gui-gtk/plrdlg.c Sat Sep 1 00:29:45 2001 @@ -166,6 +166,8 @@ players_list=gtk_clist_new_with_titles(NUM_COLUMNS, titles); + gtk_clist_set_row_height(GTK_CLIST(players_list),40); + for(i=0; ihas_mask || sprite->mask == NULL) { *start_x = 0; @@ -359,24 +361,44 @@ mask_image = gdk_image_get(sprite->mask, 0, 0, sprite->width, sprite->height); - for (i = 0; i < sprite->width; i++) - if (gdk_image_get_pixel(mask_image, i, 0) != 0) - break; + for (i = 0; i < sprite->width; i++) { + for (j = 0; j < sprite->height; j++) { + if (gdk_image_get_pixel(mask_image, i, j) != 0) { + goto cont1; + } + } + } +cont1: *start_x = i; - for (i = 0; i < sprite->height; i++) - if (gdk_image_get_pixel(mask_image, 0, i) != 0) - break; + for (i = 0; i < sprite->height; i++) { + for (j = 0; j < sprite->width; j++) { + if (gdk_image_get_pixel(mask_image, j, i) != 0) { + goto cont2; + } + } + } +cont2: *start_y = i; - for (i = sprite->width - 1; i >= 0; i--) - if (gdk_image_get_pixel(mask_image, i, 0) != 0) - break; + for (i = sprite->width - 1; i >= 0; i--) { + for (j = 0; j < sprite->height; j++) { + if (gdk_image_get_pixel(mask_image, i, j) != 0) { + goto cont3; + } + } + } +cont3: *end_x = i; - for (i = sprite->height - 1; i >= 0; i--) - if (gdk_image_get_pixel(mask_image, 0, i) != 0) - break; + for (i = sprite->height - 1; i >= 0; i--) { + for (j = 0; j < sprite->width; j++) { + if (gdk_image_get_pixel(mask_image, j, i) != 0) { + goto cont4; + } + } + } +cont4: *end_y = i; gdk_image_destroy(mask_image); @@ -391,37 +413,52 @@ static void build_flag(int playerindex) { int start_x, start_y, end_x, end_y, flag_h, flag_w, newflag_h, newflag_w; - GdkPixmap *flag_pixmap; + GdkPixmap *flag_pixmap, *flag_pixmap2; SPRITE *flag_sprite; flag_sprite = get_nation_by_plr(&game.players[playerindex])->flag_sprite; get_sprite_bounding_box(flag_sprite, &start_x, &start_y, &end_x, &end_y); - assert(start_x == 0); - assert(start_y == 0); - assert(end_x >= MINIMAL_FLAG_WIDTH); - assert(end_y >= MINIMAL_FLAG_HEIGHT); - flag_w = (end_x - start_x) + 1; flag_h = (end_y - start_y) + 1; + assert(flag_w > 0 && flag_h > 0); + /* now scaling the original pixmap */ newflag_h = GTK_CLIST(players_list)->row_height; newflag_w = ((double) newflag_h / flag_h) * flag_w; - freelog(LOG_DEBUG, "%dx%d %dx%d %dx%d", flag_sprite->width, + freelog(LOG_NORMAL, "%dx%d %dx%d %dx%d", flag_sprite->width, flag_sprite->height, flag_w, flag_h, newflag_w, newflag_h); - flag_pixmap = gtk_scale_pixmap(flag_sprite->pixmap, flag_w, flag_h, - newflag_w, newflag_h); + /* make the pixmap white */ + flag_pixmap = gdk_pixmap_new(root_window, newflag_w, newflag_h, -1); + gdk_gc_set_foreground(civ_gc, colors_standard[COLOR_STD_WHITE]); + gdk_draw_rectangle(flag_pixmap, civ_gc, 1, 0, 0, newflag_w, newflag_h); + + /* draw the flag over the white background */ +#if 1 + gdk_gc_set_clip_origin(civ_gc, 0, 0); + gdk_gc_set_clip_mask(civ_gc, flag_sprite->mask); +#endif + gdk_draw_pixmap(flag_pixmap, civ_gc, flag_sprite->pixmap, start_x, + start_y, 0, 0, flag_w, flag_h); + /* scale it */ + flag_pixmap2 = gtk_scale_pixmap(flag_pixmap, flag_w, flag_h, + newflag_w, newflag_h); + + gdk_pixmap_unref(flag_pixmap); + +#if 0 /* put a black border around it */ gdk_gc_set_foreground(civ_gc, colors_standard[COLOR_STD_BLACK]); gdk_draw_rectangle(flag_pixmap, civ_gc, 0, 0, 0, newflag_w, newflag_h); +#endif /* and finaly store the pixmap in the static flags array */ - flags[playerindex] = flag_pixmap; + flags[playerindex] = flag_pixmap2; } /**************************************************************************