Example #1
0
static UI_MENU_CALLBACK(save_screenshot_callback)
{
    char title[20];
    char *name = NULL;
    int width;
    int height;
    gfxoutputdrv_t *selected_driver = NULL;

    if (activated) {
        sprintf(title, "Choose %s file", (char *)param);
        name = sdl_ui_file_selection_dialog(title, FILEREQ_MODE_SAVE_FILE);
        if (name != NULL) {
            width = sdl_active_canvas->draw_buffer->draw_buffer_width;
            height = sdl_active_canvas->draw_buffer->draw_buffer_height;
            memcpy(sdl_active_canvas->draw_buffer->draw_buffer, sdl_ui_get_draw_buffer(), width * height);
            selected_driver = gfxoutput_get_driver((char *)param);
            util_add_extension(&name, selected_driver->default_extension);
            if (screenshot_save((char *)param, name, sdl_active_canvas) < 0) {
                ui_error("Cannot save screenshot.");
            }
            lib_free(name);
        }
    }
    return NULL;
}
static int output_graphics_open(unsigned int prnr,
                                output_parameter_t *output_parameter)
{
    const char *filename;
    int device = 0;
    output_gfx[prnr].gfxoutputdrv = gfxoutput_get_driver("BMP");

    if (output_gfx[prnr].gfxoutputdrv == NULL) {
        return -1;
    }

    switch (prnr) {
        case 0:
            resources_get_int("Printer4TextDevice", &device);
            break;
        case 1:
            resources_get_int("Printer5TextDevice", &device);
            break;
        case 2:
            resources_get_int("PrinterUserportTextDevice", &device);
            break;
    }

    resources_get_string_sprintf("PrinterTextDevice%d", &filename, device + 1);

    if (filename == NULL) {
        filename = "prngfx";
    }

    output_gfx[prnr].filename = lib_malloc(strlen(filename) + 3);
    sprintf(output_gfx[prnr].filename, "%s00", filename);

    output_gfx[prnr].screenshot.width = output_parameter->maxcol;
    output_gfx[prnr].screenshot.height = output_parameter->maxrow;
    output_gfx[prnr].screenshot.dpi_x = output_parameter->dpi_x;
    output_gfx[prnr].screenshot.dpi_y = output_parameter->dpi_y;
    output_gfx[prnr].screenshot.y_offset = 0;
    output_gfx[prnr].screenshot.palette = output_parameter->palette;

    lib_free(output_gfx[prnr].line);
    output_gfx[prnr].line = lib_malloc(output_parameter->maxcol);
    memset(output_gfx[prnr].line, OUTPUT_PIXEL_WHITE, output_parameter->maxcol);

    output_gfx[prnr].line_pos = 0;
    output_gfx[prnr].line_no = 0;

    output_gfx[prnr].screenshot.convert_line = output_graphics_line_data;
    output_gfx[prnr].isopen = 0;

    return 0;
}
Example #3
0
int memmap_screenshot_save(const char *drvname, const char *filename, int x_size, int y_size, BYTE *gfx, BYTE *palette)
{
    gfxoutputdrv_t *drv;

    if ((drv = gfxoutput_get_driver(drvname)) == NULL) {
        return -1;
    }

    if ((drv->savememmap)(filename, x_size, y_size, gfx, palette) < 0) {
        log_error(screenshot_log, "Saving failed...");
        return -1;
    }
    return 0;
}
Example #4
0
void sdl_menu_ffmpeg_init(void)
{
    int i;
    gfxoutputdrv_format_t *format;
    const char *w;

    ffmpeg_drv = gfxoutput_get_driver("FFMPEG");

    if (!ffmpeg_drv) {
#ifdef SDL_DEBUG
fprintf(stderr, "%s: no driver found\n", __func__);
#endif
        return;
    }

    format = ffmpeg_drv->formatlist;
    i = 0;

    do {
        format_menu[i].string = format->name;
        format_menu[i].type = MENU_ENTRY_RESOURCE_RADIO;
        format_menu[i].callback = custom_FFMPEGFormat_callback;
        format_menu[i].data = (ui_callback_data_t)(format->name);
#ifdef SDL_DEBUG
fprintf(stderr, "%s: format %i: %s\n", __func__, i, (format->name) ? format->name : "(NULL)");
#endif

        format++;
        i++;

        if (i == MAX_FORMATS) {
#ifdef SDL_DEBUG
fprintf(stderr, "%s: FIXME format %i > %i (MAX)\n", __func__, i, MAX_FORMATS);
#endif
            break;
        }
    } while (format->name);

    format_menu[i].string = NULL;

    resources_get_string("FFMPEGFormat", &w);
    update_codec_menus(w);
}
Example #5
0
int screenshot_save(const char *drvname, const char *filename,
                    struct video_canvas_s *canvas)
{
    screenshot_t screenshot;
    gfxoutputdrv_t *drv;
    int result;

    if ((drv = gfxoutput_get_driver(drvname)) == NULL) {
        return -1;
    }

    if (recording_driver == drv) {
        ui_error(translate_text(IDGS_SORRY_NO_MULTI_RECORDING));
        return -1;
    }

    if (machine_screenshot(&screenshot, canvas) < 0) {
        log_error(screenshot_log, "Retrieving screen geometry failed.");
        return -1;
    }

    if (drv->record != NULL) {
        recording_driver = drv;
        recording_canvas = canvas;

        reopen_recording_drivername = lib_stralloc(drvname);
        reopen_recording_canvas = canvas;
        reopen_filename = lib_stralloc(filename);
    }

    result = screenshot_save_core(&screenshot, drv, filename);

    if (result < 0) {
        recording_driver = NULL;
        recording_canvas = NULL;
    }

    return result;
}