view->time = 60.0;
view->drift_correct = 0.0;
view->timer = 0;
+ view->zap_time = 0.0;
view->cell_width = 0;
view->cell_height = 0;
gtk_widget_queue_draw_area (GTK_WIDGET (view), x, y, view->cell_width, view->cell_height);
}
-#define TIMER_INTERVAL_MS 100
+#define TIMER_INTERVAL_MS 100.0
static void
grr_board_view_refresh_timer (grr_board_view_t *view)
view->time -= TIMER_INTERVAL_MS / 1000.0;
view->time += view->drift_correct;
+ if (view->zap_time) {
+ view->time -= view->zap_time;
+ view->zap_time += 1.0;
+ }
+
grr_board_view_refresh_timer (view);
+ if (view->time < 0) {
+ grr_board_view_stop_timer (view);
+ return FALSE;
+ }
+
return TRUE;
}
void
-grr_board_view_start_timer (grr_board_view_t *view, double time)
+grr_board_view_set_timer (grr_board_view_t *view, double time)
{
/* XXX: It would be good to adjust the clock for latency somewhere... */
- /* Correct any drift within the next 10 seconds, or half the
- remaining time --- whichever is less. */
if (view->timer) {
double correction_time;
+ /* Correct any drift within the next 10 seconds, or half the
+ remaining time --- whichever is less. */
if (time >= 20.0)
correction_time = 10.0;
else
view->drift_correct = (time - view->time) / (correction_time * TIMER_INTERVAL_MS);
} else {
view->time = time;
-
- view->timer = gtk_timeout_add (TIMER_INTERVAL_MS, grr_board_view_decrement_timer, view);
+ view->drift_correct = 0.0;
+ view->zap_time = 0.0;
}
}
+void
+grr_board_view_start_timer (grr_board_view_t *view)
+{
+ if (view->timer)
+ return;
+
+ view->timer = gtk_timeout_add (TIMER_INTERVAL_MS, grr_board_view_decrement_timer, view);
+}
+
void
grr_board_view_stop_timer (grr_board_view_t *view)
{
gtk_timeout_remove (view->timer);
view->timer = 0;
view->time = 0.0;
+ view->drift_correct = 0.0;
+ view->zap_time = 0.0;
grr_board_view_refresh_timer (view);
}
void
-grr_board_view_reset_timer (grr_board_view_t *view)
+grr_board_view_zap_timer (grr_board_view_t *view)
{
- grr_board_view_stop_timer (view);
+ view->zap_time = 4;
- view->time = 60.0;
- view->drift_correct = 0.0;
+ grr_board_view_refresh_timer (view);
}
+