X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/8251696239ba2bb74c348a2726fab85a275ebd11..6cb24cbdb6455f4425970c8dc4657318d64e63b2:/lib/gdi/grc.cpp diff --git a/lib/gdi/grc.cpp b/lib/gdi/grc.cpp index e5cab87e..a46b218c 100644 --- a/lib/gdi/grc.cpp +++ b/lib/gdi/grc.cpp @@ -149,7 +149,7 @@ void *gRC::thread() if (m_spinner_enabled) timeout.tv_nsec += 100*1000*1000; else - timeout.tv_nsec += 500*1000*1000; + timeout.tv_sec += 2; /* yes, this is required. */ if (timeout.tv_nsec > 1000*1000*1000) @@ -207,7 +207,8 @@ void gRC::enableSpinner() o.opcode = m_spinner_enabled ? gOpcode::incrementSpinner : gOpcode::enableSpinner; m_spinner_dc->exec(&o); m_spinner_enabled = 1; - + o.opcode = gOpcode::flush; + m_spinner_dc->exec(&o); } void gRC::disableSpinner() @@ -226,6 +227,8 @@ void gRC::disableSpinner() gOpcode o; o.opcode = gOpcode::disableSpinner; m_spinner_dc->exec(&o); + o.opcode = gOpcode::flush; + m_spinner_dc->exec(&o); } static int gPainter_instances; @@ -520,16 +523,6 @@ void gPainter::clippop() m_rc->submit(o); } -void gPainter::flush() -{ - if ( m_dc->islocked() ) - return; - gOpcode o; - o.opcode = gOpcode::flush; - o.dc = m_dc.grabRef(); - m_rc->submit(o); -} - void gPainter::waitVSync() { if ( m_dc->islocked() ) @@ -572,14 +565,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 +800,8 @@ void gDC::incrementSpinner() static int blub; blub++; - + +#if 0 int i; for (i = 0; i < 5; ++i) @@ -816,14 +813,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 *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[len]; + + for (i = 0; i < len; ++i) + m_spinner_pic[i] = pic[i]; } DEFINE_REF(gDC);