int uidisplay_init( int width, int height ) { int x, y, error; libspectrum_dword black; const char *machine_name; colour_format_t colour_format; #if !GTK_CHECK_VERSION( 3, 0, 0 ) g_signal_connect( G_OBJECT( gtkui_drawing_area ), "expose_event", G_CALLBACK( gtkdisplay_expose ), NULL ); colour_format = FORMAT_x8b8g8r8; #else g_signal_connect( G_OBJECT( gtkui_drawing_area ), "draw", G_CALLBACK( gtkdisplay_draw ), NULL ); colour_format = FORMAT_x8r8g8b8; #endif /* #if !GTK_CHECK_VERSION( 3, 0, 0 ) */ g_signal_connect( G_OBJECT( gtkui_drawing_area ), "configure_event", G_CALLBACK( drawing_area_resize_callback ), NULL ); error = init_colours( colour_format ); if( error ) return error; black = settings_current.bw_tv ? bw_colours[0] : gtkdisplay_colours[0]; for( y = 0; y < DISPLAY_SCREEN_HEIGHT + 4; y++ ) for( x = 0; x < DISPLAY_SCREEN_WIDTH + 3; x++ ) *(libspectrum_dword*)( rgb_image + y * rgb_pitch + 4 * x ) = black; image_width = width; image_height = height; image_scale = width / DISPLAY_ASPECT_WIDTH; register_scalers( 0 ); display_refresh_all(); if ( scaler_select_scaler( current_scaler ) ) scaler_select_scaler( SCALER_NORMAL ); gtkdisplay_load_gfx_mode(); machine_name = libspectrum_machine_name( machine_current->machine ); gtkstatusbar_update_machine( machine_name ); display_ui_initialised = 1; return 0; }
int uidisplay_init(int width, int height) { int error; image_width = width; image_height = height; image_scale = width / DISPLAY_ASPECT_WIDTH; error = register_scalers(); if( error ) return error; display_ui_initialised = 1; display_refresh_all(); return 0; }
static int drawing_area_resize( int width, int height, int force_scaler ) { int size; size = width / DISPLAY_ASPECT_WIDTH; if( size > height / DISPLAY_SCREEN_HEIGHT ) size = height / DISPLAY_SCREEN_HEIGHT; /* If we're the same size as before, no need to do anything else */ if( size == gtkdisplay_current_size ) return 0; gtkdisplay_current_size = size; register_scalers( force_scaler ); memset( scaled_image, 0, sizeof( scaled_image ) ); #if GTK_CHECK_VERSION( 3, 0, 0 ) /* Create a bigger surface for the new display size */ float scale = (float)gtkdisplay_current_size / image_scale; if( surface ) cairo_surface_destroy( surface ); surface = cairo_image_surface_create_for_data( scaled_image, CAIRO_FORMAT_RGB24, scale * image_width, scale * image_height, scaled_pitch ); #endif /* #if GTK_CHECK_VERSION( 3, 0, 0 ) */ display_refresh_all(); return 0; }