Changeset 24

Show
Ignore:
Timestamp:
11/16/08 13:36:39 (4 years ago)
Author:
mirko
Message:

Lots of animations bugs fixed. Removed fog thing (optional compilation ENABLE_FOG). Preparing for release (must first add background and top color selection on the command line).

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/pdfcube-0.0.3/src/pdfcube.cc

    r23 r24  
    2828#include <cmath> 
    2929#include <sstream> 
    30 #define NDEBUG 
    3130// Gtk+ (pkg-config gtk+-2.0) 
    3231#include <gtk/gtk.h> 
     
    105104class pdfcube { 
    106105public: 
    107   pdfcube(PopplerDocument * d) 
     106  pdfcube(PopplerDocument* d) 
    108107    :doc(d), 
    109108     current_page(0), 
     
    206205    GLfloat mat_ambient[] = { 0.0, 0.0, 0.0, 1.00 }; 
    207206    GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.00 }; 
    208     GLfloat mat_shininess[] = { 15.0 }; 
     207    GLfloat mat_shininess[] = { 3.0 }; 
    209208 
    210209    glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); 
    211     glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); 
    212     glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); 
     210    // glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); 
     211    // glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); 
    213212 
    214213    glEnable(GL_LIGHTING); 
     
    220219    glEdgeFlag(GL_FALSE); 
    221220 
    222     glClearColor(0.0, 0.0, 0.0, 0.5); 
     221    glClearColor(0.6, 0.0, 0.0, 0.0); 
    223222    glCullFace(GL_FRONT); 
    224223    glDisable(GL_DEPTH_TEST); 
     
    234233    glEnable(GL_AUTO_NORMAL); 
    235234    glEnable(GL_NORMALIZE); 
     235#ifdef ENABLE_FOG 
    236236    glEnable(GL_FOG); 
    237237    { 
     
    247247                   fogColor[2], fogColor[3]); 
    248248    } 
    249  
     249#endif 
    250250    glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
    251251 
     
    268268    glGetIntegerv(GL_MAX_TEXTURE_SIZE, &size); 
    269269#ifndef NDEBUG 
    270     printf("%u\n", size); 
     270    printf("Max-texture size: %upx\n", size); 
    271271#endif 
    272272    assert(size >= 512); 
     
    299299      switch (active_animation) { 
    300300      case ANIM_NONE: 
    301  
     301         
    302302#ifndef NDEBUG 
    303303        cerr << "No animation... stopping right now." << 
     
    309309      case CUBE_NEXT: 
    310310#ifndef NDEBUG 
    311         cerr << "cube " << frame << endl; 
     311        cerr << "cube+ " << frame << endl; 
    312312#endif 
    313313        if (frame == N_FRAMES) { 
     
    320320          glMatrixMode(GL_MODELVIEW); 
    321321          glLoadIdentity(); 
    322           lookposz -= zsteps[frame] * 4; 
    323           lookposy = 6 * xsteps[frame]; 
     322          lookposz -= 2.0*zsteps[frame]; 
     323          lookposy = 3.0*xsteps[frame]; 
    324324          gluLookAt(lookposx, lookposy, lookposz, 
    325325                    atx, aty, atz, 0, 1, 0); 
     
    332332      case CUBE_PREV: 
    333333#ifndef NDEBUG 
    334         cerr << "cube " << frame << endl; 
     334        cerr << "cube- " << frame << endl; 
    335335#endif 
    336336        if (frame == N_FRAMES) { 
     
    343343          glMatrixMode(GL_MODELVIEW); 
    344344          glLoadIdentity(); 
    345           lookposz -= zsteps[frame] * 4; 
    346           lookposy = 6 * xsteps[frame]; 
     345          lookposz -= 2.0 * zsteps[frame]; 
     346          lookposy = 3.0 * xsteps[frame]; 
    347347          gluLookAt(lookposx, lookposy, lookposz, 
    348348                    atx, aty, atz, 0, 1, 0); 
     
    354354        break; 
    355355      case ZOOM0: 
    356  
     356         
    357357#ifndef NDEBUG 
    358358        cerr << "zoom0 " << frame << endl; 
     
    747747      14,   10,   8,    6,    4,    3,    2.5,   2.0, 0.0  };*/ 
    748748 
    749     float step_factor = 0.2 * N_FRAMES;        //this is little buggy 
    750     float step = (step_factor) / double (N_FRAMES / 2); 
     749    float step_factor = 0.2 * double(N_FRAMES);        //this is little buggy 
     750    float step = (step_factor) / (double(N_FRAMES)/2.0); 
    751751    int i = 0; 
    752752    for (i = 0; i < N_FRAMES / 2; i++) { 
     
    756756    } 
    757757    for (i = N_FRAMES / 2; i < N_FRAMES; i++) { 
    758       steps[i] = step_factor - (i - N_FRAMES / 2) * step; 
     758      steps[i] = step_factor - (i - double(N_FRAMES) / 2.0) * step; 
    759759      if (steps[i] < 0) 
    760760        steps[i] = 0; 
    761761    } 
    762     steps[N_FRAMES - 1] = 0; 
     762    // steps[N_FRAMES - 1] = 0; 
    763763#ifndef NDEBUG 
    764764    cout << "Step " << step << endl; 
     
    774774    float xstep_ratio = 0.4; 
    775775    float xstep = 
    776       double (xstep_ratio - 0.01) / double (N_FRAMES / 2); 
     776      double (xstep_ratio) / (double(N_FRAMES-1) / 2.0); 
    777777    for (i = 0; i < N_FRAMES / 2; i++) { 
    778778      xsteps[i] = i * xstep; 
     
    781781    } 
    782782    for (i = N_FRAMES / 2; i < N_FRAMES; i++) { 
    783       xsteps[i] = xstep_ratio - (i - N_FRAMES / 2) * xstep; 
     783      xsteps[i] = xstep_ratio - (i - double(N_FRAMES-1) / 2.0) * xstep; 
    784784      if (xsteps[i] < 0.01) 
    785         xsteps[i] = 0; 
    786     } 
    787     xsteps[N_FRAMES - 1] = 0; 
     785        xsteps[i] = 0.0; 
     786    } 
    788787 
    789788#ifndef NDEBUG 
     
    799798 
    800799    float granular = 0.07; 
    801     float zstep = granular / double (N_FRAMES / 4); 
     800    float zstep = granular / (double(N_FRAMES) / 4.0); 
    802801    for (i = 0; i < N_FRAMES / 4; i++) { 
    803802      zsteps[i] = -i * zstep; 
    804803    } 
    805804    for (i = N_FRAMES / 4; i < N_FRAMES / 2; i++) { 
    806       zsteps[i] = -granular + (i - N_FRAMES / 4) * zstep; 
     805      zsteps[i] = -granular + (i - double(N_FRAMES) / 4.0) * zstep; 
    807806    } 
    808807    for (i = N_FRAMES / 2; i < N_FRAMES; i++) { 
    809808      zsteps[i] = -zsteps[i - N_FRAMES / 2]; 
    810809    } 
    811     zsteps[N_FRAMES - 1] = 0; 
     810    // zsteps[N_FRAMES - 1] = 0.0; 
    812811 
    813812#ifndef NDEBUG 
     
    823822 
    824823    float zoomstop = 0.38; 
    825     float zoomstep = (zoomstop / double (N_FRAMES)); 
     824    float zoomstep = (zoomstop / double (N_FRAMES-1)); 
    826825    for (i = 0; i < N_FRAMES; i++) { 
    827826      zoomsteps[i] = i * zoomstep; 
    828827    } 
    829     zoomsteps[N_FRAMES - 1] = zoomstop; 
    830828 
    831829#ifndef NDEBUG 
     
    842840    float perspstop = 21.00; 
    843841    for (i = 0; i < N_FRAMES; i++) { 
    844       perspsteps[i] = (cos(i*M_PI/(N_FRAMES*2)))*(perspstart - perspstop)+perspstop; 
     842      perspsteps[i] = (cos(i*M_PI/(double(N_FRAMES)*2.0)))*(perspstart - perspstop)+perspstop; 
    845843    } 
    846844#ifndef NDEBUG 
     
    858856    float perspcstop = 30.00; 
    859857    for (i = 0; i < N_FRAMES; i++) { 
    860       perspstepsc[i] = (1+cos(i*M_PI/(N_FRAMES)))/2*(perspcstart - perspcstop)+perspcstop; 
     858      perspstepsc[i] = (1.0+cos(i*M_PI/double(N_FRAMES)))/2.0*(perspcstart - perspcstop)+perspcstop; 
    861859    } 
    862860#ifndef NDEBUG 
     
    13521350#endif 
    13531351  if (event->state == GDK_CONTROL_MASK) 
    1354  
    1355     switch (event->keyval) { 
    1356     case GDK_1: 
    1357     case GDK_2: 
    1358     case GDK_3: 
    1359     case GDK_4: 
    1360     case GDK_5: 
    1361     case GDK_6: 
    1362     case GDK_7: 
    1363     case GDK_8: 
    1364     case GDK_9: 
    1365 #ifndef NDEBUG 
    1366       g_print("n key\n"); 
    1367 #endif 
    1368       if (sleeping()) 
    1369         pc->section(widget, event->keyval - GDK_1 + 1); 
    1370       break; 
    1371  
    1372       // Let's quit 
    1373     case GDK_q: 
    1374 #ifndef NDEBUG 
    1375       g_print("Escape key\n"); 
    1376 #endif 
    1377       gtk_main_quit(); 
    1378       break; 
    1379  
    1380       // Update all textures 
    1381     case GDK_l: 
    1382 #ifndef NDEBUG 
    1383       g_print("u key\n"); 
    1384       cerr << "Pagina: " << pc->page() << endl; 
    1385 #endif 
    1386       pc->reset(widget); 
    1387       break; 
    1388     } else 
    1389     switch (event->keyval) { 
    1390  
    1391       // return to page 1 
    1392     case GDK_1: 
    1393     case GDK_2: 
    1394     case GDK_3: 
    1395     case GDK_4: 
    1396     case GDK_5: 
    1397     case GDK_6: 
    1398     case GDK_7: 
    1399     case GDK_8: 
    1400     case GDK_9: 
    1401 #ifndef NDEBUG 
    1402       g_print("n key\n"); 
    1403 #endif 
    1404       if (sleeping()) 
    1405         pc->go_to(widget, (event->keyval - GDK_1) * 5); 
    1406       break; 
    1407  
    1408       // Animated Cube Advancement 
    1409     case GDK_a: 
    1410 #ifndef NDEBUG 
    1411       g_print("a key\n"); 
    1412 #endif 
    1413       if (sleeping()) 
    1414         start_animation(widget, CUBE_PREV); 
    1415  
    1416       break; 
    1417     case GDK_c: 
    1418 #ifndef NDEBUG 
    1419       g_print("c key\n"); 
    1420 #endif 
    1421       if (sleeping()) 
    1422         start_animation(widget, CUBE_NEXT); 
    1423       break; 
    1424  
    1425       // Quick switch to next page 
    1426     case GDK_Page_Down: 
    1427     case GDK_Right: 
    1428 #ifndef NDEBUG 
    1429       g_print("s key\n"); 
    1430 #endif 
    1431       if (sleeping()) 
    1432         start_animation(widget, SWITCH_FW); 
    1433       break; 
    1434  
    1435       // Quick switch to previous page 
    1436     case GDK_Page_Up: 
    1437     case GDK_Left: 
    1438 #ifndef NDEBUG 
    1439       g_print("q key\n"); 
    1440 #endif 
    1441       if (sleeping()) 
    1442         start_animation(widget, SWITCH_BW); 
    1443       break; 
    1444  
    1445     case GDK_g: 
    1446       if (sleeping()) 
    1447         if (last_animation >= 
    1448             ZOOM1 and last_animation <= ZOOMC) 
    1449           start_animation(widget, ZOOM0); 
    1450       break; 
    1451  
    1452     case GDK_h: 
    1453       if (sleeping()) 
    1454         if (last_animation >= 
    1455             ZOOM1 and last_animation <= ZOOMC) 
    1456           start_animation(widget, ZOOM0); 
     1352    { 
     1353      switch (event->keyval) { 
     1354      case GDK_1: 
     1355      case GDK_2: 
     1356      case GDK_3: 
     1357      case GDK_4: 
     1358      case GDK_5: 
     1359      case GDK_6: 
     1360      case GDK_7: 
     1361      case GDK_8: 
     1362      case GDK_9: 
     1363#ifndef NDEBUG 
     1364        g_print("Ctrl-n key\n"); 
     1365#endif 
     1366        if (sleeping()) 
     1367          pc->section(widget, event->keyval - GDK_1 + 1); 
     1368        break; 
     1369         
     1370        // Let's quit 
     1371      case GDK_q: 
     1372#ifndef NDEBUG 
     1373        g_print("Ctrl-q key\n"); 
     1374#endif 
     1375        gtk_main_quit(); 
     1376        break; 
     1377         
     1378        // Update all textures 
     1379      case GDK_l: 
     1380#ifndef NDEBUG 
     1381        g_print("Ctrl-l key\n"); 
     1382        cerr << "Pagina: " << pc->page() << endl; 
     1383#endif 
     1384        pc->reset(widget); 
     1385        break; 
     1386      } 
     1387    }  
     1388  else 
     1389    { 
     1390      switch (event->keyval) { 
     1391         
     1392        // return to page 1 
     1393      case GDK_1: 
     1394      case GDK_2: 
     1395      case GDK_3: 
     1396      case GDK_4: 
     1397      case GDK_5: 
     1398      case GDK_6: 
     1399      case GDK_7: 
     1400      case GDK_8: 
     1401      case GDK_9: 
     1402#ifndef NDEBUG 
     1403        g_print("n key\n"); 
     1404#endif 
     1405        if (sleeping()) 
     1406          pc->go_to(widget, (event->keyval - GDK_1) * 5); 
     1407        break; 
     1408         
     1409        // Animated Cube Advancement 
     1410      case GDK_a: 
     1411#ifndef NDEBUG 
     1412        g_print("a key\n"); 
     1413#endif 
     1414        if (sleeping()) 
     1415          start_animation(widget, CUBE_PREV); 
     1416         
     1417        break; 
     1418      case GDK_c: 
     1419#ifndef NDEBUG 
     1420        g_print("c key\n"); 
     1421#endif 
     1422        if (sleeping()) 
     1423          start_animation(widget, CUBE_NEXT); 
     1424        break; 
     1425         
     1426        // Quick switch to next page 
     1427      case GDK_Right: 
     1428#ifndef NDEBUG 
     1429        g_print("- key\n"); 
     1430#endif 
     1431        if (sleeping()) 
     1432          start_animation(widget, SWITCH_FW); 
     1433        break; 
     1434         
     1435        // Quick switch to previous page 
     1436      case GDK_Page_Up: 
     1437      case GDK_Left: 
     1438#ifndef NDEBUG 
     1439        g_print("+ key\n"); 
     1440#endif 
     1441        if (sleeping()) 
     1442          start_animation(widget, SWITCH_BW); 
     1443        break; 
     1444         
     1445      case GDK_g: 
     1446#ifndef NDEBUG 
     1447        g_print("Zoom0 key\n"); 
     1448#endif 
     1449        if (sleeping()) 
     1450          if (last_animation >= 
     1451              ZOOM1 and last_animation <= ZOOMC) 
     1452            start_animation(widget, ZOOM0); 
     1453        break; 
     1454         
     1455      case GDK_h: 
     1456#ifndef NDEBUG 
     1457        g_print("Zoom1 key\n"); 
     1458#endif 
     1459        if (sleeping()) 
     1460          if (last_animation >= 
     1461              ZOOM1 and last_animation <= ZOOMC) 
     1462            start_animation(widget, ZOOM0); 
     1463          else 
     1464            start_animation(widget, ZOOM1); 
     1465        break; 
     1466         
     1467      case GDK_j: 
     1468#ifndef NDEBUG 
     1469        g_print("Zoom2 key\n"); 
     1470#endif 
     1471        if (sleeping()) 
     1472          if (last_animation >= 
     1473              ZOOM1 and last_animation <= ZOOMC) 
     1474            start_animation(widget, ZOOM0); 
     1475          else 
     1476            start_animation(widget, ZOOM2); 
     1477        break; 
     1478         
     1479      case GDK_k: 
     1480#ifndef NDEBUG 
     1481        g_print("Zoom3 key\n"); 
     1482#endif 
     1483        if (sleeping()) 
     1484          if (last_animation >= 
     1485              ZOOM1 and last_animation <= ZOOMC) 
     1486            start_animation(widget, ZOOM0); 
     1487          else 
     1488            start_animation(widget, ZOOM3); 
     1489        break; 
     1490         
     1491      case GDK_l: 
     1492#ifndef NDEBUG 
     1493        g_print("Zoom4 key\n"); 
     1494#endif 
     1495        if (sleeping()) 
     1496          if (last_animation >= 
     1497              ZOOM1 and last_animation <= ZOOMC) 
     1498            start_animation(widget, ZOOM0); 
     1499          else 
     1500            start_animation(widget, ZOOM4); 
     1501        break; 
     1502         
     1503      case GDK_z: 
     1504#ifndef NDEBUG 
     1505        g_print("Zoom key\n"); 
     1506#endif 
     1507        if (sleeping()) 
     1508          if (last_animation >= 
     1509              ZOOM1 and last_animation <= ZOOMC) 
     1510            start_animation(widget, ZOOM0); 
     1511          else 
     1512            start_animation(widget, ZOOMC); 
     1513        break; 
     1514         
     1515        // Automatic advance (you should set the Animated slides on the command line) 
     1516      case GDK_Page_Down: 
     1517      case GDK_space: 
     1518#ifndef NDEBUG 
     1519        g_print("Advance key\n"); 
     1520#endif 
     1521        if (page_transition[pc->page()]and sleeping()) 
     1522          start_animation(widget, CUBE_NEXT); 
     1523        else if (sleeping()) 
     1524          start_animation(widget, SWITCH_FW); 
     1525         
     1526        break; 
     1527         
     1528        // switch fullscreen 
     1529      case GDK_f: 
     1530#ifndef NDEBUG 
     1531        g_print("f key\n"); 
     1532#endif 
     1533        if ((fullscreen = !fullscreen) == true) 
     1534          gtk_window_fullscreen((GtkWindow *) (data)); 
    14571535        else 
    1458           start_animation(widget, ZOOM1); 
    1459       break; 
    1460  
    1461     case GDK_j: 
    1462       if (sleeping()) 
    1463         if (last_animation >= 
    1464             ZOOM1 and last_animation <= ZOOMC) 
    1465           start_animation(widget, ZOOM0); 
    1466         else 
    1467           start_animation(widget, ZOOM2); 
    1468       break; 
    1469  
    1470     case GDK_k: 
    1471       if (sleeping()) 
    1472         if (last_animation >= 
    1473             ZOOM1 and last_animation <= ZOOMC) 
    1474           start_animation(widget, ZOOM0); 
    1475         else 
    1476           start_animation(widget, ZOOM3); 
    1477       break; 
    1478  
    1479     case GDK_l: 
    1480       if (sleeping()) 
    1481         if (last_animation >= 
    1482             ZOOM1 and last_animation <= ZOOMC) 
    1483           start_animation(widget, ZOOM0); 
    1484         else 
    1485           start_animation(widget, ZOOM4); 
    1486       break; 
    1487  
    1488     case GDK_z: 
    1489       if (sleeping()) 
    1490         if (last_animation >= 
    1491             ZOOM1 and last_animation <= ZOOMC) 
    1492           start_animation(widget, ZOOM0); 
    1493         else 
    1494           start_animation(widget, ZOOMC); 
    1495       break; 
    1496  
    1497       // Automatic advance (you should se the Animated slides on the command line) 
    1498     case GDK_space: 
    1499       if (page_transition[pc->page()]and sleeping()) 
    1500         start_animation(widget, CUBE_NEXT); 
    1501       else if (sleeping()) 
    1502         start_animation(widget, SWITCH_FW); 
    1503  
    1504       break; 
    1505  
    1506       // switch fullscreen 
    1507     case GDK_f: 
    1508       if ((fullscreen = !fullscreen) == true) 
    1509         gtk_window_fullscreen((GtkWindow *) (data)); 
    1510       else 
    1511         gtk_window_unfullscreen((GtkWindow *) (data)); 
    1512       break; 
    1513  
    1514       // Let's quit 
    1515     case GDK_Escape: 
    1516 #ifndef NDEBUG 
    1517       g_print("Escape key\n"); 
    1518 #endif 
    1519       gtk_main_quit(); 
    1520       break; 
    1521  
    1522     default: 
    1523 #ifndef NDEBUG 
    1524       g_print("\n"); 
    1525 #endif 
    1526       return FALSE; 
    1527     } 
    1528  
     1536          gtk_window_unfullscreen((GtkWindow *) (data)); 
     1537        break; 
     1538         
     1539        // Let's quit 
     1540      case GDK_Escape: 
     1541#ifndef NDEBUG 
     1542        g_print("Escape key\n"); 
     1543#endif 
     1544        gtk_main_quit(); 
     1545        break; 
     1546         
     1547      default: 
     1548#ifndef NDEBUG 
     1549        g_print("Unknown key\n"); 
     1550#endif 
     1551        return FALSE; 
     1552      } 
     1553    } 
    15291554  return TRUE; 
    15301555}