/** @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(); }
/** @ingroup racemantools @param title Screen title. @param bgimg Optional background image (0 for no img). @return None. */ void RmLoadingScreenStart(const char *title, const char *bgimg) { if (HScreen && GfuiScreenIsActive(HScreen)) return; if (HScreen) RmLoadingScreenShutdown(); // Create screen, load menu XML descriptor and create static controls. HScreen = GfuiScreenCreate(BGColor, NULL, NULL, NULL, NULL, 0); void *hmenu = GfuiMenuLoad("loadingscreen.xml"); GfuiMenuCreateStaticControls(HScreen, hmenu); // Create variable title label. int titleId = GfuiMenuCreateLabelControl(HScreen, hmenu, "titlelabel"); GfuiLabelSetText(HScreen, titleId, title); // Get layout / coloring properties. NTextLines = (int)GfuiMenuGetNumProperty(hmenu, "nLines", 20); const int yTopLine = (int)GfuiMenuGetNumProperty(hmenu, "yTopLine", 400); const int yLineShift = (int)GfuiMenuGetNumProperty(hmenu, "yLineShift", 16); const float alpha0 = GfuiMenuGetNumProperty(hmenu, "alpha0", 0.2); const float alphaSlope = GfuiMenuGetNumProperty(hmenu, "alphaSlope", 0.0421); // Allocate line info arrays. FGColors = (float**)calloc(NTextLines, sizeof(float*)); TextLines = (char**)calloc(NTextLines, sizeof(char*)); TextLineIds = (int*)calloc(NTextLines, sizeof(int)); // Create one label for each text line int y = yTopLine; for (int i = 0; i < NTextLines; i++) { // Create and set the color for this line. FGColors[i] = (float*)calloc(4, sizeof(float)); FGColors[i][0] = FGColors[i][1] = FGColors[i][2] = 1.0; FGColors[i][3] = (float)i * alphaSlope + alpha0; // Create the control from the template. TextLineIds[i] = GfuiMenuCreateLabelControl(HScreen, hmenu, "line", true, // from template "", GFUI_TPL_X, y, GFUI_TPL_FONTID, GFUI_TPL_WIDTH, GFUI_TPL_ALIGN, GFUI_TPL_MAXLEN, FGColors[i]); // Next line if not last. y -= yLineShift; } CurTextLineIdx = 0; // Add background image. if (bgimg) GfuiScreenAddBgImg(HScreen, bgimg); // Close menu XML descriptor. GfParmReleaseHandle(hmenu); // Display screen. GfuiScreenActivate(HScreen); GfuiDisplay(); }