inline void display_objects( const unsigned set, char *buffer ) { display_labels( buffer, "123456789ABCDEF", G, set ); }
void graphics_redraw(struct container *co) { int scale=transform_get_scale(co->trans); int i,slimit=255,tlimit=255,plimit=255; int bw[4],w[4],t[4]; struct display_list **disp=co->disp; struct graphics *gra=co->gra; #if 0 printf("scale=%d center=0x%lx,0x%lx mercator scale=%f\n", scale, co->trans->center.x, co->trans->center.y, transform_scale(co->trans->center.y)); #endif display_free(co->disp, display_end); transform_setup_source_rect(co->trans); gra->draw_mode(gra, draw_mode_begin); for (i = 0 ; i < data_window_type_end; i++) { data_window_begin(co->data_window[i]); } gra->gc_set_linewidth(gra->gc[GC_RAIL], 3); bw[0]=0; bw[1]=0; bw[2]=0; bw[3]=0; w[0]=1; w[1]=1; w[2]=1; w[3]=1; t[0]=0xf; t[1]=0xf; t[2]=0xf; t[3]=0xf; if (scale < 2) { tlimit=0xff; slimit=0xff; bw[0]=17; w[0]=15; bw[1]=19; w[1]=17; bw[2]=19; w[2]=17; bw[3]=21; w[3]=17; } else if (scale < 4) { tlimit=0xff; slimit=0xff; bw[0]=11; w[0]=9; bw[1]=13; w[1]=11; bw[2]=13; w[2]=11; bw[3]=15; w[3]=11; } else if (scale < 8) { tlimit=0xff; slimit=0xff; bw[0]=5; w[0]=3; bw[1]=11; w[1]=9; bw[2]=11; w[2]=9; bw[3]=13; w[3]=9; t[0]=0xa; t[1]=0xf; } else if (scale < 16) { tlimit=0xff; slimit=0xff; bw[1]=9; w[1]=7; bw[2]=9; w[2]=7; bw[3]=11; w[3]=7; t[0]=0x9; t[1]=0xe; } else if (scale < 32) { tlimit=0xff; slimit=0xff; bw[1]=5; w[1]=3; bw[2]=5; w[2]=3; bw[3]=5; w[3]=3; t[0]=0x8; t[1]=0xb; } else if (scale < 64) { tlimit=0xf; slimit=0x6; bw[1]=5; w[1]=3; bw[2]=5; w[2]=3; bw[3]=5; w[3]=3; t[0]=0x8; t[1]=0xa; } else if (scale < 128) { tlimit=0xc; slimit=0x6; plimit=0x1e; w[1]=3; w[2]=3; bw[3]=5; w[3]=3; t[0]=0x7; t[1]=0xa; } else if (scale < 256) { tlimit=0xb; slimit=0x5; plimit=0x1a; w[2]=3; bw[3]=5; w[3]=3; t[0]=0x7; t[1]=0x8; } else if (scale < 512) { tlimit=0x9; slimit=0x5; plimit=0x14; w[1]=0; w[2]=1; bw[3]=3; w[3]=1; t[0]=0x4; t[1]=0x7; } else if (scale < 1024) { tlimit=0x8; slimit=0x4; slimit=0x4; plimit=0x11; w[1]=0; w[2]=1; bw[3]=3; w[3]=1; t[0]=0x3; t[1]=0x5; } else if (scale < 2048) { tlimit=0x5; slimit=0x3; plimit=0x10; bw[3]=3; w[3]=1; t[0]=0x2; t[1]=0x4; } else if (scale < 4096) { bw[3]=3; w[3]=1; tlimit=0x4; slimit=0x2; plimit=0xf; t[0]=0x2; t[1]=0x3; } else if (scale < 8192) { bw[3]=3; w[3]=1; tlimit=0x3; slimit=0x2; plimit=0xf; t[0]=0x1; t[1]=0x2; } else { bw[3]=3; w[3]=1; tlimit=0x2; slimit=0x2; plimit=0xf; t[0]=0x1; t[1]=0x4; } gra->gc_set_linewidth(gra->gc[GC_STREET_SMALL], w[0]); gra->gc_set_linewidth(gra->gc[GC_STREET_NO_PASS], w[0]); gra->gc_set_linewidth(gra->gc[GC_STREET_SMALL_B], bw[0]); gra->gc_set_linewidth(gra->gc[GC_STREET_MID], w[1]); gra->gc_set_linewidth(gra->gc[GC_STREET_MID_B], bw[1]); gra->gc_set_linewidth(gra->gc[GC_STREET_BIG], w[2]); gra->gc_set_linewidth(gra->gc[GC_STREET_BIG_B], bw[2]); gra->gc_set_linewidth(gra->gc[GC_STREET_BIG2], w[3]); gra->gc_set_linewidth(gra->gc[GC_STREET_BIG2_B], bw[3]); gra->gc_set_linewidth(gra->gc[GC_STREET_ROUTE], w[3]+7+w[3]/2); profile_timer(NULL); graphics_draw(co->map_data, file_border_ply, co, display_rail, plimit, 48, poly_draw_block); graphics_draw(co->map_data, file_woodland_ply, co, display_wood, plimit, 48, poly_draw_block); graphics_draw(co->map_data, file_other_ply, co, display_other, plimit, 48, poly_draw_block); graphics_draw(co->map_data, file_town_twn, co, display_town, tlimit, 48, town_draw_block); graphics_draw(co->map_data, file_water_ply, co, display_water, plimit, 48, poly_draw_block); graphics_draw(co->map_data, file_sea_ply, co, display_sea, plimit, 48, poly_draw_block); /* todo height, tunnel, bridge, street_bti ??? */ #if 0 graphics_draw(co->map_data, file_height_ply, co, display_other1, plimit, 48, poly_draw_block); #endif if (scale < 256) { graphics_draw(co->map_data, file_rail_ply, co, display_rail, plimit, 48, poly_draw_block); } profile_timer("map_draw"); plugin_call_draw(co); profile_timer("plugin"); #if 0 draw_poly(map, &co->d_tunnel_ply, "Tunnel", 0, 11, plimit); #endif graphics_draw(co->map_data, file_street_str, co, display_street, slimit, 7, street_draw_block); display_draw(disp[display_sea], gra, gra->gc[GC_WATER_FILL], NULL); display_draw(disp[display_wood], gra, gra->gc[GC_WOOD], NULL); display_draw(disp[display_other], gra, gra->gc[GC_TOWN_FILL], gra->gc[GC_TOWN_LINE]); display_draw(disp[display_other1], gra, gra->gc[GC_BUILDING], NULL); display_draw(disp[display_other2], gra, gra->gc[GC_BUILDING_2], NULL); display_draw(disp[display_other3], gra, gra->gc[GC_PARK], NULL); display_draw(disp[display_water], gra, gra->gc[GC_WATER_FILL], gra->gc[GC_WATER_LINE]); display_draw(disp[display_rail], gra, gra->gc[GC_RAIL], NULL); street_route_draw(co); display_draw(disp[display_street_route], gra, gra->gc[GC_STREET_ROUTE], NULL); if (bw[0]) { display_draw(disp[display_street_no_pass], gra, gra->gc[GC_STREET_SMALL_B], NULL); display_draw(disp[display_street], gra, gra->gc[GC_STREET_SMALL_B], NULL); } if (bw[1]) display_draw(disp[display_street1], gra, gra->gc[GC_STREET_MID_B], NULL); if (bw[2]) display_draw(disp[display_street2], gra, gra->gc[GC_STREET_BIG_B], NULL); if (bw[3]) display_draw(disp[display_street3], gra, gra->gc[GC_STREET_BIG2_B], NULL); if (w[0]) { display_draw(disp[display_street_no_pass], gra, gra->gc[GC_STREET_NO_PASS], NULL); display_draw(disp[display_street], gra, gra->gc[GC_STREET_SMALL], NULL); } if (w[1]) display_draw(disp[display_street1], gra, gra->gc[GC_STREET_MID], gra->gc[GC_BLACK]); display_draw(disp[display_street2], gra, gra->gc[GC_STREET_BIG], gra->gc[GC_BLACK]); display_draw(disp[display_street3], gra, gra->gc[GC_STREET_BIG2], gra->gc[GC_BLACK]); if (w[3] > 1) display_draw(disp[display_street3], gra, gra->gc[GC_STREET_BIG2_L], NULL); display_draw(disp[display_poi], gra, gra->gc[GC_BLACK], NULL); profile_timer("display_draw"); if (scale < 2) { display_labels(disp[display_street], gra, gra->gc[GC_TEXT_FG], gra->gc[GC_TEXT_BG], gra->font[1]); display_labels(disp[display_street1], gra, gra->gc[GC_TEXT_FG], gra->gc[GC_TEXT_BG], gra->font[1]); } else { display_labels(disp[display_street], gra, gra->gc[GC_TEXT_FG], gra->gc[GC_TEXT_BG], gra->font[0]); display_labels(disp[display_street1], gra, gra->gc[GC_TEXT_FG], gra->gc[GC_TEXT_BG], gra->font[0]); } display_labels(disp[display_street2], gra, gra->gc[GC_TEXT_FG], gra->gc[GC_TEXT_BG], gra->font[0]); display_labels(disp[display_street3], gra, gra->gc[GC_TEXT_FG], gra->gc[GC_TEXT_BG], gra->font[0]); for (i = display_town+t[1] ; i < display_town+0x10 ; i++) display_labels(disp[i], gra, gra->gc[GC_TEXT_FG], gra->gc[GC_TEXT_BG], gra->font[0]); for (i = display_town+t[0] ; i < display_town+t[1] ; i++) display_labels(disp[i], gra, gra->gc[GC_TEXT_FG], gra->gc[GC_TEXT_BG], gra->font[1]); for (i = display_town ; i < display_town+t[0] ; i++) display_labels(disp[i], gra, gra->gc[GC_TEXT_FG], gra->gc[GC_TEXT_BG], gra->font[2]); for (i = display_town ; i < display_town+0x10 ; i++) display_draw(disp[i], gra, gra->gc[GC_BLACK], NULL); display_draw(disp[display_bti], gra, gra->gc[GC_BLACK], NULL); profile_timer("labels"); gra->draw_mode(gra, draw_mode_end); for (i = 0 ; i < data_window_type_end; i++) { data_window_end(co->data_window[i]); } #if 0 map_scrollbars_update(map); #endif }
inline void display_properties( const unsigned set, char *buffer ) { display_labels( buffer, "abcdefghijklmno", M, set ); }