void ui_draw_expo() { int scale_exp, scale_elp; /* * Convert time values into logarithm scale. */ scale_exp = FRAME_EXPO_BOTTOM - EXPO_VERT_SCALE(msec2scale(exposure)); scale_elp = FRAME_EXPO_BOTTOM - EXPO_VERT_SCALE(msec2scale(elapsed)); ui_show_hide_mouse(); gfx_frame(FRAME_EXPO_LEFT - FRAME_EXPO_BORDER, FRAME_EXPO_TOP - FRAME_EXPO_BORDER, FRAME_EXPO_RIGHT + FRAME_EXPO_BORDER, FRAME_EXPO_BOTTOM + FRAME_EXPO_BORDER, FRAME_EXPO_BORDER, UI_LO_COLOR, UI_LO_COLOR, 0); gfx_rect(FRAME_EXPO_LEFT + FRAME_EXPO_WIDTH / 2, FRAME_EXPO_TOP - 1, FRAME_EXPO_RIGHT - 1, FRAME_EXPO_BOTTOM - 1, 0, GFX_FILL_RECT); gfx_rect(FRAME_EXPO_LEFT, FRAME_EXPO_TOP, FRAME_EXPO_RIGHT - FRAME_EXPO_WIDTH / 2, scale_exp, 0, GFX_FILL_RECT); gfx_rect(FRAME_EXPO_LEFT, scale_exp, FRAME_EXPO_RIGHT - FRAME_EXPO_WIDTH / 2, scale_elp, UI_LO_COLOR, GFX_FILL_RECT); gfx_rect(FRAME_EXPO_LEFT, scale_elp, FRAME_EXPO_RIGHT - FRAME_EXPO_WIDTH / 2, FRAME_EXPO_BOTTOM, UI_HI_COLOR, GFX_FILL_RECT); gfx_vline(FRAME_EXPO_TOP, FRAME_EXPO_BOTTOM, FRAME_EXPO_RIGHT, UI_HI_COLOR, GFX_COPY_PIXEL); gfx_hline(FRAME_EXPO_RIGHT - FRAME_EXPO_WIDTH/2, FRAME_EXPO_RIGHT, FRAME_EXPO_TOP, UI_HI_COLOR, GFX_COPY_PIXEL); gfx_hline(FRAME_EXPO_RIGHT - FRAME_EXPO_WIDTH/2, FRAME_EXPO_RIGHT, FRAME_EXPO_BOTTOM, UI_HI_COLOR, GFX_COPY_PIXEL); gfx_hline(FRAME_EXPO_RIGHT - FRAME_EXPO_WIDTH/2, FRAME_EXPO_RIGHT, FRAME_EXPO_BOTTOM - EXPO_VERT_SCALE(100), UI_HI_COLOR, GFX_COPY_PIXEL); gfx_hline(FRAME_EXPO_RIGHT - FRAME_EXPO_WIDTH/2, FRAME_EXPO_RIGHT, FRAME_EXPO_BOTTOM - EXPO_VERT_SCALE(50), UI_HI_COLOR, GFX_COPY_PIXEL); gfx_hline(FRAME_EXPO_RIGHT - FRAME_EXPO_WIDTH/2, FRAME_EXPO_RIGHT, FRAME_EXPO_BOTTOM - EXPO_VERT_SCALE(200), UI_HI_COLOR, GFX_COPY_PIXEL); gfx_hline(FRAME_EXPO_RIGHT - FRAME_EXPO_WIDTH/2, FRAME_EXPO_RIGHT, FRAME_EXPO_BOTTOM - EXPO_VERT_SCALE(300), UI_HI_COLOR, GFX_COPY_PIXEL); gfx_hline(FRAME_EXPO_RIGHT - FRAME_EXPO_WIDTH/4, FRAME_EXPO_RIGHT, FRAME_EXPO_BOTTOM - EXPO_VERT_SCALE(25), UI_HI_COLOR, GFX_COPY_PIXEL); gfx_hline(FRAME_EXPO_RIGHT - FRAME_EXPO_WIDTH/4, FRAME_EXPO_RIGHT, FRAME_EXPO_BOTTOM - EXPO_VERT_SCALE(75), UI_HI_COLOR, GFX_COPY_PIXEL); gfx_hline(FRAME_EXPO_RIGHT - FRAME_EXPO_WIDTH/4, FRAME_EXPO_RIGHT, FRAME_EXPO_BOTTOM - EXPO_VERT_SCALE(150), UI_HI_COLOR, GFX_COPY_PIXEL); gfx_hline(FRAME_EXPO_RIGHT - FRAME_EXPO_WIDTH/4, FRAME_EXPO_RIGHT, FRAME_EXPO_BOTTOM - EXPO_VERT_SCALE(250), UI_HI_COLOR, GFX_COPY_PIXEL); gfx_hline(FRAME_EXPO_RIGHT - FRAME_EXPO_WIDTH/8, FRAME_EXPO_RIGHT, FRAME_EXPO_BOTTOM - EXPO_VERT_SCALE(125), UI_HI_COLOR, GFX_COPY_PIXEL); gfx_hline(FRAME_EXPO_RIGHT - FRAME_EXPO_WIDTH/8, FRAME_EXPO_RIGHT, FRAME_EXPO_BOTTOM - EXPO_VERT_SCALE(175), UI_HI_COLOR, GFX_COPY_PIXEL); gfx_hline(FRAME_EXPO_RIGHT - FRAME_EXPO_WIDTH/8, FRAME_EXPO_RIGHT, FRAME_EXPO_BOTTOM - EXPO_VERT_SCALE(225), UI_HI_COLOR, GFX_COPY_PIXEL); gfx_hline(FRAME_EXPO_RIGHT - FRAME_EXPO_WIDTH/8, FRAME_EXPO_RIGHT, FRAME_EXPO_BOTTOM - EXPO_VERT_SCALE(275), UI_HI_COLOR, GFX_COPY_PIXEL); ui_show_hide_mouse(); }
static void game_select_display_button(gfx_driver_t *gfx_driver, gfx_bitmap_font_t* font, rect_t box, const char* button_text, int focus) { gfx_color_t black; gfx_color_t white; black = create_color_t(0, 0, 0); white = create_color_t(255, 255, 255); gfx_box_border(gfx_driver, gfx_rect(box.x, box.y, box.xl, box.yl), black); gfx_box_fill(gfx_driver, gfx_rect(box.x + 1, box.y + 1, box.xl - 2, box.yl - 2), white); gfx_box_text(gfx_driver, gfx_rect(box.x, box.y + 1, box.xl, box.yl), font, create_pixmap_color_t(black), create_pixmap_color_t(white), button_text, 1); if (focus != 0) gfx_box_border(gfx_driver, gfx_rect(box.x + 1, box.y + 1, box.xl - 2, box.yl - 2), black); }
void ui_draw_load() { ui_show_hide_mouse(); gfx_frame(FRAME_LOAD_LEFT - FRAME_LOAD_BORDER, FRAME_LOAD_TOP - FRAME_LOAD_BORDER, FRAME_LOAD_RIGHT + FRAME_LOAD_BORDER, FRAME_LOAD_BOTTOM + FRAME_LOAD_BORDER, FRAME_LOAD_BORDER, UI_LO_COLOR, UI_LO_COLOR, 0); gfx_rect(FRAME_LOAD_LEFT, FRAME_LOAD_TOP, FRAME_LOAD_RIGHT, FRAME_LOAD_BOTTOM, 0, GFX_FILL_RECT); ui_show_hide_mouse(); }
void ui_update_load(int scanline) { ui_show_hide_mouse(); if (scanline > 0) gfx_hline(FRAME_LOAD_LEFT, FRAME_LOAD_RIGHT, scanline + FRAME_LOAD_TOP, UI_HI_COLOR, GFX_COPY_PIXEL); else gfx_rect(FRAME_LOAD_LEFT, FRAME_LOAD_TOP, FRAME_LOAD_RIGHT, FRAME_LOAD_BOTTOM, 0, GFX_FILL_RECT); ui_show_hide_mouse(); }
static void gfx_box_text(gfx_driver_t *gfx_driver, rect_t box, gfx_bitmap_font_t* font, gfx_pixmap_color_t fgc, gfx_pixmap_color_t bgc, const char* text, int center) { int width; int height; gfx_pixmap_t* pixmap; text_fragment_t *textsplits; int meas_width; int meas_height; int meas_line; int margin_x = 0; int margin_y = 0; int line_height; int last_offset; if (center != 0) { textsplits = gfxr_font_calculate_size(font, box.xl, text, &meas_width, &meas_height, &meas_line, &line_height, &last_offset, GFXR_FONT_FLAG_NO_NEWLINES | GFXR_FONT_FLAG_COUNT_WHITESPACE); if (textsplits != NULL) { free(textsplits); } margin_x = (box.xl - meas_width) / 2; margin_y = (box.yl - meas_height) / 2; } box.x *= gfx_driver->mode->xfact; box.y *= gfx_driver->mode->yfact; box.xl *= gfx_driver->mode->xfact; box.yl *= gfx_driver->mode->yfact; margin_x *= gfx_driver->mode->xfact; margin_y *= gfx_driver->mode->yfact; pixmap = gfxr_draw_font(font, text, strlen(text), &fgc, &fgc, NULL); if (pixmap != NULL) { pixmap->xoffset = 0; pixmap->yoffset = 0; gfx_xlate_pixmap(gfx_pixmap_alloc_data(pixmap, gfx_driver->mode), gfx_driver->mode, GFX_XLATE_FILTER_NONE); width = pixmap->index_xl * gfx_driver->mode->xfact; height = pixmap->index_yl * gfx_driver->mode->yfact; if (width > box.xl) width = box.xl; if (gfx_driver->draw_pixmap(gfx_driver, pixmap, GFX_NO_PRIORITY, gfx_rect(0, 0, width, height), gfx_rect(box.x + margin_x, box.y + margin_y, width, height), GFX_BUFFER_BACK) != GFX_OK) { GFXERROR("Error occured while drawing pixmap.\n"); } gfx_free_pixmap(gfx_driver, pixmap); } }
void game_select_scan_info(gfx_driver_t *gfx_driver, gfx_bitmap_font_t* font_default, gfx_bitmap_font_t* font_small, char *name, int total) { gfx_color_t black; gfx_color_t white; gfx_color_t grey; gfx_color_t blue; rect_t box; int error; char text[256]; black = create_color_t(0, 0, 0); white = create_color_t(255, 255, 255); grey = create_color_t(85, 85, 85); blue = create_color_t(0, 0, 170); game_select_draw_bg(gfx_driver, font_default); /* window */ game_select_display_window(gfx_driver, font_default, gfx_rect(GS_SCAN_WINDOW_LEFT, GS_SCAN_WINDOW_TOP, GS_SCAN_WINDOW_WIDTH, GS_SCAN_WINDOW_HEIGHT), "Scanning for Games"); /* window text */ gfx_box_text(gfx_driver, gfx_rect(GS_SCAN_WINDOW_LEFT + 6, GS_SCAN_WINDOW_TOP + 16, GS_SCAN_WINDOW_WIDTH - 11, 8), font_default, create_pixmap_color_t(black), create_pixmap_color_t(white), "Please wait, scanning for games...", 0); if (name) { snprintf(text, 256, "Adding: %s", name); gfx_box_text(gfx_driver, gfx_rect(GS_SCAN_WINDOW_LEFT + 6, GS_SCAN_WINDOW_TOP + 32, GS_SCAN_WINDOW_WIDTH - 11, 8), font_default, create_pixmap_color_t(black), create_pixmap_color_t(white), text, 0); } snprintf(text, 256, "Games found: %i", total); gfx_box_text(gfx_driver, gfx_rect(GS_SCAN_WINDOW_LEFT + 6, GS_SCAN_WINDOW_TOP + 48, GS_SCAN_WINDOW_WIDTH - 11, 8), font_default, create_pixmap_color_t(black), create_pixmap_color_t(white), text, 0); box = gfx_rect(0, 0, 320 * gfx_driver->mode->xfact, 200 * gfx_driver->mode->yfact); if ((error = gfx_driver->update(gfx_driver, box, gfx_point(box.x, box.y), GFX_BUFFER_FRONT))) { GFXERROR("Error occured while updating region (%d,%d,%d,%d) in buffer %d\n", box.x, box.y, box.xl, box.yl, GFX_BUFFER_BACK); } }
static void game_select_display_game_list(gfx_driver_t *gfx_driver, gfx_bitmap_font_t* font_default, gfx_bitmap_font_t* font_small, game_t *game_list, int game_count, int first_game, int selected_game, int focus_button) { gfx_color_t black; gfx_color_t white; black = create_color_t(0, 0, 0); white = create_color_t(255, 255, 255); game_select_draw_bg(gfx_driver, font_default); /* window */ game_select_display_window(gfx_driver, font_default, gfx_rect(GS_WINDOW_LEFT, GS_WINDOW_TOP, GS_WINDOW_WIDTH, GS_WINDOW_HEIGHT), "Play a Game"); /* window text */ gfx_box_text(gfx_driver, gfx_rect(GS_WINDOW_LEFT + 6, GS_WINDOW_TOP + 16, GS_WINDOW_WIDTH - 11, 8), font_default, create_pixmap_color_t(black), create_pixmap_color_t(white), "Select the game that you would like", 0); gfx_box_text(gfx_driver, gfx_rect(GS_WINDOW_LEFT + 6, GS_WINDOW_TOP + 24, GS_WINDOW_WIDTH - 11, 8), font_default, create_pixmap_color_t(black), create_pixmap_color_t(white), "to play.", 0); /* window list box */ game_select_display_listbox(gfx_driver, font_small, gfx_rect(GS_WINDOW_LEFT + 5, GS_WINDOW_TOP + 39, GS_LISTBOX_WIDTH, GS_LISTBOX_HEIGHT), game_list, game_count, first_game, selected_game); /* window play button */ game_select_display_button(gfx_driver, font_default, gfx_rect(GS_WINDOW_LEFT + GS_WINDOW_WIDTH - 69, GS_WINDOW_TOP + 39, 64, font_default->height + 1), "Play", focus_button == GS_BUTTON_PLAY); /* window quit button */ game_select_display_button(gfx_driver, font_default, gfx_rect(GS_WINDOW_LEFT + GS_WINDOW_WIDTH - 69, GS_WINDOW_TOP + 39 + font_default->height + 5, 64, font_default->height + 1), "Quit", focus_button == GS_BUTTON_QUIT); }
static void game_select_display_window(gfx_driver_t *gfx_driver, gfx_bitmap_font_t* font, rect_t box, const char* title) { gfx_color_t black; gfx_color_t white; gfx_color_t grey; black = create_color_t(0, 0, 0); white = create_color_t(255, 255, 255); grey = create_color_t(85, 85, 85); /* window border */ gfx_box_border(gfx_driver, box, black); /* window fill */ gfx_box_fill(gfx_driver, gfx_rect(box.x + 1, box.y + 1, box.xl - 1, box.yl - 1), white); /* window title */ gfx_box_fill(gfx_driver, gfx_rect(box.x + 1, box.y + 1, box.xl - 1, font->height), grey); gfx_box_line(gfx_driver, gfx_rect(box.x, box.y + font->height + 1, box.xl, 0), black); gfx_box_text(gfx_driver, gfx_rect(box.x + 1, box.y + 2, box.xl - 1, font->height - 1), font, create_pixmap_color_t(white), create_pixmap_color_t(grey), title, 1); /* window shade */ gfx_box_line(gfx_driver, gfx_rect(box.x + box.xl + 1, box.y + 3, 0, box.yl - 2), black); gfx_box_line(gfx_driver, gfx_rect(box.x + 3, box.y + box.yl + 1, box.xl - 2, 0), black); }
static int scummvm_set_static_buffer(struct _gfx_driver *drv, gfx_pixmap_t *pic, gfx_pixmap_t *priority) { memcpy(S->visual[2], pic->data, S->xsize * S->ysize); /*gfx_crossblit_pixmap(drv->mode, pic, 0, rect, rect, S->visual[2], S->xsize, S->priority[1]->index_data, S->priority[1]->index_xl, 1, 0);*/ gfx_copy_pixmap_box_i(S->priority[1], priority, gfx_rect(0, 0, S->xsize, S->ysize)); return GFX_OK; }
void ui_update_expo(int exposure_time, int remaining_time) { int elapsed_time = remaining_time > 0 ? exposure_time - remaining_time : 0; if (elapsed_time < 0) elapsed_time = 0; if (msec2scale(exposure_time) != msec2scale(exposure) || msec2scale(elapsed_time) != msec2scale(elapsed)) { int scale_exp, scale_elp; /* * Convert time values into logarithm scale. */ exposure = exposure_time; elapsed = elapsed_time; scale_exp = FRAME_EXPO_BOTTOM - EXPO_VERT_SCALE(msec2scale(exposure)); scale_elp = FRAME_EXPO_BOTTOM - EXPO_VERT_SCALE(msec2scale(elapsed)); ui_show_hide_mouse(); gfx_rect(FRAME_EXPO_LEFT, FRAME_EXPO_TOP, FRAME_EXPO_RIGHT - FRAME_EXPO_WIDTH / 2, scale_exp, 0, GFX_FILL_RECT); gfx_rect(FRAME_EXPO_LEFT, scale_exp, FRAME_EXPO_RIGHT - FRAME_EXPO_WIDTH / 2, scale_elp, UI_LO_COLOR, GFX_FILL_RECT); gfx_rect(FRAME_EXPO_LEFT, scale_elp, FRAME_EXPO_RIGHT - FRAME_EXPO_WIDTH / 2, FRAME_EXPO_BOTTOM, UI_HI_COLOR, GFX_FILL_RECT); ui_show_hide_mouse(); } }
static void game_select_draw_bg(gfx_driver_t *gfx_driver, gfx_bitmap_font_t* font) { char title[255]; gfx_color_t black; gfx_color_t white; gfx_color_t blue; black = create_color_t(0, 0, 0); white = create_color_t(255, 255, 255); blue = create_color_t(0, 0, 170); strcpy(title, "FreeSCI"); strcat(title, " "); strcat(title, VERSION); /* menu bar */ gfx_box_fill(gfx_driver, gfx_rect(0, 0, 320, font->height), white); gfx_box_line(gfx_driver, gfx_rect(0, font->height, 320, 0), black); gfx_box_text(gfx_driver, gfx_rect(0, 1, 320, font->height - 1), font, create_pixmap_color_t(black), create_pixmap_color_t(white), title, 1); /* background */ gfx_box_fill(gfx_driver, gfx_rect(0, 10, 320, 190), blue); }
void export_wav(MusSong *song, CydWavetableEntry * entry, FILE *f, int channel) { MusEngine mus; CydEngine cyd; cyd_init(&cyd, 44100, MUS_MAX_CHANNELS); cyd.flags |= CYD_SINGLE_THREAD; mus_init_engine(&mus, &cyd); mus.volume = song->master_volume; mus_set_fx(&mus, song); CydWavetableEntry * prev_entry = cyd.wavetable_entries; // save entries so they can be free'd cyd.wavetable_entries = entry; cyd_set_callback(&cyd, mus_advance_tick, &mus, song->song_rate); mus_set_song(&mus, song, 0); song->flags |= MUS_NO_REPEAT; if (channel >= 0) { // if channel is positive then only export that channel (mute other chans) for (int i = 0 ; i < MUS_MAX_CHANNELS ; ++i) mus.channel[i].flags |= MUS_CHN_DISABLED; mus.channel[channel].flags &= ~MUS_CHN_DISABLED; } else { for (int i = 0 ; i < MUS_MAX_CHANNELS ; ++i) mus.channel[i].flags &= ~MUS_CHN_DISABLED; } const int channels = 2; Sint16 buffer[2000 * channels]; int last_percentage = -1; WaveWriter *ww = ww_create(f, cyd.sample_rate, 2); for (;;) { memset(buffer, 0, sizeof(buffer)); // Zero the input to cyd cyd_output_buffer_stereo(&cyd, (Uint8*)buffer, sizeof(buffer)); if (cyd.samples_output > 0) ww_write(ww, buffer, cyd.samples_output); if (mus.song_position >= song->song_length) break; if (song->song_length != 0) { int percentage = (mus.song_position + (channel == -1 ? 0 : (channel * song->song_length))) * 100 / (song->song_length * (channel == -1 ? 1 : song->num_channels)); if (percentage > last_percentage) { last_percentage = percentage; SDL_Rect area = {domain->screen_w / 2 - 140, domain->screen_h / 2 - 24, 280, 48}; bevel(domain, &area, mused.slider_bevel, BEV_MENU); adjust_rect(&area, 8); area.h = 16; bevel(domain, &area, mused.slider_bevel, BEV_FIELD); adjust_rect(&area, 2); int t = area.w; area.w = area.w * percentage / 100; gfx_rect(domain, &area, colors[COLOR_PROGRESS_BAR]); area.y += 16 + 4 + 4; area.w = t; font_write_args(&mused.smallfont, domain, &area, "Exporting... Press ESC to abort."); SDL_Event e; while (SDL_PollEvent(&e)) { if (e.type == SDL_QUIT || (e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_ESCAPE)) { goto abort; } } gfx_domain_flip(domain); } } } abort:; ww_finish(ww); cyd.wavetable_entries = prev_entry; cyd_deinit(&cyd); song->flags &= ~MUS_NO_REPEAT; }
int game_select_display(gfx_driver_t *gfx_driver, game_t *game_list, int game_count, gfx_bitmap_font_t* font_default, gfx_bitmap_font_t* font_small) { int error; int cont; sci_event_t event; int focus_button = GS_BUTTON_PLAY; int selected_game = 0; int first_game = 0; int max_game; rect_t box; box = gfx_rect(0, 0, 320 * gfx_driver->mode->xfact, 200 * gfx_driver->mode->yfact); max_game = (int)(((double)GS_LISTBOX_CONTENTS_HEIGHT) / font_small->line_height); game_select_display_game_list(gfx_driver, font_default, font_small, game_list, game_count, first_game, selected_game, focus_button); if ((error = gfx_driver->update(gfx_driver, box, gfx_point(box.x, box.y), GFX_BUFFER_FRONT))) { GFXERROR("Error occured while updating region (%d,%d,%d,%d) in buffer %d\n", box.x, box.y, box.xl, box.yl, GFX_BUFFER_BACK); } cont = 2; while (cont) { event = game_select_gfxop_get_event(gfx_driver, SCI_EVT_KEYBOARD); if (event.type == SCI_EVT_KEYBOARD) { if (event.data == SCI_K_ENTER) { switch (focus_button) { case GS_BUTTON_PLAY: cont = 0; break; case GS_BUTTON_QUIT: cont = 0; selected_game = -1; break; } } else if ((event.buckybits & (SCI_K_TAB | SCI_EVM_RSHIFT)) || (event.buckybits & (SCI_K_TAB | SCI_EVM_LSHIFT))) { focus_button--; if (focus_button < GS_BUTTON_FIRST) focus_button = GS_BUTTON_LAST; game_select_display_game_list(gfx_driver, font_default, font_small, game_list, game_count, first_game, selected_game, focus_button); if ((error = gfx_driver->update(gfx_driver, box, gfx_point(box.x, box.y), GFX_BUFFER_FRONT))) { GFXERROR("Error occured while updating region (%d,%d,%d,%d) in buffer %d\n", box.x, box.y, box.xl, box.yl, GFX_BUFFER_BACK); } } else if (event.data == SCI_K_TAB) { focus_button++; if (focus_button > GS_BUTTON_LAST) focus_button = GS_BUTTON_FIRST; game_select_display_game_list(gfx_driver, font_default, font_small, game_list, game_count, first_game, selected_game, focus_button); if ((error = gfx_driver->update(gfx_driver, box, gfx_point(box.x, box.y), GFX_BUFFER_FRONT))) { GFXERROR("Error occured while updating region (%d,%d,%d,%d) in buffer %d\n", box.x, box.y, box.xl, box.yl, GFX_BUFFER_BACK); } } else if (event.data == SCI_K_ESC) { cont = 0; selected_game = -1; } else if (event.data == SCI_K_UP) { if (selected_game > 0) { selected_game--; focus_button = GS_BUTTON_PLAY; if (selected_game < first_game) { first_game = selected_game; } game_select_display_game_list(gfx_driver, font_default, font_small, game_list, game_count, first_game, selected_game, focus_button); if ((error = gfx_driver->update(gfx_driver, box, gfx_point(box.x, box.y), GFX_BUFFER_FRONT))) { GFXERROR("Error occured while updating region (%d,%d,%d,%d) in buffer %d\n", box.x, box.y, box.xl, box.yl, GFX_BUFFER_BACK); } } } else if (event.data == SCI_K_DOWN) { if (selected_game < game_count - 1) { selected_game++; focus_button = GS_BUTTON_PLAY; if (selected_game - first_game + 1 > max_game) { first_game = selected_game - max_game + 1; } game_select_display_game_list(gfx_driver, font_default, font_small, game_list, game_count, first_game, selected_game, focus_button); if ((error = gfx_driver->update(gfx_driver, box, gfx_point(box.x, box.y), GFX_BUFFER_FRONT))) { GFXERROR("Error occured while updating region (%d,%d,%d,%d) in buffer %d\n", box.x, box.y, box.xl, box.yl, GFX_BUFFER_BACK); } } } else if (event.data == SCI_K_PGUP) { selected_game -= (max_game - 1); if (selected_game < 0) { selected_game = 0; } focus_button = GS_BUTTON_PLAY; if (selected_game < first_game) { first_game = selected_game; } game_select_display_game_list(gfx_driver, font_default, font_small, game_list, game_count, first_game, selected_game, focus_button); if ((error = gfx_driver->update(gfx_driver, box, gfx_point(box.x, box.y), GFX_BUFFER_FRONT))) { GFXERROR("Error occured while updating region (%d,%d,%d,%d) in buffer %d\n", box.x, box.y, box.xl, box.yl, GFX_BUFFER_BACK); } } else if (event.data == SCI_K_PGDOWN) { selected_game += max_game - 1; if (selected_game >= game_count) { selected_game = game_count - 1; } focus_button = GS_BUTTON_PLAY; if (selected_game - first_game + 1 > max_game) { first_game = selected_game - max_game + 1; } game_select_display_game_list(gfx_driver, font_default, font_small, game_list, game_count, first_game, selected_game, focus_button); if ((error = gfx_driver->update(gfx_driver, box, gfx_point(box.x, box.y), GFX_BUFFER_FRONT))) { GFXERROR("Error occured while updating region (%d,%d,%d,%d) in buffer %d\n", box.x, box.y, box.xl, box.yl, GFX_BUFFER_BACK); } } } game_select_gfxop_usleep(gfx_driver, 25000); } return selected_game; }
static void game_select_display_listbox(gfx_driver_t *gfx_driver, gfx_bitmap_font_t* font, rect_t box, game_t *game_list, int game_count, int first_game, int selected_game) { int max_game; int pos = 0; int cur; int center_x; gfx_color_t black; gfx_color_t white; center_x = box.x + (box.xl / 2) - 1; black = create_color_t(0, 0, 0); white = create_color_t(255, 255, 255); /* list box */ gfx_box_border(gfx_driver, box, black); gfx_box_fill(gfx_driver, gfx_rect(box.x + 1, box.y + 1, box.xl - 2, box.yl - 2), white); gfx_box_line(gfx_driver, gfx_rect(box.x, box.y + 10, box.xl, 0), black); gfx_box_line(gfx_driver, gfx_rect(box.x, box.y + box.yl - 10, box.xl, 0), black); /* list box scroll up */ gfx_box_line(gfx_driver, gfx_rect(center_x, box.y + 2, 1, 0), black); gfx_box_line(gfx_driver, gfx_rect(center_x - 1, box.y + 3, 3, 0), black); gfx_box_line(gfx_driver, gfx_rect(center_x - 2, box.y + 4, 5, 0), black); gfx_box_line(gfx_driver, gfx_rect(center_x - 3, box.y + 5, 7, 0), black); gfx_box_fill(gfx_driver, gfx_rect(center_x - 1, box.y + 6, 4, 3), black); /* list box scroll up */ gfx_box_line(gfx_driver, gfx_rect(center_x, box.y + box.yl - 2, 1, 0), black); gfx_box_line(gfx_driver, gfx_rect(center_x - 1, box.y + box.yl - 3, 3, 0), black); gfx_box_line(gfx_driver, gfx_rect(center_x - 2, box.y + box.yl - 4, 5, 0), black); gfx_box_line(gfx_driver, gfx_rect(center_x - 3, box.y + box.yl - 5, 7, 0), black); gfx_box_fill(gfx_driver, gfx_rect(center_x - 1, box.y + box.yl - 8, 4, 3), black); /* list box content */ max_game = (int)(((double)(box.yl - 21)) / font->line_height); for (cur = first_game; cur < game_count && (cur - first_game < max_game); cur++, pos++) { if (selected_game == cur) gfx_box_fill(gfx_driver, gfx_rect(box.x + 1, box.y + 11 + (pos * font->line_height), box.xl - 1, font->line_height), black); gfx_box_text(gfx_driver, gfx_rect(box.x + 1, box.y + 11 + (pos * font->line_height), box.xl - 1, font->line_height), font, create_pixmap_color_t((selected_game == cur) ? white : black), create_pixmap_color_t((selected_game == cur) ? black : white), game_list[cur].name, 0); } }