void parsekey(unsigned char key, int x, int y) { switch (key) { case 27: exit(0); break; case 13: if(mode == EDITING) { mode = INTERACTIVE; } else { mode = EDITING; carat = 0; } break; case '\t': // If current layout is a SimpleLayout, change its alignment properties if(layouts[currentLayout] && (dynamic_cast <FTSimpleLayout *>(layouts[currentLayout]))) { FTSimpleLayout *l = (FTSimpleLayout *)layouts[currentLayout]; // Decrement the layout switch (l->GetAlignment()) { case FTGL::ALIGN_LEFT: l->SetAlignment(FTGL::ALIGN_RIGHT); break; case FTGL::ALIGN_RIGHT: l->SetAlignment(FTGL::ALIGN_CENTER); break; case FTGL::ALIGN_CENTER: l->SetAlignment(FTGL::ALIGN_JUSTIFY); break; case FTGL::ALIGN_JUSTIFY: l->SetAlignment(FTGL::ALIGN_LEFT); break; } } break; default: if(mode == INTERACTIVE) { myString[0] = key; myString[1] = 0; } else { myString[carat] = key; myString[carat + 1] = 0; carat = carat > 2000 ? 2000 : carat + 1; } break; } glutPostRedisplay(); }
void loadingscreen(string s) { extern FTGLPixmapFont* font; int size=36; font->FaceSize(size); FTSimpleLayout status; status.SetFont(font); status.SetAlignment(FTGL::ALIGN_CENTER); status.SetLineLength(WINDOW_X); FTBBox box=status.BBox(s.c_str()); float boxx=box.Upper().Xf()-box.Lower().Xf(), boxy=box.Upper().Yf()-box.Lower().Yf(); glDisable(GL_LIGHTING); glViewport(0,0,WINDOW_X,WINDOW_Y); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0,1,0,1); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glEnable(GL_TEXTURE_2D); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glBindTexture(GL_TEXTURE_2D, textures[LOADTX]); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glBegin(GL_QUADS); glTexCoord2i(0,0); glVertex2i(0,0); glTexCoord2i(1,0); glVertex2i(1,0); glTexCoord2i(1,1); glVertex2i(1,1); glTexCoord2i(0,1); glVertex2i(0,1); glEnd(); glDisable(GL_TEXTURE_2D); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0,WINDOW_X,0,WINDOW_Y); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glRasterPos2i(0,WINDOW_Y/2+boxy/2-size-status.GetLineSpacing()); status.Render(s.c_str()); glRasterPos2i(0,0); glfwSwapBuffers(); }