예제 #1
0
/* 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);
}
예제 #2
0
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
    }
}