~oem-solutions-group/unity-2d/clutter-1.0

« back to all changes in this revision

Viewing changes to clutter/clutter-timeout-interval.c

  • Committer: Bazaar Package Importer
  • Author(s): Emilio Pozuelo Monfort
  • Date: 2010-03-21 13:27:56 UTC
  • mto: (2.1.3 experimental)
  • mto: This revision was merged to the branch mainline in revision 8.
  • Revision ID: james.westby@ubuntu.com-20100321132756-nf8yd30yxo3zzwcm
Tags: upstream-1.2.2
ImportĀ upstreamĀ versionĀ 1.2.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
32
32
 
33
33
void
34
34
_clutter_timeout_interval_init (ClutterTimeoutInterval *interval,
35
 
                                guint fps)
 
35
                                guint                   fps)
36
36
{
37
37
  g_get_current_time (&interval->start_time);
38
38
  interval->fps = fps;
40
40
}
41
41
 
42
42
static guint
43
 
_clutter_timeout_interval_get_ticks (const GTimeVal *current_time,
 
43
_clutter_timeout_interval_get_ticks (const GTimeVal         *current_time,
44
44
                                     ClutterTimeoutInterval *interval)
45
45
{
46
46
  return ((current_time->tv_sec - interval->start_time.tv_sec) * 1000
47
 
          + (current_time->tv_usec - interval->start_time.tv_usec) / 1000);
 
47
        + (current_time->tv_usec - interval->start_time.tv_usec) / 1000);
48
48
}
49
49
 
50
50
gboolean
51
 
_clutter_timeout_interval_prepare (const GTimeVal *current_time,
 
51
_clutter_timeout_interval_prepare (const GTimeVal         *current_time,
52
52
                                   ClutterTimeoutInterval *interval,
53
 
                                   gint *delay)
 
53
                                   gint                   *delay)
54
54
{
55
 
  guint elapsed_time
56
 
    = _clutter_timeout_interval_get_ticks (current_time, interval);
57
 
  guint new_frame_num = elapsed_time * interval->fps / 1000;
 
55
  guint elapsed_time, new_frame_num;
 
56
 
 
57
  elapsed_time = _clutter_timeout_interval_get_ticks (current_time,
 
58
                                                      interval);
 
59
  new_frame_num = elapsed_time * interval->fps
 
60
                / 1000;
58
61
 
59
62
  /* If time has gone backwards or the time since the last frame is
60
63
     greater than the two frames worth then reset the time and do a
67
70
 
68
71
      /* Reset the start time */
69
72
      interval->start_time = *current_time;
 
73
 
70
74
      /* Move the start time as if one whole frame has elapsed */
71
75
      g_time_val_add (&interval->start_time, -(gint) frame_time * 1000);
72
76
 
74
78
 
75
79
      if (delay)
76
80
        *delay = 0;
 
81
 
77
82
      return TRUE;
78
83
    }
79
84
  else if (new_frame_num > interval->frame_count)
80
85
    {
81
86
      if (delay)
82
87
        *delay = 0;
 
88
 
83
89
      return TRUE;
84
90
    }
85
91
  else
86
92
    {
87
93
      if (delay)
88
94
        *delay = ((interval->frame_count + 1) * 1000 / interval->fps
89
 
                  - elapsed_time);
 
95
               - elapsed_time);
 
96
 
90
97
      return FALSE;
91
98
    }
92
99
}
99
106
  if ((* callback) (user_data))
100
107
    {
101
108
      interval->frame_count++;
 
109
 
102
110
      return TRUE;
103
111
    }
104
 
  else
105
 
    return FALSE;
 
112
 
 
113
  return FALSE;
106
114
}
107
115
 
108
116
gint
115
123
  gint comparison;
116
124
 
117
125
  b_difference = ((a->start_time.tv_sec - b->start_time.tv_sec) * 1000
118
 
                  + (a->start_time.tv_usec - b->start_time.tv_usec) / 1000);
 
126
               + (a->start_time.tv_usec - b->start_time.tv_usec) / 1000);
119
127
 
120
128
  comparison = ((gint) ((a->frame_count + 1) * a_delay)
121
 
                - (gint) ((b->frame_count + 1) * b_delay + b_difference));
 
129
             - (gint) ((b->frame_count + 1) * b_delay + b_difference));
122
130
 
123
131
  return (comparison < 0 ? -1
124
 
          : comparison > 0 ? 1
125
 
          : 0);
 
132
                         : comparison > 0 ? 1
 
133
                                          : 0);
126
134
}