static void check_osd_inputs(running_machine &machine) { // check for toggling fullscreen mode if (machine.ui_input().pressed(IPT_OSD_1)) winwindow_toggle_full_screen(); // check for taking fullscreen snap if (machine.ui_input().pressed(IPT_OSD_2)) winwindow_take_snap(); // check for taking fullscreen video if (machine.ui_input().pressed(IPT_OSD_3)) winwindow_take_video(); // check for taking fullscreen video if (machine.ui_input().pressed(IPT_OSD_4)) winwindow_toggle_fsfx(); }
void sdl_event_manager::process_window_event(running_machine &machine, SDL_Event &sdlevent) { sdl_window_info *window = GET_WINDOW(&sdlevent.window); if (window == NULL) return; switch (sdlevent.window.event) { case SDL_WINDOWEVENT_CLOSE: machine.schedule_exit(); break; case SDL_WINDOWEVENT_LEAVE: machine.ui_input().push_mouse_leave_event(window->target()); m_app_has_mouse_focus = 0; break; case SDL_WINDOWEVENT_MOVED: window->notify_changed(); m_focus_window = window; break; case SDL_WINDOWEVENT_RESIZED: #ifndef SDLMAME_WIN32 /* FIXME: SDL2 sends some spurious resize events on Ubuntu * while in fullscreen mode. Ignore them for now. */ if (!window->fullscreen()) #endif { //printf("event data1,data2 %d x %d %ld\n", event.window.data1, event.window.data2, sizeof(SDL_Event)); window->resize(sdlevent.window.data1, sdlevent.window.data2); } m_focus_window = window; break; case SDL_WINDOWEVENT_ENTER: m_app_has_mouse_focus = 1; /* fall through */ case SDL_WINDOWEVENT_FOCUS_GAINED: case SDL_WINDOWEVENT_EXPOSED: case SDL_WINDOWEVENT_MAXIMIZED: case SDL_WINDOWEVENT_RESTORED: m_focus_window = window; break; } }
static void check_osd_inputs(running_machine &machine) { sdl_window_info *window = sdlinput_get_focus_window(); // check for toggling fullscreen mode if (machine.ui_input().pressed(IPT_OSD_1)) { sdl_window_info *curwin = sdl_window_list; while (curwin != (sdl_window_info *)NULL) { curwin->toggle_full_screen(); curwin = curwin->m_next; } } if (machine.ui_input().pressed(IPT_OSD_2)) { //FIXME: on a per window basis video_config.fullstretch = !video_config.fullstretch; machine.ui().popup_time(1, "Uneven stretch %s", video_config.fullstretch? "enabled":"disabled"); } if (machine.ui_input().pressed(IPT_OSD_4)) { //FIXME: on a per window basis video_config.keepaspect = !video_config.keepaspect; machine.ui().popup_time(1, "Keepaspect %s", video_config.keepaspect? "enabled":"disabled"); } #if (USE_OPENGL || SDLMAME_SDL2) //FIXME: on a per window basis if (machine.ui_input().pressed(IPT_OSD_5)) { video_config.filter = !video_config.filter; machine.ui().popup_time(1, "Filter %s", video_config.filter? "enabled":"disabled"); } #endif if (machine.ui_input().pressed(IPT_OSD_6)) window->modify_prescale(-1); if (machine.ui_input().pressed(IPT_OSD_7)) window->modify_prescale(1); }
static void gfxset_handle_keys(running_machine &machine, ui_gfx_state &state, int xcells, int ycells) { // handle gfxset selection (open bracket,close bracket) if (machine.ui_input().pressed(IPT_UI_PREV_GROUP)) { if (state.gfxset.set > 0) state.gfxset.set--; else if (state.gfxset.devindex > 0) { state.gfxset.devindex--; state.gfxset.set = state.gfxdev[state.gfxset.devindex].setcount - 1; } state.bitmap_dirty = true; } if (machine.ui_input().pressed(IPT_UI_NEXT_GROUP)) { if (state.gfxset.set < state.gfxdev[state.gfxset.devindex].setcount - 1) state.gfxset.set++; else if (state.gfxset.devindex < state.gfxset.devcount - 1) { state.gfxset.devindex++; state.gfxset.set = 0; } state.bitmap_dirty = true; } // cache some info in locals int dev = state.gfxset.devindex; int set = state.gfxset.set; ui_gfx_info &info = state.gfxdev[dev]; gfx_element &gfx = *info.interface->gfx(set); // handle cells per line (minus,plus) if (machine.ui_input().pressed(IPT_UI_ZOOM_OUT)) { info.columns[set] = xcells - 1; state.bitmap_dirty = true; } if (machine.ui_input().pressed(IPT_UI_ZOOM_IN)) { info.columns[set] = xcells + 1; state.bitmap_dirty = true; } // clamp within range if (info.columns[set] < 2) { info.columns[set] = 2; state.bitmap_dirty = true; } if (info.columns[set] > 128) { info.columns[set] = 128; state.bitmap_dirty = true; } // handle rotation (R) if (machine.ui_input().pressed(IPT_UI_ROTATE)) { info.rotate[set] = orientation_add(ROT90, info.rotate[set]); state.bitmap_dirty = true; } // handle navigation within the cells (up,down,pgup,pgdown) if (machine.ui_input().pressed_repeat(IPT_UI_UP, 4)) { info.offset[set] -= xcells; state.bitmap_dirty = true; } if (machine.ui_input().pressed_repeat(IPT_UI_DOWN, 4)) { info.offset[set] += xcells; state.bitmap_dirty = true; } if (machine.ui_input().pressed_repeat(IPT_UI_PAGE_UP, 6)) { info.offset[set] -= xcells * ycells; state.bitmap_dirty = true; } if (machine.ui_input().pressed_repeat(IPT_UI_PAGE_DOWN, 6)) { info.offset[set] += xcells * ycells; state.bitmap_dirty = true; } if (machine.ui_input().pressed_repeat(IPT_UI_HOME, 4)) { info.offset[set] = 0; state.bitmap_dirty = true; } if (machine.ui_input().pressed_repeat(IPT_UI_END, 4)) { info.offset[set] = gfx.elements(); state.bitmap_dirty = true; } // clamp within range if (info.offset[set] + xcells * ycells > ((gfx.elements() + xcells - 1) / xcells) * xcells) { info.offset[set] = ((gfx.elements() + xcells - 1) / xcells) * xcells - xcells * ycells; state.bitmap_dirty = true; } if (info.offset[set] < 0) { info.offset[set] = 0; state.bitmap_dirty = true; } // handle color selection (left,right) if (machine.ui_input().pressed_repeat(IPT_UI_LEFT, 4)) { info.color[set] -= 1; state.bitmap_dirty = true; } if (machine.ui_input().pressed_repeat(IPT_UI_RIGHT, 4)) { info.color[set] += 1; state.bitmap_dirty = true; } // clamp within range if (info.color[set] >= info.color_count[set]) { info.color[set] = info.color_count[set] - 1; state.bitmap_dirty = true; } if (info.color[set] < 0) { info.color[set] = 0; state.bitmap_dirty = true; } }
static void palette_handle_keys(running_machine &machine, ui_gfx_state &state) { device_palette_interface *palette = state.palette.interface; int rowcount, screencount; int total; // handle zoom (minus,plus) if (machine.ui_input().pressed(IPT_UI_ZOOM_OUT)) state.palette.columns /= 2; if (machine.ui_input().pressed(IPT_UI_ZOOM_IN)) state.palette.columns *= 2; // clamp within range if (state.palette.columns <= 4) state.palette.columns = 4; if (state.palette.columns > 64) state.palette.columns = 64; // handle colormap selection (open bracket,close bracket) if (machine.ui_input().pressed(IPT_UI_PREV_GROUP)) { if (state.palette.which) state.palette.which = 0; else if (state.palette.devindex > 0) { state.palette.devindex--; palette_set_device(machine, state); palette = state.palette.interface; state.palette.which = (palette->indirect_entries() > 0); } } if (machine.ui_input().pressed(IPT_UI_NEXT_GROUP)) { if (!state.palette.which && palette->indirect_entries() > 0) state.palette.which = 1; else if (state.palette.devindex < state.palette.devcount - 1) { state.palette.devindex++; palette_set_device(machine, state); palette = state.palette.interface; state.palette.which = 0; } } // cache some info in locals total = state.palette.which ? palette->indirect_entries() : palette->entries(); // determine number of entries per row and total rowcount = state.palette.columns; screencount = rowcount * rowcount; // handle keyboard navigation if (machine.ui_input().pressed_repeat(IPT_UI_UP, 4)) state.palette.offset -= rowcount; if (machine.ui_input().pressed_repeat(IPT_UI_DOWN, 4)) state.palette.offset += rowcount; if (machine.ui_input().pressed_repeat(IPT_UI_PAGE_UP, 6)) state.palette.offset -= screencount; if (machine.ui_input().pressed_repeat(IPT_UI_PAGE_DOWN, 6)) state.palette.offset += screencount; if (machine.ui_input().pressed_repeat(IPT_UI_HOME, 4)) state.palette.offset = 0; if (machine.ui_input().pressed_repeat(IPT_UI_END, 4)) state.palette.offset = total; // clamp within range if (state.palette.offset + screencount > ((total + rowcount - 1) / rowcount) * rowcount) state.palette.offset = ((total + rowcount - 1) / rowcount) * rowcount - screencount; if (state.palette.offset < 0) state.palette.offset = 0; }
static void tilemap_handle_keys(running_machine &machine, ui_gfx_state &state, int viswidth, int visheight) { // handle tilemap selection (open bracket,close bracket) if (machine.ui_input().pressed(IPT_UI_PREV_GROUP) && state.tilemap.which > 0) { state.tilemap.which--; state.bitmap_dirty = true; } if (machine.ui_input().pressed(IPT_UI_NEXT_GROUP) && state.tilemap.which < machine.tilemap().count() - 1) { state.tilemap.which++; state.bitmap_dirty = true; } // cache some info in locals tilemap_t *tilemap = machine.tilemap().find(state.tilemap.which); uint32_t mapwidth = tilemap->width(); uint32_t mapheight = tilemap->height(); // handle zoom (minus,plus) if (machine.ui_input().pressed(IPT_UI_ZOOM_OUT) && state.tilemap.zoom > 0) { state.tilemap.zoom--; state.bitmap_dirty = true; if (state.tilemap.zoom != 0) machine.popmessage("Zoom = %d", state.tilemap.zoom); else machine.popmessage("Zoom Auto"); } if (machine.ui_input().pressed(IPT_UI_ZOOM_IN) && state.tilemap.zoom < 8) { state.tilemap.zoom++; state.bitmap_dirty = true; machine.popmessage("Zoom = %d", state.tilemap.zoom); } // handle rotation (R) if (machine.ui_input().pressed(IPT_UI_ROTATE)) { state.tilemap.rotate = orientation_add(ROT90, state.tilemap.rotate); state.bitmap_dirty = true; } // return to (0,0) (HOME) if( machine.ui_input().pressed(IPT_UI_HOME)) { state.tilemap.xoffs = 0; state.tilemap.yoffs = 0; state.bitmap_dirty = true; } // handle flags (category) if (machine.ui_input().pressed(IPT_UI_PAGE_UP) && state.tilemap.flags != TILEMAP_DRAW_ALL_CATEGORIES) { if (state.tilemap.flags > 0) { state.tilemap.flags--; machine.popmessage("Category = %d", state.tilemap.flags); } else { state.tilemap.flags = TILEMAP_DRAW_ALL_CATEGORIES; machine.popmessage("Category All"); } state.bitmap_dirty = true; } if (machine.ui_input().pressed(IPT_UI_PAGE_DOWN) && (state.tilemap.flags < TILEMAP_DRAW_CATEGORY_MASK || (state.tilemap.flags == TILEMAP_DRAW_ALL_CATEGORIES))) { if (state.tilemap.flags == TILEMAP_DRAW_ALL_CATEGORIES) state.tilemap.flags = 0; else state.tilemap.flags++; state.bitmap_dirty = true; machine.popmessage("Category = %d", state.tilemap.flags); } // handle navigation (up,down,left,right), taking orientation into account int step = 8; // this may be applied more than once if multiple directions are pressed if (machine.input().code_pressed(KEYCODE_LSHIFT)) step = 1; if (machine.input().code_pressed(KEYCODE_LCONTROL)) step = 64; if (machine.ui_input().pressed_repeat(IPT_UI_UP, 4)) { if (state.tilemap.rotate & ORIENTATION_SWAP_XY) state.tilemap.xoffs -= (state.tilemap.rotate & ORIENTATION_FLIP_Y) ? -step : step; else state.tilemap.yoffs -= (state.tilemap.rotate & ORIENTATION_FLIP_Y) ? -step : step; state.bitmap_dirty = true; } if (machine.ui_input().pressed_repeat(IPT_UI_DOWN, 4)) { if (state.tilemap.rotate & ORIENTATION_SWAP_XY) state.tilemap.xoffs += (state.tilemap.rotate & ORIENTATION_FLIP_Y) ? -step : step; else state.tilemap.yoffs += (state.tilemap.rotate & ORIENTATION_FLIP_Y) ? -step : step; state.bitmap_dirty = true; } if (machine.ui_input().pressed_repeat(IPT_UI_LEFT, 6)) { if (state.tilemap.rotate & ORIENTATION_SWAP_XY) state.tilemap.yoffs -= (state.tilemap.rotate & ORIENTATION_FLIP_X) ? -step : step; else state.tilemap.xoffs -= (state.tilemap.rotate & ORIENTATION_FLIP_X) ? -step : step; state.bitmap_dirty = true; } if (machine.ui_input().pressed_repeat(IPT_UI_RIGHT, 6)) { if (state.tilemap.rotate & ORIENTATION_SWAP_XY) state.tilemap.yoffs += (state.tilemap.rotate & ORIENTATION_FLIP_X) ? -step : step; else state.tilemap.xoffs += (state.tilemap.rotate & ORIENTATION_FLIP_X) ? -step : step; state.bitmap_dirty = true; } // clamp within range while (state.tilemap.xoffs < 0) state.tilemap.xoffs += mapwidth; while (state.tilemap.xoffs >= mapwidth) state.tilemap.xoffs -= mapwidth; while (state.tilemap.yoffs < 0) state.tilemap.yoffs += mapheight; while (state.tilemap.yoffs >= mapheight) state.tilemap.yoffs -= mapheight; }
UINT32 ui_gfx_ui_handler(running_machine &machine, render_container *container, UINT32 uistate) { ui_gfx_state &state = ui_gfx; // if we have nothing, implicitly cancel if (!ui_gfx_is_relevant(machine)) goto cancel; // if we're not paused, mark the bitmap dirty if (!machine.paused()) state.bitmap_dirty = true; // switch off the state to display something again: switch (state.mode) { case UI_GFX_PALETTE: // if we have a palette, display it if (state.palette.devcount > 0) { palette_handler(machine, container, state); break; } // fall through... state.mode++; case UI_GFX_GFXSET: // if we have graphics sets, display them if (state.gfxset.devcount > 0) { gfxset_handler(machine, container, state); break; } // fall through... state.mode++; case UI_GFX_TILEMAP: // if we have tilemaps, display them if (machine.tilemap().count() > 0) { tilemap_handler(machine, container, state); break; } state.mode = UI_GFX_PALETTE; goto again; } // handle keys if (machine.ui_input().pressed(IPT_UI_SELECT)) { state.mode = (state.mode + 1) % 3; state.bitmap_dirty = true; } if (machine.ui_input().pressed(IPT_UI_PAUSE)) { if (machine.paused()) machine.resume(); else machine.pause(); } if (machine.ui_input().pressed(IPT_UI_CANCEL) || machine.ui_input().pressed(IPT_UI_SHOW_GFX)) goto cancel; return uistate; cancel: if (!uistate) machine.resume(); state.bitmap_dirty = true; return UI_HANDLER_CANCEL; }
static void tilemap_handle_keys(running_machine &machine, ui_gfx_state &state, int viswidth, int visheight) { UINT32 mapwidth, mapheight; int step; // handle tilemap selection (open bracket,close bracket) if (machine.ui_input().pressed(IPT_UI_PREV_GROUP) && state.tilemap.which > 0) { state.tilemap.which--; state.bitmap_dirty = true; } if (machine.ui_input().pressed(IPT_UI_NEXT_GROUP) && state.tilemap.which < machine.tilemap().count() - 1) { state.tilemap.which++; state.bitmap_dirty = true; } // cache some info in locals tilemap_t *tilemap = machine.tilemap().find(state.tilemap.which); mapwidth = tilemap->width(); mapheight = tilemap->height(); // handle zoom (minus,plus) if (machine.ui_input().pressed(IPT_UI_ZOOM_OUT) && state.tilemap.zoom > 0) { state.tilemap.zoom--; state.bitmap_dirty = true; if (state.tilemap.zoom != 0) machine.popmessage("Zoom = %d", state.tilemap.zoom); else machine.popmessage("Zoom Auto"); } if (machine.ui_input().pressed(IPT_UI_ZOOM_IN) && state.tilemap.zoom < 8) { state.tilemap.zoom++; state.bitmap_dirty = true; machine.popmessage("Zoom = %d", state.tilemap.zoom); } // handle rotation (R) if (machine.ui_input().pressed(IPT_UI_ROTATE)) { state.tilemap.rotate = orientation_add(ROT90, state.tilemap.rotate); state.bitmap_dirty = true; } // handle navigation (up,down,left,right) step = 8; if (machine.input().code_pressed(KEYCODE_LSHIFT)) step = 1; if (machine.input().code_pressed(KEYCODE_LCONTROL)) step = 64; if (machine.ui_input().pressed_repeat(IPT_UI_UP, 4)) { state.tilemap.yoffs -= step; state.bitmap_dirty = true; } if (machine.ui_input().pressed_repeat(IPT_UI_DOWN, 4)) { state.tilemap.yoffs += step; state.bitmap_dirty = true; } if (machine.ui_input().pressed_repeat(IPT_UI_LEFT, 6)) { state.tilemap.xoffs -= step; state.bitmap_dirty = true; } if (machine.ui_input().pressed_repeat(IPT_UI_RIGHT, 6)) { state.tilemap.xoffs += step; state.bitmap_dirty = true; } // clamp within range while (state.tilemap.xoffs < 0) state.tilemap.xoffs += mapwidth; while (state.tilemap.xoffs >= mapwidth) state.tilemap.xoffs -= mapwidth; while (state.tilemap.yoffs < 0) state.tilemap.yoffs += mapheight; while (state.tilemap.yoffs >= mapheight) state.tilemap.yoffs -= mapheight; }