예제 #1
0
void gui_draw(struct gui *G)
{
	dword x=0;
	dword entry=0;
	dword cy=4;
	dword cx=3;
	byte *text;
	gui_base(G);
	current=G->first;
	G->tmp=(G->gui1)+(cy*G->width)+cx;
	while((current)&&(cy<G->height))
	{
		text=current->item;
		for(x=0;x<8;x++)
		{
			G->rc=x;
			if(G->select==entry)
			{
				gui_text(G,text,G->scol);
			}
			else
			{
				gui_text(G,text,G->bkcol);
			}
			cy++;
			G->tmp=(G->tmp)+(G->width);
		}
		current=current->next;
		entry++;
	}
	gui_render(&gui_bitmap);
}
예제 #2
0
파일: naev.c 프로젝트: ekrumme/naev
/**
 * @brief Renders the game itself (player flying around and friends).
 *
 * Blitting order (layers):
 *   - BG
 *     - stars and planets
 *     - background player stuff (planet targetting)
 *     - background particles
 *     - back layer weapons
 *   - N
 *     - NPC ships
 *     - front layer weapons
 *     - normal layer particles (above ships)
 *   - FG
 *     - player
 *     - foreground particles
 *     - text and GUI
 */
static void render_all (void)
{
   double dt;

   dt = (paused) ? 0. : game_dt;

   /* setup */
   spfx_begin(dt);
   /* BG */
   space_render(dt);
   planets_render();
   weapons_render(WEAPON_LAYER_BG, dt);
   /* N */
   pilots_render(dt);
   weapons_render(WEAPON_LAYER_FG, dt);
   spfx_render(SPFX_LAYER_BACK);
   /* FG */
   player_render(dt);
   spfx_render(SPFX_LAYER_FRONT);
   space_renderOverlay(dt);
   spfx_end();
   gui_render(dt);
   display_fps( real_dt ); /* Exception. */
}
예제 #3
0
static void render_gui(Renderer * renderer, GUI * gui) {
  gui_render(gui);
}
예제 #4
0
//Render for States
void
state_render ()
{
  if (state_switched)
    return;
  if (state_terminated)
    return;

  state_to_render = 1;
  state_to_force_render = 0;

//To Set up for Transition Render
  if (state_trans_curf >= 0)
    {
      if (rbufferorig == NULL)
	rbufferorig = al_clone_bitmap (rbuffer);
      if (transrbuffer == NULL)
	transrbuffer = al_clone_bitmap (rbuffer);
    }

//Common for All Games
  al_set_target_bitmap (rbuffer);
  handlers[state].proc_render ();

//Transition Render
  if (state_trans_curf >= 0 && state_trans_curf < state_trans_totf && strans
      && rbufferorig && transrbuffer)
    {
      strans (rbufferorig, rbuffer, transrbuffer, state_trans_curf++,
	      state_trans_totf);
      state_to_force_render = 1;
    }

//To Destroy Transition
  if (strans && (state_trans_curf >= state_trans_totf))
    {
      trans_stop ();
      state_to_force_render = 1;
    }

//Switch Modes
  if (state_to_switch_render)
    init_screen ();

//This is Because of GUI.    
  state_to_force_render = 1;

  if (state_to_force_render || state_to_switch_render || state_to_render)
    {
//Render to Screen
      al_set_target_backbuffer (screen);
      if (transrbuffer)
	blit (transrbuffer, 0, 0, 0, 0, xres, yres, 0);
      else
	blit (rbuffer, 0, 0, 0, 0, xres, yres, 0);
      gui_render ();
#ifdef LINUX
//VSync helped remove bad artifacts in Linux
      al_wait_for_vsync ();
#endif //LINUX
      al_flip_display ();
    }

  state_to_switch_render = 0;
}
예제 #5
0
int main(int argc, char *argv[])
{
    /* gui structures */
    struct gui_state       gstate;
    struct gui_dialog_info dialog;
    struct gui_dialog_item dialog_msg;

    /* temps */
    int c;
    int yn_selected;
    int res;
    int next_index;

    /* status */
    int      running;
    unsigned tick;

    /* global options */
    /*
    int server;
    */

    /* constants */
    const int check[] = {0x6E, 0x69, 0x67, 0x67, 0x61};

#ifdef USING_WINDOWS
    /* windows-only vars */
    HANDLE console_buffer;
    CONSOLE_SCREEN_BUFFER_INFO old_console_info;
    COORD console_size;
    SMALL_RECT console_window;
    LPTSTR error_string = NULL;
    DWORD error;

    /* get console handle */
    console_buffer = GetStdHandle(STD_OUTPUT_HANDLE);

    /* store old console information */
    res = GetConsoleScreenBufferInfo(console_buffer, &old_console_info);
    if (!res) {
        error = GetLastError();
        res = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, res, 0, error_string, 256, NULL);
        if (!res || error_string == NULL) {
            fprintf(stderr, "Setting console size to maximum of (%d, %d) failed, error code %d\n", console_size.X, console_size.Y, (int) error);
        } else {
            fprintf(stderr, "Setting console size to maximum of (%d, %d) failed:\n%s\n", console_size.X, console_size.Y, error_string);
        }
        return -1;
    }

    /* make console fill the screen */
    console_size = GetLargestConsoleWindowSize(console_buffer);
    console_size.X -= 2;
    console_size.Y -= 2;
    res = SetConsoleScreenBufferSize(console_buffer, console_size);
    if (!res) {
        error = GetLastError();
        res = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, res, 0, error_string, 256, NULL);
        if (!res || error_string == NULL) {
            fprintf(stderr, "Setting console size to maximum of (%d, %d) failed, error code %d\n", console_size.X, console_size.Y, (int) error);
        } else {
            fprintf(stderr, "Setting console size to maximum of (%d, %d) failed:\n%s\n", console_size.X, console_size.Y, error_string);
        }
        return -1;
    }
    console_window.Left = 0;
    console_window.Top = 0;
    console_window.Right = console_size.X - 1;
    console_window.Bottom = console_size.Y - 1;
    res = SetConsoleWindowInfo(console_buffer, TRUE, &console_window);
    if (!res) {
        error = GetLastError();
        res = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, res, 0, error_string, 256, NULL);
        if (!res || error_string == NULL) {
            fprintf(stderr, "Setting console size to maximum of (%d, %d) failed, error code %d\n", console_size.X, console_size.Y, (int) error);
        } else {
            fprintf(stderr, "Setting console size to maximum of (%d, %d) failed:\n%s\n", console_size.X, console_size.Y, error_string);
        }
        return -1;
    }
#endif

    /* process args (none supported currently) */
    if (argc > 1) {
        fprintf(stderr, "unrecognised argument(s)\n");
        return -1;
    }

    /* init curses */
    initscr();

    /* give warning dialog if colours are not supported */
    if (has_colors() == FALSE) {

        /* set up message */
        dialog_msg.type = GUI_DIALOG_ITEM_MESSAGE;
        dialog_msg.str = "Your terminal doesn't support colours. This will look REALLY weird. Continue? (y/n)";

        /* set up dialog info */
        dialog.items = &dialog_msg;
        dialog.num_items = 1;
        dialog.title = "No colours!";
        dialog.centered = 1;
        dialog.autosize = 1;

        /* render dialog */
        gui_render_dialog(&dialog, -1);

        /* ask for y/n */
        yn_selected = 0;
        while (!yn_selected) {
            c = wgetch(stdscr);

            /* continue as normal if 'y' hit */
            if (c == 'y' || c == 'Y') {
                yn_selected = 1;

                /* quit program if 'n' hit */
            } else if (c == 'n' || c == 'N') {
                erase();
                refresh();
                endwin();
                return 0;
            }
        }

        /* if colours are supported, init them */
    } else {
        start_color();
        colours_init();
    }

    /* non-blocking read */
    timeout(0);

    /* F-key support */
    keypad(stdscr, TRUE);

    /* no line buffering */
    raw();

    /* detect return key */
    nonl();

    /* non-echoing getch */
    noecho();

    /* fill GUI state with default attributes */
    gui_default_state(&gstate);

    /* main loop */
    running = 1;
    tick = 0;
    next_index = 0;
    while (running) {

        ++tick;

        /* push GUI to screen */
        res = gui_render(&gstate);
        if (res != 0) {
            endwin();
            fprintf(stderr, "tick %d:\ngui_render failed\n", tick);
            return -1;
        }

        /* receive input (ERR received if none) */
        c = wgetch(stdscr);

        /* none received, back to top */
        if (c == ERR) {
            continue;
        }

        /* key combination check algorithm (no effect yet) */
        if (c == check[next_index]) {
            ++next_index;
            if (next_index == 5) {
                next_index = 0;
            }
        } else {
            next_index = 0;
        }

        switch (c) {

        case 'q':
            /* send to quit confirmation, if already there then quit */
            if (gstate.focus != GUI_FOCUS_QUIT_CONFIRM) {
                gstate.focus = GUI_FOCUS_QUIT_CONFIRM;
            } else {
                running = 0;
            }
            break;

        /* curses seems to use \r instead of KEY_ENTER */
        case '\r':
            switch (gstate.focus) {
            case GUI_FOCUS_MAIN_MENU:
                if (gstate.selected_item >= gstate.main_menu_dialog.num_items) {
                    endwin();
                    fprintf(stderr, "Index of selected dialog item (%d) out of range (main menu), max is %d\n", gstate.selected_item, gstate.main_menu_dialog.num_items);
                    return -1;
                }
                gstate.main_menu_dialog.items[gstate.selected_item].callback(&gstate, NULL);
                break;

            case GUI_FOCUS_QUIT_CONFIRM:
                running = 0;

            default:
                break;
            }
            break;

        case KEY_UP:
            switch (gstate.focus) {
            case GUI_FOCUS_MAIN_MENU:
                --gstate.selected_item;
                if (gstate.selected_item < 0) {
                    gstate.selected_item = gstate.main_menu_dialog.num_items - 1;
                }

            default:
                break;
            }
            break;

        case KEY_DOWN:
            switch (gstate.focus) {
            case GUI_FOCUS_MAIN_MENU:
                ++gstate.selected_item;
                if (gstate.selected_item >= gstate.main_menu_dialog.num_items) {
                    gstate.selected_item = 0;
                }

            default:
                break;
            }

        default:
            break;
        }
    }

    /* show end splash, quit curses and stop normally */
    gui_render_endscreen();
    timeout(-1);
    wgetch(stdscr);
    erase();
    refresh();
    endwin();

#ifdef USING_WINDOWS
    /* attempt to restore previous console size + position */
    console_window = old_console_info.srWindow;
    SetConsoleWindowInfo(console_buffer, TRUE, &console_window);
    console_size = old_console_info.dwSize;
    SetConsoleScreenBufferSize(console_buffer, console_size);

    /* clear */
    system("cls");
#endif

    return 0;
}