use Nemesis' gearwheel as spinner
authorFelix Domke <tmbinc@elitedvb.net>
Mon, 28 May 2007 19:14:58 +0000 (19:14 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Mon, 28 May 2007 19:14:58 +0000 (19:14 +0000)
data/wait1.png [new file with mode: 0755]
data/wait2.png [new file with mode: 0755]
data/wait3.png [new file with mode: 0755]
data/wait4.png [new file with mode: 0755]
lib/gdi/grc.cpp
lib/gdi/grc.h
main/enigma.cpp

diff --git a/data/wait1.png b/data/wait1.png
new file mode 100755 (executable)
index 0000000..506208e
Binary files /dev/null and b/data/wait1.png differ
diff --git a/data/wait2.png b/data/wait2.png
new file mode 100755 (executable)
index 0000000..c41ee52
Binary files /dev/null and b/data/wait2.png differ
diff --git a/data/wait3.png b/data/wait3.png
new file mode 100755 (executable)
index 0000000..952f8db
Binary files /dev/null and b/data/wait3.png differ
diff --git a/data/wait4.png b/data/wait4.png
new file mode 100755 (executable)
index 0000000..ea48620
Binary files /dev/null and b/data/wait4.png differ
index e5cab87e03a1f3036002f59823c2eeba910e1c77..1c8e3a6587ee8994089b5019288b5e79ed4e334b 100644 (file)
@@ -572,14 +572,17 @@ void gPainter::end()
 
 gDC::gDC()
 {
+       m_spinner_pic = 0;
 }
 
 gDC::gDC(gPixmap *pixmap): m_pixmap(pixmap)
 {
+       m_spinner_pic = 0;
 }
 
 gDC::~gDC()
 {
+       delete[] m_spinner_pic;
 }
 
 void gDC::exec(gOpcode *o)
@@ -804,7 +807,8 @@ void gDC::incrementSpinner()
        
        static int blub;
        blub++;
-       
+
+#if 0
        int i;
        
        for (i = 0; i < 5; ++i)
@@ -816,14 +820,37 @@ void gDC::incrementSpinner()
 
                m_pixmap->fill(eRect(x, y, 10, 10), gRGB(col, col, col));
        }
+#endif
+
+       m_spinner_temp->blit(*m_spinner_saved, ePoint(0, 0), eRect(ePoint(0, 0), m_spinner_pos.size()));
+
+       if (m_spinner_pic[m_spinner_i])
+               m_spinner_temp->blit(*m_spinner_pic[m_spinner_i], ePoint(0, 0), eRect(ePoint(0, 0), m_spinner_pos.size()), gPixmap::blitAlphaTest);
+
+       m_pixmap->blit(*m_spinner_temp, m_spinner_pos.topLeft(), gRegion(m_spinner_pos), 0);
+       m_spinner_i++;
+       m_spinner_i %= m_spinner_num;
 }
 
-void gDC::setSpinner(eRect pos)
+void gDC::setSpinner(eRect pos, ePtr<gPixmap> *pic, int len)
 {
        ASSERT(m_pixmap);
        ASSERT(m_pixmap->surface);
        m_spinner_saved = new gPixmap(pos.size(), m_pixmap->surface->bpp);
+       m_spinner_temp = new gPixmap(pos.size(), m_pixmap->surface->bpp);
        m_spinner_pos = pos;
+       
+       m_spinner_i = 0;
+       m_spinner_num = len;
+       
+       int i;
+       if (m_spinner_pic)
+               delete[] m_spinner_pic;
+       
+       m_spinner_pic = new ePtr<gPixmap>[len];
+       
+       for (i = 0; i < len; ++i)
+               m_spinner_pic[i] = pic[i];
 }
 
 DEFINE_REF(gDC);
index adc1d3be82af0aacf7a5fbdb69c86d7f5e5bc704..555f2ffb9485e6e0f1d0cfe5b8d12bf9450710de 100644 (file)
@@ -270,9 +270,10 @@ protected:
        std::stack<gRegion> m_clip_stack;
        gRegion m_current_clip;
        
-       ePtr<gPixmap> m_spinner_saved;
+       ePtr<gPixmap> m_spinner_saved, m_spinner_temp;
+       ePtr<gPixmap> *m_spinner_pic;
        eRect m_spinner_pos;
-       
+       int m_spinner_num, m_spinner_i;
 public:
        virtual void exec(gOpcode *opcode);
        gDC(gPixmap *pixmap);
@@ -287,7 +288,7 @@ public:
        void enableSpinner();
        void disableSpinner();
        void incrementSpinner();
-       void setSpinner(eRect pos);
+       void setSpinner(eRect pos, ePtr<gPixmap> *pic, int len);
 };
 
 #endif
index 45c0c7b37318241e8a28c06390bd7c795a9b431d..eb0a1845f472165eec9762edb5ae9d9d75167047 100644 (file)
@@ -155,7 +155,6 @@ int main(int argc, char **argv)
        eTextPara::forceReplacementGlyph(0xfdf2);
        for (int i = 0xfe80; i < 0xff00; ++i)
                eTextPara::forceReplacementGlyph(i);
-       
 
        eWidgetDesktop dsk(eSize(720, 576));
        eWidgetDesktop dsk_lcd(eSize(132, 64));
@@ -190,7 +189,25 @@ int main(int argc, char **argv)
        dsk.setRedrawTask(main);
        dsk_lcd.setRedrawTask(main);
        
-       my_dc->setSpinner(eRect(100, 100, 120, 40));
+       
+       eDebug("Loading spinners...");
+       
+       {
+               int i;
+               ePtr<gPixmap> wait[4];
+               for (i=0; i<4; ++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;
+                       }
+               }
+               my_dc->setSpinner(eRect(100, 100, 105, 105), wait, 4);
+       }
+       
        gRC::getInstance()->setSpinnerDC(my_dc);
 
        eRCInput::getInstance()->keyEvent.connect(slot(keyEvent));