/*************************************************************************** file : loadingscreen.cpp created : Sun Feb 25 00:34:46 /etc/localtime 2001 copyright : (C) 2000 by Eric Espie email : eric.espie@torcs.org version : $Id: loadingscreen.cpp,v 1.2 2003/06/24 21:02:24 torcs Exp $ ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ /** @file This is a Loading... screen management. @ingroup racemantools @author Eric Espie @version $Id: loadingscreen.cpp,v 1.2 2003/06/24 21:02:24 torcs Exp $ */ #include #include #ifdef WIN32 #include #endif #include #include static void *menuHandle = NULL; #define TEXTLINES 23 static int rmTextId[TEXTLINES]; static char *rmTextLines[TEXTLINES] = {0}; static int rmCurText; float black[4] = {0.0, 0.0, 0.0, 0.0}; float white[TEXTLINES][4]; static void rmDeativate(void * /* dummy */) { } /** @ingroup racemantools @param title Screen title. @param bgimg Optionnal backgrounf image (0 for no img). @return None. */ void RmLoadingScreenStart(char *title, char *bgimg) { int i; int y; if (GfuiScreenIsActive(menuHandle)) { /* Already active */ return; } if (menuHandle) { GfuiScreenRelease(menuHandle); } menuHandle = GfuiScreenCreateEx(black, NULL, NULL, NULL, rmDeativate, 0); GfuiTitleCreate(menuHandle, title, strlen(title)); /* create 20 lines of text */ for (i = 0, y = 400; i < TEXTLINES; i++, y -= 16) { white[i][0] = white[i][1] = white[i][2] = 1.0; white[i][3] = (float)i * 0.0421 + 0.2; rmTextId[i] = GfuiLabelCreateEx(menuHandle, "", white[i], GFUI_FONT_MEDIUM_C, 60, y, GFUI_ALIGN_HL_VB, 100); if (rmTextLines[i]) { /* free old text */ free(rmTextLines[i]); rmTextLines[i] = NULL; } } rmCurText = 0; if (bgimg) { GfuiScreenAddBgImg(menuHandle, bgimg); } GfuiScreenActivate(menuHandle); GfuiDisplay(); } void RmShutdownLoadingScreen(void) { if (menuHandle) { GfuiScreenRelease(menuHandle); menuHandle = 0; } } /** @ingroup racemantools @param text Text to display. @return None. */ void RmLoadingScreenSetText(char *text) { int i, j; GfOut("%s\n", text); if (menuHandle) { if (rmTextLines[rmCurText]) { free(rmTextLines[rmCurText]); } if (text) { rmTextLines[rmCurText] = strdup(text); rmCurText = (rmCurText + 1) % TEXTLINES; } i = rmCurText; j = 0; do { if (rmTextLines[i]) { GfuiLabelSetText(menuHandle, rmTextId[j], rmTextLines[i]); } j++; i = (i + 1) % TEXTLINES; } while (i != rmCurText); GfuiDisplay(); } }