static void palette_handle_keys(running_machine &machine, ui_gfx_state *state) { int rowcount, screencount; int total; /* handle zoom (minus,plus) */ if (ui_input_pressed(machine, IPT_UI_ZOOM_OUT)) state->palette.count /= 2; if (ui_input_pressed(machine, IPT_UI_ZOOM_IN)) state->palette.count *= 2; /* clamp within range */ if (state->palette.count <= 4) state->palette.count = 4; if (state->palette.count > 64) state->palette.count = 64; /* handle colormap selection (open bracket,close bracket) */ if (ui_input_pressed(machine, IPT_UI_PREV_GROUP)) state->palette.which--; if (ui_input_pressed(machine, IPT_UI_NEXT_GROUP)) state->palette.which++; /* clamp within range */ if (state->palette.which < 0) state->palette.which = 0; if (state->palette.which > (int)(machine.colortable != NULL)) state->palette.which = (int)(machine.colortable != NULL); /* cache some info in locals */ total = state->palette.which ? colortable_palette_get_size(machine.colortable) : machine.total_colors(); /* determine number of entries per row and total */ rowcount = state->palette.count; screencount = rowcount * rowcount; /* handle keyboard navigation */ if (ui_input_pressed_repeat(machine, IPT_UI_UP, 4)) state->palette.offset -= rowcount; if (ui_input_pressed_repeat(machine, IPT_UI_DOWN, 4)) state->palette.offset += rowcount; if (ui_input_pressed_repeat(machine, IPT_UI_PAGE_UP, 6)) state->palette.offset -= screencount; if (ui_input_pressed_repeat(machine, IPT_UI_PAGE_DOWN, 6)) state->palette.offset += screencount; if (ui_input_pressed_repeat(machine, IPT_UI_HOME, 4)) state->palette.offset = 0; if (ui_input_pressed_repeat(machine, 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 check_osd_inputs(running_machine &machine) { // check for toggling fullscreen mode if (ui_input_pressed(machine, IPT_OSD_1)) winwindow_toggle_full_screen(); // check for taking fullscreen snap if (ui_input_pressed(machine, IPT_OSD_2)) winwindow_take_snap(); // check for taking fullscreen video if (ui_input_pressed(machine, IPT_OSD_3)) winwindow_take_video(); }
UINT32 ui_menu::ui_handler(running_machine &machine, render_container *container, UINT32 state) { // if we have no menus stacked up, start with the main menu if (menu_stack == nullptr) stack_push(auto_alloc_clear(machine, ui_menu_main(machine, container))); // update the menu state if (menu_stack != nullptr) menu_stack->do_handle(); // clear up anything pending to be released clear_free_list(machine); // if the menus are to be hidden, return a cancel here if (machine.ui().is_menu_active() && ((ui_input_pressed(machine, IPT_UI_CONFIGURE) && !stack_has_special_main_menu()) || menu_stack == nullptr)) return UI_HANDLER_CANCEL; return 0; }
void ui_menu_select_game::handle() { // ignore pause keys by swallowing them before we process the menu ui_input_pressed(machine(), IPT_UI_PAUSE); // process the menu const ui_menu_event *menu_event = process(0); if (menu_event != NULL && menu_event->itemref != NULL) { // reset the error on any future menu_event if (m_error) m_error = false; // handle selections else { switch(menu_event->iptkey) { case IPT_UI_SELECT: inkey_select(menu_event); break; case IPT_UI_CANCEL: inkey_cancel(menu_event); break; case IPT_SPECIAL: inkey_special(menu_event); break; } } } // if we're in an error state, overlay an error message if (m_error) machine().ui().draw_text_box(container, "The selected game is missing one or more required ROM or CHD images. " "Please select a different game.\n\nPress any key to continue.", JUSTIFY_CENTER, 0.5f, 0.5f, UI_RED_COLOR); }
static void check_osd_inputs(running_machine &machine) { sdl_window_info *window = sdlinput_get_focus_window(); // check for toggling fullscreen mode if (ui_input_pressed(machine, 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 (ui_input_pressed(machine, 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 (ui_input_pressed(machine, 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 (ui_input_pressed(machine, IPT_OSD_5)) { video_config.filter = !video_config.filter; machine.ui().popup_time(1, "Filter %s", video_config.filter? "enabled":"disabled"); } #endif if (ui_input_pressed(machine, IPT_OSD_6)) window->modify_prescale(-1); if (ui_input_pressed(machine, IPT_OSD_7)) window->modify_prescale(1); }
static void check_osd_inputs(running_machine &machine) { sdl_window_info *window = sdlinput_get_focus_window(machine); // check for toggling fullscreen mode if (ui_input_pressed(machine, IPT_OSD_1)) sdlwindow_toggle_full_screen(machine, window); if (ui_input_pressed(machine, IPT_OSD_2)) { //FIXME: on a per window basis video_config.fullstretch = !video_config.fullstretch; ui_popup_time(1, "Uneven stretch %s", video_config.fullstretch? "enabled":"disabled"); } if (ui_input_pressed(machine, IPT_OSD_4)) { //FIXME: on a per window basis video_config.keepaspect = !video_config.keepaspect; ui_popup_time(1, "Keepaspect %s", video_config.keepaspect? "enabled":"disabled"); } if (USE_OPENGL || SDLMAME_SDL2) { //FIXME: on a per window basis if (ui_input_pressed(machine, IPT_OSD_5)) { video_config.filter = !video_config.filter; ui_popup_time(1, "Filter %s", video_config.filter? "enabled":"disabled"); } } if (ui_input_pressed(machine, IPT_OSD_6)) sdlwindow_modify_prescale(machine, window, -1); if (ui_input_pressed(machine, IPT_OSD_7)) sdlwindow_modify_prescale(machine, window, 1); }
static void tilemap_handle_keys(running_machine &machine, ui_gfx_state *state, int viswidth, int visheight) { ui_gfx_state oldstate = *state; UINT32 mapwidth, mapheight; int step; /* handle tilemap selection (open bracket,close bracket) */ if (ui_input_pressed(machine, IPT_UI_PREV_GROUP)) state->tilemap.which--; if (ui_input_pressed(machine, IPT_UI_NEXT_GROUP)) state->tilemap.which++; /* clamp within range */ if (state->tilemap.which < 0) state->tilemap.which = 0; if (state->tilemap.which >= machine.tilemap().count()) state->tilemap.which = machine.tilemap().count() - 1; /* 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 (ui_input_pressed(machine, IPT_UI_ZOOM_OUT)) state->tilemap.zoom--; if (ui_input_pressed(machine, IPT_UI_ZOOM_IN)) state->tilemap.zoom++; /* clamp within range */ if (state->tilemap.zoom < 0) state->tilemap.zoom = 0; if (state->tilemap.zoom > 8) state->tilemap.zoom = 8; if (state->tilemap.zoom != oldstate.tilemap.zoom) { if (state->tilemap.zoom != 0) popmessage("Zoom = %d", state->tilemap.zoom); else popmessage("Zoom Auto"); } /* handle rotation (R) */ if (ui_input_pressed(machine, IPT_UI_ROTATE)) state->tilemap.rotate = orientation_add(ROT90, state->tilemap.rotate); /* 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 (ui_input_pressed_repeat(machine, IPT_UI_UP, 4)) state->tilemap.yoffs -= step; if (ui_input_pressed_repeat(machine, IPT_UI_DOWN, 4)) state->tilemap.yoffs += step; if (ui_input_pressed_repeat(machine, IPT_UI_LEFT, 6)) state->tilemap.xoffs -= step; if (ui_input_pressed_repeat(machine, IPT_UI_RIGHT, 6)) state->tilemap.xoffs += step; /* 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; /* if something changed, we need to force an update to the bitmap */ if (state->tilemap.which != oldstate.tilemap.which || state->tilemap.xoffs != oldstate.tilemap.xoffs || state->tilemap.yoffs != oldstate.tilemap.yoffs || state->tilemap.rotate != oldstate.tilemap.rotate) { state->bitmap_dirty = TRUE; } }
static void gfxset_handle_keys(running_machine &machine, ui_gfx_state *state, int xcells, int ycells) { ui_gfx_state oldstate = *state; gfx_element *gfx; int temp, set; /* handle gfxset selection (open bracket,close bracket) */ if (ui_input_pressed(machine, IPT_UI_PREV_GROUP)) { for (temp = state->gfxset.set - 1; temp >= 0; temp--) if (machine.gfx[temp] != NULL) break; if (temp >= 0) state->gfxset.set = temp; } if (ui_input_pressed(machine, IPT_UI_NEXT_GROUP)) { for (temp = state->gfxset.set + 1; temp < MAX_GFX_ELEMENTS; temp++) if (machine.gfx[temp] != NULL) break; if (temp < MAX_GFX_ELEMENTS) state->gfxset.set = temp; } /* cache some info in locals */ set = state->gfxset.set; gfx = machine.gfx[set]; /* handle cells per line (minus,plus) */ if (ui_input_pressed(machine, IPT_UI_ZOOM_OUT)) state->gfxset.count[set] = xcells - 1; if (ui_input_pressed(machine, IPT_UI_ZOOM_IN)) state->gfxset.count[set] = xcells + 1; /* clamp within range */ if (state->gfxset.count[set] < 2) state->gfxset.count[set] = 2; if (state->gfxset.count[set] > 32) state->gfxset.count[set] = 32; /* handle rotation (R) */ if (ui_input_pressed(machine, IPT_UI_ROTATE)) state->gfxset.rotate[set] = orientation_add(ROT90, state->gfxset.rotate[set]); /* handle navigation within the cells (up,down,pgup,pgdown) */ if (ui_input_pressed_repeat(machine, IPT_UI_UP, 4)) state->gfxset.offset[set] -= xcells; if (ui_input_pressed_repeat(machine, IPT_UI_DOWN, 4)) state->gfxset.offset[set] += xcells; if (ui_input_pressed_repeat(machine, IPT_UI_PAGE_UP, 6)) state->gfxset.offset[set] -= xcells * ycells; if (ui_input_pressed_repeat(machine, IPT_UI_PAGE_DOWN, 6)) state->gfxset.offset[set] += xcells * ycells; if (ui_input_pressed_repeat(machine, IPT_UI_HOME, 4)) state->gfxset.offset[set] = 0; if (ui_input_pressed_repeat(machine, IPT_UI_END, 4)) state->gfxset.offset[set] = gfx->elements(); /* clamp within range */ if (state->gfxset.offset[set] + xcells * ycells > ((gfx->elements() + xcells - 1) / xcells) * xcells) state->gfxset.offset[set] = ((gfx->elements() + xcells - 1) / xcells) * xcells - xcells * ycells; if (state->gfxset.offset[set] < 0) state->gfxset.offset[set] = 0; /* handle color selection (left,right) */ if (ui_input_pressed_repeat(machine, IPT_UI_LEFT, 4)) state->gfxset.color[set] -= 1; if (ui_input_pressed_repeat(machine, IPT_UI_RIGHT, 4)) state->gfxset.color[set] += 1; /* clamp within range */ if (state->gfxset.color[set] >= (int)gfx->colors()) state->gfxset.color[set] = gfx->colors() - 1; if (state->gfxset.color[set] < 0) state->gfxset.color[set] = 0; /* if something changed, we need to force an update to the bitmap */ if (state->gfxset.set != oldstate.gfxset.set || state->gfxset.offset[set] != oldstate.gfxset.offset[set] || state->gfxset.rotate[set] != oldstate.gfxset.rotate[set] || state->gfxset.color[set] != oldstate.gfxset.color[set] || state->gfxset.count[set] != oldstate.gfxset.count[set]) { state->bitmap_dirty = TRUE; } }
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 (machine.total_colors() == 0 && machine.colortable == NULL && machine.gfx[0] == NULL && machine.tilemap().count() == 0) 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 0: /* if we have a palette, display it */ if (machine.total_colors() > 0) { palette_handler(machine, container, state); break; } /* fall through...*/ state->mode++; case 1: /* if we have graphics sets, display them */ if (machine.gfx[0] != NULL) { gfxset_handler(machine, container, state); break; } /* fall through...*/ state->mode++; case 2: /* if we have tilemaps, display them */ if (machine.tilemap().count() > 0) { tilemap_handler(machine, container, state); break; } state->mode = 0; goto again; } /* handle keys */ if (ui_input_pressed(machine, IPT_UI_SELECT)) { state->mode = (state->mode + 1) % 3; state->bitmap_dirty = TRUE; } if (ui_input_pressed(machine, IPT_UI_PAUSE)) { if (machine.paused()) machine.resume(); else machine.pause(); } if (ui_input_pressed(machine, IPT_UI_CANCEL) || ui_input_pressed(machine, IPT_UI_SHOW_GFX)) goto cancel; return uistate; cancel: if (!uistate) machine.resume(); state->bitmap_dirty = TRUE; return UI_HANDLER_CANCEL; }
void ui_menu_input::handle() { input_item_data *seqchangeditem = NULL; const ui_menu_event *menu_event; int invalidate = false; /* process the menu */ menu_event = process((pollingitem != NULL) ? UI_MENU_PROCESS_NOKEYS : 0); /* if we are polling, handle as a special case */ if (pollingitem != NULL) { input_item_data *item = pollingitem; input_seq newseq; /* if UI_CANCEL is pressed, abort */ if (ui_input_pressed(machine(), IPT_UI_CANCEL)) { pollingitem = NULL; record_next = false; toggle_none_default(item->seq, starting_seq, *item->defseq); seqchangeditem = item; } /* poll again; if finished, update the sequence */ if (machine().input().seq_poll()) { pollingitem = NULL; record_next = true; item->seq = machine().input().seq_poll_final(); seqchangeditem = item; } } /* otherwise, handle the events */ else if (menu_event != NULL && menu_event->itemref != NULL) { input_item_data *item = (input_item_data *)menu_event->itemref; switch (menu_event->iptkey) { /* an item was selected: begin polling */ case IPT_UI_SELECT: pollingitem = item; last_sortorder = item->sortorder; starting_seq = item->seq; machine().input().seq_poll_start((item->type == INPUT_TYPE_ANALOG) ? ITEM_CLASS_ABSOLUTE : ITEM_CLASS_SWITCH, record_next ? &item->seq : NULL); invalidate = true; break; /* if the clear key was pressed, reset the selected item */ case IPT_UI_CLEAR: toggle_none_default(item->seq, item->seq, *item->defseq); record_next = false; seqchangeditem = item; break; } /* if the selection changed, reset the "record next" flag */ if (item->sortorder != last_sortorder) record_next = false; last_sortorder = item->sortorder; } /* if the sequence changed, update it */ if (seqchangeditem != NULL) { update_input(seqchangeditem); /* invalidate the menu to force an update */ invalidate = true; } /* if the menu is invalidated, clear it now */ if (invalidate) { pollingref = NULL; if (pollingitem != NULL) { pollingref = pollingitem->ref; pollingseq = pollingitem->seqtype; } reset(UI_MENU_RESET_REMEMBER_POSITION); } }
static void check_osd_inputs(running_machine *machine) { // check for toggling fullscreen mode if (ui_input_pressed(machine, IPT_OSD_1)) winwindow_toggle_full_screen(); }
static void gfxset_handle_keys(running_machine &machine, ui_gfx_state &state, int xcells, int ycells) { // handle gfxset selection (open bracket,close bracket) if (ui_input_pressed(machine, 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 (ui_input_pressed(machine, 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 (ui_input_pressed(machine, IPT_UI_ZOOM_OUT)) { info.columns[set] = xcells - 1; state.bitmap_dirty = true; } if (ui_input_pressed(machine, 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 (ui_input_pressed(machine, 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 (ui_input_pressed_repeat(machine, IPT_UI_UP, 4)) { info.offset[set] -= xcells; state.bitmap_dirty = true; } if (ui_input_pressed_repeat(machine, IPT_UI_DOWN, 4)) { info.offset[set] += xcells; state.bitmap_dirty = true; } if (ui_input_pressed_repeat(machine, IPT_UI_PAGE_UP, 6)) { info.offset[set] -= xcells * ycells; state.bitmap_dirty = true; } if (ui_input_pressed_repeat(machine, IPT_UI_PAGE_DOWN, 6)) { info.offset[set] += xcells * ycells; state.bitmap_dirty = true; } if (ui_input_pressed_repeat(machine, IPT_UI_HOME, 4)) { info.offset[set] = 0; state.bitmap_dirty = true; } if (ui_input_pressed_repeat(machine, 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 (ui_input_pressed_repeat(machine, IPT_UI_LEFT, 4)) { info.color[set] -= 1; state.bitmap_dirty = true; } if (ui_input_pressed_repeat(machine, IPT_UI_RIGHT, 4)) { info.color[set] += 1; state.bitmap_dirty = true; } // clamp within range if (info.color[set] >= (int)gfx.colors()) { info.color[set] = gfx.colors() - 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) { palette_device *palette = state.palette.device; int rowcount, screencount; int total; // handle zoom (minus,plus) if (ui_input_pressed(machine, IPT_UI_ZOOM_OUT)) state.palette.columns /= 2; if (ui_input_pressed(machine, 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 (ui_input_pressed(machine, 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.device; state.palette.which = (palette->indirect_entries() > 0); } } if (ui_input_pressed(machine, 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.device; 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 (ui_input_pressed_repeat(machine, IPT_UI_UP, 4)) state.palette.offset -= rowcount; if (ui_input_pressed_repeat(machine, IPT_UI_DOWN, 4)) state.palette.offset += rowcount; if (ui_input_pressed_repeat(machine, IPT_UI_PAGE_UP, 6)) state.palette.offset -= screencount; if (ui_input_pressed_repeat(machine, IPT_UI_PAGE_DOWN, 6)) state.palette.offset += screencount; if (ui_input_pressed_repeat(machine, IPT_UI_HOME, 4)) state.palette.offset = 0; if (ui_input_pressed_repeat(machine, 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; }
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 (ui_input_pressed(machine, IPT_UI_SELECT)) { state.mode = (state.mode + 1) % 3; state.bitmap_dirty = true; } if (ui_input_pressed(machine, IPT_UI_PAUSE)) { if (machine.paused()) machine.resume(); else machine.pause(); } if (ui_input_pressed(machine, IPT_UI_CANCEL) || ui_input_pressed(machine, 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 (ui_input_pressed(machine, IPT_UI_PREV_GROUP) && state.tilemap.which > 0) { state.tilemap.which--; state.bitmap_dirty = true; } if (ui_input_pressed(machine, 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 (ui_input_pressed(machine, 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 (ui_input_pressed(machine, 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 (ui_input_pressed(machine, 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 (ui_input_pressed_repeat(machine, IPT_UI_UP, 4)) { state.tilemap.yoffs -= step; state.bitmap_dirty = true; } if (ui_input_pressed_repeat(machine, IPT_UI_DOWN, 4)) { state.tilemap.yoffs += step; state.bitmap_dirty = true; } if (ui_input_pressed_repeat(machine, IPT_UI_LEFT, 6)) { state.tilemap.xoffs -= step; state.bitmap_dirty = true; } if (ui_input_pressed_repeat(machine, 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; }