diff --git a/modes/Pedestal.cc b/modes/Pedestal.cc new file mode 100644 index 0000000..37894f6 --- /dev/null +++ b/modes/Pedestal.cc @@ -0,0 +1,67 @@ + +#include +#include +#include +#include +#include + +#include +#include + +#include "Pedestal.h" + +Pedestal::Pedestal() +{ + m_last_ticks = 0; + srand(time(NULL) + getpid()); +} + +Pedestal::~Pedestal() +{ +} + +bool Pedestal::expose (GnomeScreensaver & gs) +{ + if (m_last_ticks == 0) + { + m_last_ticks = gs.getTicks(); + m_start_ticks = m_last_ticks; + } + uint64_t ticks = gs.getTicks(); + int elapsed = ticks - m_last_ticks; + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + glPushMatrix(); + glRotatef((ticks - m_start_ticks) * 0.1, 0, 0, 1); + + glRotatef(90.0, 1, 0, 0); + m_logobox.draw(); + + glPopMatrix(); + + m_last_ticks = ticks; + + return true; +} + +bool Pedestal::configure (GnomeScreensaver & gs) +{ + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluPerspective(60.0, gs.getAspectRatio() / gs.getNumMonitors(), + 0.01, 1000.0); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + gluLookAt(0, -18, 4, 0, 0, 0, 0, 0, 1); + + glViewport(0, 0, gs.getWidth(), gs.getHeight()); + + return true; +} + +bool Pedestal::update (GnomeScreensaver & gs) +{ + return true; +} diff --git a/modes/Pedestal.h b/modes/Pedestal.h new file mode 100644 index 0000000..bde5a0b --- /dev/null +++ b/modes/Pedestal.h @@ -0,0 +1,24 @@ + +#ifndef PEDESTAL_H +#define PEDESTAL_H + +#include "LogoBox.h" +#include "Mode.h" +#include "GnomeScreensaver.h" + +class Pedestal : public Mode +{ + public: + Pedestal(); + ~Pedestal(); + bool expose (GnomeScreensaver & gs); + bool configure (GnomeScreensaver & gs); + bool update (GnomeScreensaver & gs); + protected: + LogoBox m_logobox; + uint64_t m_last_ticks; + uint64_t m_start_ticks; +}; + +#endif /* PEDESTAL_H */ + diff --git a/src/dwss.cc b/src/dwss.cc index f515de7..eae0e1a 100644 --- a/src/dwss.cc +++ b/src/dwss.cc @@ -35,8 +35,9 @@ static Mode *getMode(GnomeScreensaver & gs) #if 0 return new Starfield(gs); return new Spin(); -#endif return new Tunnel(); +#endif + return new Pedestal(); } int main (int argc, char *argv[])