static int info_scroll( int n, REGION * clip, int * z, int * drawme ) { * z = scrolls[n].z; * drawme = 1; * clip = * scrolls[n].region; scroll_update( n ); // Force clean map (need optimization) if ( scrolls[n].destid ) gr_clear_region( bitmap_get( scrolls[n].destfile, scrolls[n].destid ), scrolls[n].region ); return 1; }
void gr_draw_screen( GRAPH * dest, int restore_type, int dump_type ) { int a ; GRAPH * orig_scrbitmap = scrbitmap; scrbitmap = dest ; if ( background && background->modified ) { restore_type = 1; dump_type = 1; } /* Update the object list */ gr_update_objects_mark_rects( restore_type, dump_type ); /* Restore the background */ if ( !dump_type || !restore_type ) { updaterects_count = gr_mark_rects( updaterects ); } else { updaterects_count = 1; updaterects[ 0 ].x = 0; updaterects[ 0 ].y = 0; updaterects[ 0 ].x2 = scr_width - 1; updaterects[ 0 ].y2 = scr_height - 1; } if ( !restore_type ) { /* PARTIAL_RESTORE */ if ( background->info_flags & GI_CLEAN ) { for ( a = 0; a < updaterects_count; a++ ) gr_clear_region( scrbitmap, &updaterects[ a ] ); } else { for ( a = 0; a < updaterects_count; a++ ) gr_blit( scrbitmap, &updaterects[ a ], 0, 0, B_NOCOLORKEY, background ); } } else if ( restore_type == 1 ) { /* COMPLETE_RESTORE */ if ( background->info_flags & GI_CLEAN ) gr_clear( scrbitmap ) ; else gr_blit( scrbitmap, NULL, 0, 0, B_NOCOLORKEY, background ); updaterects_count = 1; updaterects[ 0 ].x = 0; updaterects[ 0 ].y = 0; updaterects[ 0 ].x2 = scr_width - 1; updaterects[ 0 ].y2 = scr_height - 1; } /* Dump the objects */ if ( dump_type == 0 ) { /* Dump only changed & enabled objects */ gr_draw_objects( updaterects, updaterects_count ); } else { /* Dump everything */ gr_draw_objects_complete(); } /* Reset the zone-to-update array for the next frame */ gr_rects_clear(); if ( background && background->modified ) background->modified = 0; if ( scrbitmap && scrbitmap->modified ) scrbitmap->modified = 0; scrbitmap = orig_scrbitmap; }