/* Change the size of the canvas. */ void video_canvas_resize(video_canvas_t *canvas, char resize_canvas) { if (console_mode || video_disabled_mode) { return; } canvas->videoconfig->readable = 1; /* it's not direct rendering */ if (canvas->gdk_image != NULL) { g_object_unref(canvas->gdk_image); } canvas->gdk_image = gdk_image_new(GDK_IMAGE_FASTEST, gtk_widget_get_visual(canvas->emuwindow), canvas->draw_buffer->canvas_physical_width, canvas->draw_buffer->canvas_physical_height); #ifdef HAVE_HWSCALE lib_free(canvas->hwscale_image); canvas->hwscale_image = lib_malloc(canvas->gdk_image->width * canvas->gdk_image->height * 4); #endif if (video_canvas_set_palette(canvas, canvas->palette) < 0) { log_debug("Setting palette for this mode failed. (Try 16/24/32 bpp.)"); exit(-1); } ui_resize_canvas_window(canvas); }
void ui_enable_drive_status(ui_drive_enable_t enable, int *drive_led_color) { int i, j, true_emu; int num_app_shells = get_num_shells(); resources_get_int("DriveTrueEmulation", &true_emu); DBG(("ui_enable_drive_status: enable=%x true_emu=%d", enable, true_emu)); if (!true_emu) { /* * Note that I'm changing the criterion used to decide whether * to show the UI elements for the drive. I think it is silly that * a drive which has no disk inserted is not shown, since the menu * has a handy item to insert (attach) such a disk. * 'enable' tends to be 0 when !true_emu. * Additionally, I had to change drive-resources.c to get this * function to be called when a drive type was changed from * DRIVE_TYPE_NONE to something else. (It was already called when * it was made DRIVE_TYPE_NONE). */ for (i = 0; i < NUM_DRIVES; i++) { DBG(("ui_enable_drive_status: drive %d type %d", i, drive_get_disk_drive_type(i))); /* if (strcmp(&(last_attached_images[i][0]), "") != 0) { //} */ if (drive_get_disk_drive_type(i) != DRIVE_TYPE_NONE) { enable |= 1 << i; } } } enabled_drives = enable; drive_active_led = drive_led_color; for (i = 0; i < num_app_shells; i++) { for (j = 0; j < NUM_DRIVES; j++) { if (enabled_drives & (1 << j)) { /* drive enabled */ gtk_widget_show(app_shells[i].drive_status[j].event_box); if (true_emu) { gtk_widget_show(app_shells[i].drive_status[j].track_label); if (drive_num_leds(j) == 1) { gtk_widget_show(app_shells[i].drive_status[j].led); #if !defined(HAVE_CAIRO) gtk_widget_hide(app_shells[i].drive_status[j].led1); gtk_widget_hide(app_shells[i].drive_status[j].led2); #endif } else { #if !defined(HAVE_CAIRO) gtk_widget_hide(app_shells[i].drive_status[j].led); gtk_widget_show(app_shells[i].drive_status[j].led1); gtk_widget_show(app_shells[i].drive_status[j].led2); #else gtk_widget_show(app_shells[i].drive_status[j].led); #endif } } else { gtk_widget_hide(app_shells[i].drive_status[j].track_label); gtk_widget_hide(app_shells[i].drive_status[j].led); #if !defined(HAVE_CAIRO) gtk_widget_hide(app_shells[i].drive_status[j].led1); gtk_widget_hide(app_shells[i].drive_status[j].led2); #endif } } else { /* drive disabled */ gtk_widget_hide(app_shells[i].drive_status[j].event_box); } } #if 0 /* enable this when a dynamic multiline status bar is needed. be aware that x128 has weird sized windows on startup, because of the uninitialized canvas window(-size) during startup */ /* resize according to new needs */ { int width, height; gdk_window_get_size(app_shells[i].canvas->window, &width, &height); ui_resize_canvas_window(app_shells[i].canvas, width, height); } #endif } }