load up to 64 spinner images, use size of first one instead of hardcoded 105x105
[enigma2.git] / main / enigma.cpp
index eb0a1845f472165eec9762edb5ae9d9d75167047..14251ac7b63feb3dc2fb41b5936afcb03ecf1738 100644 (file)
@@ -58,8 +58,26 @@ int getPrevAsciiCode()
 
 void keyEvent(const eRCKey &key)
 {
+       static eRCKey last(0, 0, 0);
+       static int num_repeat;
+
        ePtr<eActionMap> ptr;
        eActionMap::getInstance(ptr);
+
+       if ((key.code == last.code) && (key.producer == last.producer) && key.flags & eRCKey::flagRepeat)
+               num_repeat++;
+       else
+       {
+               num_repeat = 0;
+               last = key;
+       }
+
+       if (num_repeat == 4)
+       {
+               ptr->keyPressed(key.producer->getIdentifier(), key.code, eRCKey::flagLong);
+               num_repeat++;
+       }
+
        if (key.flags & eRCKey::flagAscii)
        {
                prev_ascii_code = key.code;
@@ -194,18 +212,23 @@ int main(int argc, char **argv)
        
        {
                int i;
-               ePtr<gPixmap> wait[4];
-               for (i=0; i<4; ++i)
+#define MAX_SPINNER 64
+               ePtr<gPixmap> wait[MAX_SPINNER];
+               for (i=0; i<MAX_SPINNER; ++i)
                {
                        char filename[strlen(DATADIR) + 20];
                        sprintf(filename, DATADIR "/enigma2/wait%d.png", i + 1);
                        if (loadPNG(wait[i], filename))
                        {
-                               eDebug("failed to load %s! (%m)", filename);
-                               continue;
+                               if (!i)
+                                       eDebug("failed to load %s! (%m)", filename);
+                               else
+                                       eDebug("found %d spinner!\n", i);
+                               break;
                        }
                }
-               my_dc->setSpinner(eRect(100, 100, 105, 105), wait, 4);
+               if (i)
+                       my_dc->setSpinner(eRect(ePoint(100, 100), wait[0]->size()), wait, i);
        }
        
        gRC::getInstance()->setSpinnerDC(my_dc);