Example #1
0
int shot(int argc, char * argv[])
{
	char path[256] = ROOT_PATH"/shot.bmp";
	if (argc >= 2) {
		strcpy(path, argv[1]);
	}
	return screen_shot(path);
}
Example #2
0
static void __emu_one_frame(int rasters, int frameskip)
{
	SDL_Event e;
	while (SDL_PollEvent(&e) != 0)
		switch (e.type) {
			case SDL_WINDOWEVENT:
				if (!is_fullscreen && e.window.event == SDL_WINDOWEVENT_RESIZED) {
					DEBUG("UI: Window is resized to %d x %d" NL,
						e.window.data1,
						e.window.data2
					);
					screen_window_resized(e.window.data1, e.window.data2);
				}
				break;
			case SDL_QUIT:
				if (QUESTION_WINDOW("?No|!Yes", "Are you sure to exit?") == 1)
					XEMUEXIT(0);
				return;
			case SDL_KEYDOWN:
			case SDL_KEYUP:
				if (e.key.repeat == 0 && (e.key.windowID == sdl_winid || e.key.windowID == 0)) {
					int code = emu_kbd(e.key.keysym, e.key.state == SDL_PRESSED);
					if (code == 0xF9)		// // OSD REPLAY, default key GRAVE
						osd_replay(e.key.state == SDL_PRESSED ? 0 : OSD_FADE_START);
					else if (code && e.key.state == SDL_PRESSED)
						switch(code) {
#ifndef __EMSCRIPTEN__
							case 0xFF:	// FULLSCREEN toogle, default key F11
								screen_set_fullscreen(!is_fullscreen);
								break;
							case 0xFE:	// EXIT, default key F9
								if (QUESTION_WINDOW("?No|!Yes", "Are you sure to exit?") == 1)
									XEMUEXIT(0);
								break;
							case 0xFD:	// SCREENSHOT, default key F10
								screen_shot(ep_pixels, current_directory, "screenshot-*.png");
								break;
#endif
							case 0xFC:	// RESET, default key PAUSE
								if (e.key.keysym.mod & (KMOD_LSHIFT | KMOD_RSHIFT)) {
									zxemu_on = 0;
									(void)ep_init_ram();
								}
								ep_reset();
								break;
							case 0xFB:	// DOWNGRADE CPU SPEED, default key PAGE DOWN
								if (_cpu_speed_index)
									set_cpu_clock_with_osd(_cpu_speeds[-- _cpu_speed_index]);
								break;
							case 0xFA:	// UPGRADE CPU SPEED, default key PAGE UP
								if (_cpu_speed_index < 3)
									set_cpu_clock_with_osd(_cpu_speeds[++ _cpu_speed_index]);
								break;
							case 0xF8:	// CONSOLE, key pad minus
								if (!console_is_open)
									console_open_window();
								break;
						}
				} else if (e.key.repeat == 0)
					DEBUG("UI: NOT HANDLED KEY EVENT: repeat = %d windowid = %d [our win = %d]" NL, e.key.repeat, e.key.windowID, sdl_winid);
				break;
			case SDL_MOUSEMOTION:
				if (e.motion.windowID == sdl_winid)
					emu_mouse_motion(e.motion.xrel, e.motion.yrel);
				break;
			case SDL_MOUSEWHEEL:
				if (e.wheel.windowID == sdl_winid)
					emu_mouse_wheel(
						e.wheel.x, e.wheel.y,
						e.wheel.direction == SDL_MOUSEWHEEL_FLIPPED
					);
				break;
			case SDL_MOUSEBUTTONDOWN:
			case SDL_MOUSEBUTTONUP:
				if (e.button.windowID == sdl_winid)
					emu_mouse_button(e.button.button, e.button.state == SDL_PRESSED);
				break;
			default:
				joy_sdl_event(&e);
				break;
		}
	if (!frameskip)
		screen_present_frame(ep_pixels);	// this should be after the event handler, as eg screenshot function needs locked texture state if this feature is used at all
	xepgui_iteration();
	monitor_process_queued();
	emu_timekeeping_delay((1000000.0 * rasters * 57.0) / (double)NICK_SLOTS_PER_SEC);
}
Example #3
0
static void send_codes(vx_display_t * disp, const uint8_t * data, int datalen)
{
    state_t * state = disp->impl;

    vx_code_input_stream_t * cins = vx_code_input_stream_create(data, datalen);
    // Peek at the code type to determine which function to call
    uint32_t code = cins->read_uint32(cins);
    pthread_mutex_lock(&state->mutex);
    switch(code) {
        case OP_BUFFER_RESOURCES:
            vx_resc_manager_buffer_resources(state->mgr, data, datalen);
            break;

        case OP_BUFFER_ENABLED:
            vx_gl_renderer_buffer_enabled(state->glrend, cins);
            break;
        case OP_BUFFER_CODES:
            vx_gl_renderer_set_buffer_render_codes(state->glrend, cins);
            break;
        case OP_LAYER_INFO:
            vx_gl_renderer_update_layer(state->glrend, cins);
            {
                vx_code_input_stream_t * c2 = vx_code_input_stream_create(data, datalen);
                c2->read_uint32(c2); //discard code

                process_layer(state, c2);
                vx_code_input_stream_destroy(c2);
            }
            // XXX Also need to intercept these!
            break;
        case OP_DEALLOC_RESOURCES:
            vx_gl_renderer_remove_resources(state->glrend, cins);
            break;

        case OP_LAYER_VIEWPORT_REL:
            process_viewport_rel(state, cins);
            break;
        case OP_LAYER_VIEWPORT_ABS:
            process_viewport_abs(state, cins);
            break;

        case OP_LAYER_CAMERA:
            process_camera_codes(state, cins);
            break;

        case OP_WINDOW_SCENE: {
            save_scene(state, cins);
            break;
        }

        case OP_WINDOW_SCREENSHOT:
            screen_shot(state, cins);
            break;
        case OP_WINDOW_MOVIE_RECORD:
        case OP_WINDOW_MOVIE_STOP:
            movie(state, cins, code == OP_WINDOW_MOVIE_RECORD);
            break;
        default:
            assert(0);
    }
    pthread_mutex_unlock(&state->mutex);

    // Buffer layer manager, outside the lock
    switch(code) {
        case OP_BUFFER_ENABLED:
            vx_gtk_buffer_manager_codes(state->buffer_manager, data, datalen);
            break;
        case OP_BUFFER_CODES:
            vx_gtk_buffer_manager_codes(state->buffer_manager, data, datalen);
            break;
        case OP_LAYER_INFO:
            vx_gtk_buffer_manager_codes(state->buffer_manager, data, datalen);
            break;
    }


    vx_code_input_stream_destroy(cins);
}