void ksymp_get_picture(KSYMediaPlayer *mp, char* buf,int width, int height, int stride)
{
    assert(mp);
    pthread_mutex_lock(&mp->mutex);
    video_screenshot(mp->ffplayer, buf,width,height,stride);
    pthread_mutex_unlock(&mp->mutex);
}
Exemplo n.º 2
0
Arquivo: input.c Projeto: erikg/glpong
int
input_do (game_t * g)
{
    static SDL_Event ev;

    if (SDL_PollEvent (&ev) != 0)
	switch (ev.type)
	{
	case SDL_KEYDOWN:
	    if (ev.key.keysym.sym == 27)
		return 0;
	    else if (ev.key.keysym.sym == SDLK_F10)
		video_screenshot ();
	    else
		state[ev.key.keysym.sym] = 1;
	    break;
	case SDL_KEYUP:
	    state[ev.key.keysym.sym] = 0;
	    break;
	}
    if (state[SDLK_RIGHT])
	g->player[PLAYER].X += 4.0 * timer_delta ();
    if (state[SDLK_LEFT])
	g->player[PLAYER].X -= 4.0 * timer_delta ();
    return 1;
}
Exemplo n.º 3
0
bool jet__handle_event(event_t *event)
{
	if(event->type == EVENT_TYPE_QUIT)
	{
		jet__quit = true;
		return true;
	}

	if(event->type == EVENT_TYPE_SCREENSHOT)
		video_screenshot();

	if(event->type == EVENT_TYPE_KEYDOWN && event->data.key == EVENT_KEY_TURBO)
		game_turbo_enable();
	else if(event->type == EVENT_TYPE_KEYUP && event->data.key == EVENT_KEY_TURBO)
		game_turbo_disable();

	return false;
}
Exemplo n.º 4
0
void gtkui_screenshot_save() {
	// Save a screenshot from the GUI
	GtkWidget *dialog = gtk_file_chooser_dialog_new("Save screenshot (.png)",
				GTK_WINDOW(gtkwindow),
				GTK_FILE_CHOOSER_ACTION_SAVE,
				"Cancel", GTK_RESPONSE_CANCEL,
				"Save", GTK_RESPONSE_ACCEPT,
				NULL);
	
	char sshotpath[512];
	char sshotfile[768];
	snprintf(sshotpath, sizeof(sshotpath), "%sscreenshots/", nstpaths.nstdir);
	snprintf(sshotfile, sizeof(sshotfile), "%s%s.png", sshotpath, nstpaths.gamename);
	gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), sshotfile);
	gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), sshotpath);
	
	if (gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
		char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
		video_screenshot(filename);
		g_free(filename);
	}
	
	gtk_widget_destroy(dialog);
}
Exemplo n.º 5
0
void input_match_keyboard(Input::Controllers *controllers, SDL_Event event) {
    // Match NES buttons to keyboard buttons

    nesinput_t input;

    input.nescode = 0x00;
    input.player = 0;
    input.pressed = 0;
    input.turboa = 0;
    input.turbob = 0;

    if (event.type == SDL_KEYDOWN) {
        input.pressed = 1;
    }

    for (int i = 0; i < NUMGAMEPADS; i++) {
        if (player[i].u == event.key.keysym.scancode) {
            input.nescode = Input::Controllers::Pad::UP;
            input.player = i;
        }
        else if (player[i].d == event.key.keysym.scancode) {
            input.nescode = Input::Controllers::Pad::DOWN;
            input.player = i;
        }
        else if (player[i].l == event.key.keysym.scancode) {
            input.nescode = Input::Controllers::Pad::LEFT;
            input.player = i;
        }
        else if (player[i].r == event.key.keysym.scancode) {
            input.nescode = Input::Controllers::Pad::RIGHT;
            input.player = i;
        }
        else if (player[i].select == event.key.keysym.scancode) {
            input.nescode = Input::Controllers::Pad::SELECT;
            input.player = i;
        }
        else if (player[i].start == event.key.keysym.scancode) {
            input.nescode = Input::Controllers::Pad::START;
            input.player = i;
        }
        else if (player[i].a == event.key.keysym.scancode) {
            input.nescode = Input::Controllers::Pad::A;
            input.player = i;
        }
        else if (player[i].b == event.key.keysym.scancode) {
            input.nescode = Input::Controllers::Pad::B;
            input.player = i;
        }
        else if (player[i].ta == event.key.keysym.scancode) {
            input.nescode = Input::Controllers::Pad::A;
            input.player = i;
            input.turboa = 1;
        }
        else if (player[i].tb == event.key.keysym.scancode) {
            input.nescode = Input::Controllers::Pad::B;
            input.player = i;
            input.turbob = 1;
        }
    }

    input_inject(controllers, input);

    if (event.key.keysym.scancode == ui.altspeed && event.type == SDL_KEYDOWN) {
        timing_set_altspeed();
    }
    if (event.key.keysym.scancode == ui.altspeed && event.type == SDL_KEYUP) {
        timing_set_default();
    }

    const Uint8 *keys = SDL_GetKeyboardState(NULL);

    // Insert Coins
    controllers->vsSystem.insertCoin = 0;
    if (keys[ui.insertcoin1]) {
        controllers->vsSystem.insertCoin |= Input::Controllers::VsSystem::COIN_1;
    }
    if (keys[ui.insertcoin2]) {
        controllers->vsSystem.insertCoin |= Input::Controllers::VsSystem::COIN_2;
    }

    // Process non-game events
    if (keys[ui.fdsflip]) {
        nst_flip_disk();
    }
    if (keys[ui.fdsswitch]) {
        nst_switch_disk();
    }
    if (keys[ui.qsave1]) {
        nst_state_quicksave(0);
    }
    if (keys[ui.qsave2]) {
        nst_state_quicksave(1);
    }
    if (keys[ui.qload1]) {
        nst_state_quickload(0);
    }
    if (keys[ui.qload2]) {
        nst_state_quickload(1);
    }

    // Screenshot
    if (keys[ui.screenshot]) {
        video_screenshot(NULL);
    }

    // Reset
    if (keys[ui.reset]) {
        nst_reset(0);
    }

    // Rewinder
    if (keys[ui.rwstart]) {
        nst_set_rewind(0);
    }
    if (keys[ui.rwstop]) {
        nst_set_rewind(1);
    }

    // Video
    if (keys[ui.fullscreen]) {
        video_toggle_fullscreen();
    }
    if (keys[ui.filter]) {
        video_toggle_filter();
    }
    if (keys[ui.scalefactor]) {
        video_toggle_scalefactor();
    }

    // NSF
    if (nst_nsf) {
        Nsf nsf(emulator);

        if (keys[SDL_SCANCODE_UP]) {
            nsf.PlaySong();
            video_clear_buffer();
            video_disp_nsf();
        }
        if (keys[SDL_SCANCODE_DOWN]) {
            //nsf.StopSong();
        }
        if (keys[SDL_SCANCODE_LEFT]) {
            nsf.SelectPrevSong();
            video_clear_buffer();
            video_disp_nsf();
        }
        if (keys[SDL_SCANCODE_RIGHT]) {
            nsf.SelectNextSong();
            video_clear_buffer();
            video_disp_nsf();
        }
    }

    // Escape exits when not in GUI mode
    if (keys[SDL_SCANCODE_ESCAPE]) {
        if (conf.misc_disable_gui) {
            nst_schedule_quit();
        }
    }
}