Beispiel #1
0
void parseSpecialKey(int key, int x, int y)
{
    FTSimpleLayout *l = NULL;

    // If the currentLayout is a SimpleLayout store a pointer in l
    if(layouts[currentLayout]
        && (dynamic_cast <FTSimpleLayout *>(layouts[currentLayout])))
    {
        l = (FTSimpleLayout *)layouts[currentLayout];
    }

    switch (key)
    {
    case GLUT_KEY_UP:
        current_font = (GetFace()*NumStyles + (current_font + 1)%NumStyles)%totalFonts;
        break;
    case GLUT_KEY_DOWN:
        current_font = (GetFace()*NumStyles + (current_font + NumStyles - 1)%NumStyles)%totalFonts;
        break;
    case GLUT_KEY_LEFT:
        fonts[current_font]->FaceSize(fonts[current_font]->FaceSize() - 1);
        break;
    case GLUT_KEY_RIGHT:
        fonts[current_font]->FaceSize(fonts[current_font]->FaceSize() + 1);
        break;
    case GLUT_KEY_PAGE_UP:
        current_font = (current_font + NumStyles)%totalFonts;
        break;
    case GLUT_KEY_PAGE_DOWN:
        current_font = (current_font + totalFonts - NumStyles)%totalFonts;
        break;
    case GLUT_KEY_HOME:
        currentLayout = (currentLayout + 1)%NumLayouts;
        break;
    case GLUT_KEY_END:
        currentLayout = (currentLayout + NumLayouts - 1)%NumLayouts;
        break;
    case GLUT_KEY_F1:
    case GLUT_KEY_F10:
        // If the current layout is simple decrement its line length
        if (l) l->SetLineLength(l->GetLineLength() - 10.0f);
        break;
    case GLUT_KEY_F2:
    case GLUT_KEY_F11:
        // If the current layout is simple increment its line length
        if (l) l->SetLineLength(l->GetLineLength() + 10.0f);
        break;
    }

    // If the current layout is a SimpleLayout, update its font.
    if(l)
    {
        l->SetFont(fonts[current_font]);
    }

    glutPostRedisplay();
}