Пример #1
0
	double SingleTweener::DoUpdate( double dt )
	{
	  const double t( std::min(duration_ - date_, dt) );
	  const double result = dt - t;
	  date_ += t;

	  const double val( GetValue() );

	  update_callback_(val);

	  return result;
	}
Пример #2
0
void discobreak::Lwindow::Run() {
    XMapWindow(display_->xdisplay_, win_);

    x11_fd_ = ConnectionNumber(display_->xdisplay_);
    gettimeofday(&t1_, NULL);

    glXMakeCurrent(display_->xdisplay_, win_, graphics_->gg_->glc_);
    Atom wmDeleteMessage = XInternAtom(display_->xdisplay_, "WM_DELETE_WINDOW", False);
    XSetWMProtocols(display_->xdisplay_, win_, &wmDeleteMessage, 1);
    bool running = true;
    while (running) {
        // Create a File Description Set containing x11_fd
        FD_ZERO(&in_fds_);
        FD_SET(x11_fd_, &in_fds_);

        // Set our timer.  One second sounds good.
        tv_.tv_usec = 16660;
        tv_.tv_sec = 0;

        // Wait for X Event or a Timer
        if (select(x11_fd_+1, &in_fds_, 0, 0, &tv_)) {
            if(XPending(display_->xdisplay_))
                XNextEvent(display_->xdisplay_, &xev_);
            if (xev_.xclient.data.l[0] == static_cast<long>(wmDeleteMessage)) {
                running = false;
            } else if (xev_.type == KeyPress || xev_.type == KeyRelease) {
                Input::SetKeyState((char)XLookupKeysym(&xev_.xkey, xev_.xkey.state), xev_.type == KeyPress);
                //printf("%i\n", (int)XLookupKeysym(&xev_.xkey, xev_.xkey.state));
            } else if(xev_.type == DestroyNotify)
                running = false;
            xev_ = XEvent();
        }
        else {
            // Handle timer here
            XGetWindowAttributes(display_->xdisplay_, win_, &gwa_);
            glViewport(0, 0, gwa_.width, gwa_.height);
            gettimeofday(&t2_, NULL);
            elapsedTime_ = (t2_.tv_sec - t1_.tv_sec) * 1000.0;      // sec to ms
            elapsedTime_ += (t2_.tv_usec - t1_.tv_usec) / 1000.0;   // us to ms
            if(update_callback_) update_callback_(elapsedTime_);
            if(draw_callback_) draw_callback_(elapsedTime_);
			Input::PostUpdate();
            gettimeofday(&t1_, NULL);
            glXSwapBuffers(display_->xdisplay_, win_);
        }
    }
    return;
}
Пример #3
0
void mixable::updated() const {
  if (update_callback_) {
    update_callback_();
  }
}