~ubuntu-branches/ubuntu/precise/gnome-games/precise-proposed

« back to all changes in this revision

Viewing changes to libgames-support/games-clock.c

  • Committer: Package Import Robot
  • Author(s): Rodrigo Moya
  • Date: 2011-05-30 13:32:04 UTC
  • mfrom: (1.3.4)
  • mto: (163.1.3 precise)
  • mto: This revision was merged to the branch mainline in revision 143.
  • Revision ID: package-import@ubuntu.com-20110530133204-celaq1v1dsxc48q1
Tags: upstream-3.0.2
ImportĀ upstreamĀ versionĀ 3.0.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
 
16
16
G_DEFINE_TYPE (GamesClock, games_clock, GTK_TYPE_LABEL)
17
17
 
 
18
struct GamesClockPrivate {
 
19
  guint update_timeout_id;
 
20
  gboolean update;
 
21
  gboolean started;
 
22
  time_t start_time;
 
23
  time_t stop_time;
 
24
};
 
25
 
18
26
static void
19
27
clock_paint (GamesClock *clock_widget)
20
28
{
47
55
static void
48
56
games_clock_start_timer (GamesClock *clock_widget)
49
57
{
50
 
  if (clock_widget->update_timeout_id != 0)
 
58
  if (clock_widget->priv->update_timeout_id != 0)
51
59
    return;
52
60
 
53
 
  clock_widget->update_timeout_id =
 
61
  clock_widget->priv->update_timeout_id =
54
62
    gdk_threads_add_timeout_seconds (1, (GSourceFunc) games_clock_update, clock_widget);
55
63
}
56
64
 
57
65
static void
58
66
games_clock_stop_timer (GamesClock *clock_widget)
59
67
{
60
 
  if (clock_widget->update_timeout_id != 0) {
61
 
    g_source_remove (clock_widget->update_timeout_id);
62
 
    clock_widget->update_timeout_id = 0;
 
68
  if (clock_widget->priv->update_timeout_id != 0) {
 
69
    g_source_remove (clock_widget->priv->update_timeout_id);
 
70
    clock_widget->priv->update_timeout_id = 0;
63
71
  }
64
72
}
65
73
 
79
87
  GObjectClass *object_class = (GObjectClass *) klass;
80
88
 
81
89
  object_class->finalize = games_clock_finalize;
 
90
 
 
91
  g_type_class_add_private (object_class, sizeof (GamesClockPrivate));
82
92
}
83
93
 
84
94
static void
85
95
games_clock_init (GamesClock *clock_widget)
86
96
{
87
 
  clock_widget->update_timeout_id = 0;
88
 
  clock_widget->start_time = clock_widget->stop_time = 0;
89
 
  clock_widget->started = FALSE;
90
 
  clock_widget->update = TRUE;
 
97
  clock_widget->priv = G_TYPE_INSTANCE_GET_PRIVATE (clock_widget, GAMES_TYPE_CLOCK, GamesClockPrivate);
 
98
 
 
99
  clock_widget->priv->update_timeout_id = 0;
 
100
  clock_widget->priv->start_time = clock_widget->priv->stop_time = 0;
 
101
  clock_widget->priv->started = FALSE;
 
102
  clock_widget->priv->update = TRUE;
91
103
 
92
104
  /* FIXMEchpe: call clock_paint() instead */
93
105
  gtk_label_set_text (GTK_LABEL (clock_widget), "00:00:00");
94
106
}
95
107
 
 
108
/**
 
109
 * games_clock_new:
 
110
 * 
 
111
 * Create a new game clock
 
112
 * 
 
113
 * Returns: A new #GamesClock
 
114
 **/
96
115
GtkWidget *
97
116
games_clock_new (void)
98
117
{
112
131
{
113
132
  g_return_if_fail (GAMES_IS_CLOCK (clock_widget));
114
133
 
115
 
  if (clock_widget->started)
 
134
  if (clock_widget->priv->started)
116
135
    return; /* nothing to do */
117
136
 
118
 
  clock_widget->started = TRUE;
119
 
  clock_widget->start_time = time (NULL) - (clock_widget->stop_time - clock_widget->start_time);
 
137
  clock_widget->priv->started = TRUE;
 
138
  clock_widget->priv->start_time = time (NULL) - (clock_widget->priv->stop_time - clock_widget->priv->start_time);
120
139
 
121
 
  if (clock_widget->update)
 
140
  if (clock_widget->priv->update)
122
141
    games_clock_start_timer (clock_widget);
123
142
}
124
143
 
133
152
{
134
153
  g_return_val_if_fail (GAMES_IS_CLOCK (clock_widget), FALSE);
135
154
 
136
 
  return clock_widget->started;
 
155
  return clock_widget->priv->started;
137
156
}
138
157
 
139
158
/**
148
167
{
149
168
  g_return_if_fail (GAMES_IS_CLOCK (clock_widget));
150
169
 
151
 
  if (!clock_widget->started)
 
170
  if (!clock_widget->priv->started)
152
171
    return;
153
172
 
154
 
  clock_widget->started = FALSE;
155
 
  clock_widget->stop_time = time (NULL);
 
173
  clock_widget->priv->started = FALSE;
 
174
  clock_widget->priv->stop_time = time (NULL);
156
175
 
157
176
  games_clock_stop_timer (clock_widget);
158
177
  clock_paint (clock_widget);
169
188
{
170
189
  g_return_if_fail (GAMES_IS_CLOCK (clock_widget));
171
190
 
172
 
  clock_widget->start_time = clock_widget->stop_time = time (NULL);
 
191
  clock_widget->priv->start_time = clock_widget->priv->stop_time = time (NULL);
173
192
 
174
193
  clock_paint (clock_widget);
175
194
}
185
204
{
186
205
  g_return_val_if_fail (GAMES_IS_CLOCK (clock_widget), 0);
187
206
 
188
 
  if (clock_widget->started)
189
 
    return time (NULL) - clock_widget->start_time;
 
207
  if (clock_widget->priv->started)
 
208
    return time (NULL) - clock_widget->priv->start_time;
190
209
  else
191
 
    return clock_widget->stop_time - clock_widget->start_time;
 
210
    return clock_widget->priv->stop_time - clock_widget->priv->start_time;
192
211
}
193
212
 
194
213
/**
204
223
{
205
224
  g_return_if_fail (GAMES_IS_CLOCK (clock_widget));
206
225
 
207
 
  if (!clock_widget->started) {
 
226
  if (!clock_widget->priv->started) {
208
227
    g_warning ("Clock not started, cannot add seconds!\n");
209
228
    return;
210
229
  }
211
230
 
212
 
  clock_widget->start_time -= seconds;
 
231
  clock_widget->priv->start_time -= seconds;
213
232
  clock_paint (clock_widget);
214
233
}
215
234
 
229
248
  g_return_if_fail (GAMES_IS_CLOCK (clock_widget));
230
249
 
231
250
  do_update = do_update != FALSE;
232
 
  if (do_update == clock_widget->update)
 
251
  if (do_update == clock_widget->priv->update)
233
252
    return;
234
253
 
235
 
  clock_widget->update = do_update;
 
254
  clock_widget->priv->update = do_update;
236
255
  if (do_update) {
237
256
    games_clock_start_timer (clock_widget);
238
257
    clock_paint (clock_widget);