void gr_draw_frame() { if ( jump ) return ; /* Actualiza paleta */ if ( palette_changed ) gr_refresh_palette(); if ( !trans_table_updated ) gr_make_trans_table(); /* Bloquea el bitmap de pantalla */ if ( gr_lock_screen() < 0 ) return ; /* Dibuja la pantalla */ gr_draw_screen( scrbitmap, GLODWORD( librender, RESTORETYPE ), GLODWORD( librender, DUMPTYPE ) ); /* Fading */ if ( fade_on || fade_set ) { gr_fade_step() ; if ( background ) background->modified = 1 ; } /* Actualiza la paleta y la pantalla */ gr_unlock_screen() ; }
GRAPH * gr_text_bitmap( int fontid, const char * text, int alignment ) { GRAPH * gr ; int x, y ; FONT * f ; // Splinter if ( !text || !*text ) return NULL; if ( fontid < 0 || fontid >= MAX_FONTS || !fonts[fontid] ) return NULL; // Incorrect font type f = fonts[fontid] ; /* Un refresco de paleta en mitad de gr_text_put puede provocar efectos * desagradables al modificar el tipo de letra del sistema */ if ( palette_changed ) gr_refresh_palette() ; gr = bitmap_new_syslib( gr_text_width( fontid, ( const unsigned char * ) text ), gr_text_height( fontid, ( const unsigned char * ) text ), sys_pixel_format->depth ) ; if ( !gr ) return NULL; gr_clear( gr ) ; if ( !gr_text_put( gr, 0, fontid, 0, -gr_text_margintop( fontid, ( const unsigned char * ) text ), ( const unsigned char * ) text ) ) { bitmap_destroy( gr ); return NULL; } switch ( alignment ) { case ALIGN_TOP_LEFT: // 0 case ALIGN_TOP: // 1 case ALIGN_TOP_RIGHT: // 2 y = 0 ; break ; case ALIGN_CENTER_LEFT: // 3 case ALIGN_CENTER: // 4 case ALIGN_CENTER_RIGHT:// 5 y = gr->height / 2 ; break ; default: y = gr->height - 1 ; break ; } switch ( alignment ) { case ALIGN_TOP_LEFT: // 0 case ALIGN_CENTER_LEFT: // 3 case ALIGN_BOTTOM_LEFT: // 6 x = 0 ; break ; case ALIGN_TOP: // 1 case ALIGN_CENTER: // 4 case ALIGN_BOTTOM: // 7 x = gr->width / 2 ; break ; default: x = gr->width - 1 ; break ; } bitmap_add_cpoint( gr, x, y ) ; return gr ; }