app: separate the queue flushing function from the timeout function
and add g_return_if_fail() to all public functions.
This commit is contained in:
@ -68,6 +68,7 @@ static void gimp_motion_buffer_get_property (GObject *object,
|
|||||||
|
|
||||||
static void gimp_motion_buffer_interpolate_stroke (GimpMotionBuffer *buffer,
|
static void gimp_motion_buffer_interpolate_stroke (GimpMotionBuffer *buffer,
|
||||||
GimpCoords *coords);
|
GimpCoords *coords);
|
||||||
|
static gboolean gimp_motion_buffer_event_queue_timeout (GimpMotionBuffer *buffer);
|
||||||
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (GimpMotionBuffer, gimp_motion_buffer, GIMP_TYPE_OBJECT)
|
G_DEFINE_TYPE (GimpMotionBuffer, gimp_motion_buffer, GIMP_TYPE_OBJECT)
|
||||||
@ -220,6 +221,9 @@ gimp_motion_buffer_eval_event (GimpMotionBuffer *buffer,
|
|||||||
gdouble dir_delta_y = 0.0;
|
gdouble dir_delta_y = 0.0;
|
||||||
gdouble distance = 1.0;
|
gdouble distance = 1.0;
|
||||||
|
|
||||||
|
g_return_if_fail (GIMP_IS_MOTION_BUFFER (buffer));
|
||||||
|
g_return_if_fail (coords != NULL);
|
||||||
|
|
||||||
/* the last_read_motion_time most be set unconditionally, so set
|
/* the last_read_motion_time most be set unconditionally, so set
|
||||||
* it early
|
* it early
|
||||||
*/
|
*/
|
||||||
@ -423,6 +427,8 @@ gimp_motion_buffer_process_event_queue (GimpMotionBuffer *buffer,
|
|||||||
GdkModifierType event_state;
|
GdkModifierType event_state;
|
||||||
gint keep = 0;
|
gint keep = 0;
|
||||||
|
|
||||||
|
g_return_if_fail (GIMP_IS_MOTION_BUFFER (buffer));
|
||||||
|
|
||||||
if (buffer->event_delay)
|
if (buffer->event_delay)
|
||||||
{
|
{
|
||||||
/* If we are in delay we use LAST state, not current */
|
/* If we are in delay we use LAST state, not current */
|
||||||
@ -458,40 +464,20 @@ gimp_motion_buffer_process_event_queue (GimpMotionBuffer *buffer,
|
|||||||
{
|
{
|
||||||
buffer->event_delay_timeout =
|
buffer->event_delay_timeout =
|
||||||
g_timeout_add (50,
|
g_timeout_add (50,
|
||||||
(GSourceFunc) gimp_motion_buffer_flush_event_queue,
|
(GSourceFunc) gimp_motion_buffer_event_queue_timeout,
|
||||||
buffer);
|
buffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
void
|
||||||
gimp_motion_buffer_flush_event_queue (GimpMotionBuffer *buffer)
|
gimp_motion_buffer_flush_event_queue (GimpMotionBuffer *buffer)
|
||||||
{
|
{
|
||||||
buffer->event_delay = FALSE;
|
g_return_if_fail (GIMP_IS_MOTION_BUFFER (buffer));
|
||||||
|
|
||||||
/* Remove the timeout explicitly because this function might be
|
|
||||||
* called directly (not via the timeout)
|
|
||||||
*/
|
|
||||||
if (buffer->event_delay_timeout)
|
if (buffer->event_delay_timeout)
|
||||||
{
|
|
||||||
g_source_remove (buffer->event_delay_timeout);
|
g_source_remove (buffer->event_delay_timeout);
|
||||||
buffer->event_delay_timeout = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (buffer->event_queue->len > 0)
|
gimp_motion_buffer_event_queue_timeout (buffer);
|
||||||
{
|
|
||||||
GimpCoords last_coords = g_array_index (buffer->event_queue,
|
|
||||||
GimpCoords,
|
|
||||||
buffer->event_queue->len - 1);
|
|
||||||
|
|
||||||
gimp_motion_buffer_push_event_history (buffer, &last_coords);
|
|
||||||
|
|
||||||
gimp_motion_buffer_process_event_queue (buffer,
|
|
||||||
buffer->last_active_state,
|
|
||||||
buffer->last_read_motion_time);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return false so a potential timeout calling it gets removed */
|
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -533,3 +519,25 @@ gimp_motion_buffer_interpolate_stroke (GimpMotionBuffer *buffer,
|
|||||||
|
|
||||||
g_array_free (ret_coords, TRUE);
|
g_array_free (ret_coords, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gimp_motion_buffer_event_queue_timeout (GimpMotionBuffer *buffer)
|
||||||
|
{
|
||||||
|
buffer->event_delay = FALSE;
|
||||||
|
buffer->event_delay_timeout = 0;
|
||||||
|
|
||||||
|
if (buffer->event_queue->len > 0)
|
||||||
|
{
|
||||||
|
GimpCoords last_coords = g_array_index (buffer->event_queue,
|
||||||
|
GimpCoords,
|
||||||
|
buffer->event_queue->len - 1);
|
||||||
|
|
||||||
|
gimp_motion_buffer_push_event_history (buffer, &last_coords);
|
||||||
|
|
||||||
|
gimp_motion_buffer_process_event_queue (buffer,
|
||||||
|
buffer->last_active_state,
|
||||||
|
buffer->last_read_motion_time);
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
@ -88,7 +88,7 @@ void gimp_motion_buffer_pop_event_queue (GimpMotionBuffer *buffer,
|
|||||||
void gimp_motion_buffer_process_event_queue (GimpMotionBuffer *buffer,
|
void gimp_motion_buffer_process_event_queue (GimpMotionBuffer *buffer,
|
||||||
GdkModifierType state,
|
GdkModifierType state,
|
||||||
guint32 time);
|
guint32 time);
|
||||||
gboolean gimp_motion_buffer_flush_event_queue (GimpMotionBuffer *buffer);
|
void gimp_motion_buffer_flush_event_queue (GimpMotionBuffer *buffer);
|
||||||
|
|
||||||
|
|
||||||
#endif /* __GIMP_MOTION_BUFFER_H__ */
|
#endif /* __GIMP_MOTION_BUFFER_H__ */
|
||||||
|
Reference in New Issue
Block a user