From a5beb7286bff0260e74299fe16cbe1c86de90c76 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 28 May 2007 19:14:58 +0000 Subject: use Nemesis' gearwheel as spinner --- lib/gdi/grc.cpp | 31 +++++++++++++++++++++++++++++-- lib/gdi/grc.h | 7 ++++--- 2 files changed, 33 insertions(+), 5 deletions(-) (limited to 'lib') diff --git a/lib/gdi/grc.cpp b/lib/gdi/grc.cpp index e5cab87e..1c8e3a65 100644 --- a/lib/gdi/grc.cpp +++ b/lib/gdi/grc.cpp @@ -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 *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); diff --git a/lib/gdi/grc.h b/lib/gdi/grc.h index adc1d3be..555f2ffb 100644 --- a/lib/gdi/grc.h +++ b/lib/gdi/grc.h @@ -270,9 +270,10 @@ protected: std::stack m_clip_stack; gRegion m_current_clip; - ePtr m_spinner_saved; + ePtr m_spinner_saved, m_spinner_temp; + ePtr *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 *pic, int len); }; #endif -- cgit v1.2.3