Example #1
0
static void
gtk_css_computed_values_create_css_transitions (GtkCssComputedValues *values,
        gint64                timestamp,
        GtkCssComputedValues *source)
{
    TransitionInfo transitions[GTK_CSS_PROPERTY_N_PROPERTIES] = { { 0, } };
    GtkCssValue *durations, *delays, *timing_functions;
    guint i;

    transition_infos_set (transitions, _gtk_css_computed_values_get_value (values, GTK_CSS_PROPERTY_TRANSITION_PROPERTY));

    durations = _gtk_css_computed_values_get_value (values, GTK_CSS_PROPERTY_TRANSITION_DURATION);
    delays = _gtk_css_computed_values_get_value (values, GTK_CSS_PROPERTY_TRANSITION_DELAY);
    timing_functions = _gtk_css_computed_values_get_value (values, GTK_CSS_PROPERTY_TRANSITION_TIMING_FUNCTION);

    for (i = 0; i < GTK_CSS_PROPERTY_N_PROPERTIES; i++)
    {
        GtkStyleAnimation *animation;
        GtkCssValue *start, *end;
        double duration, delay;

        if (!transitions[i].pending)
            continue;

        duration = _gtk_css_number_value_get (_gtk_css_array_value_get_nth (durations, transitions[i].index), 100);
        delay = _gtk_css_number_value_get (_gtk_css_array_value_get_nth (delays, transitions[i].index), 100);
        if (duration + delay == 0.0)
            continue;

        start = _gtk_css_computed_values_get_intrinsic_value (source, i);
        end = _gtk_css_computed_values_get_intrinsic_value (values, i);
        if (_gtk_css_value_equal (start, end))
        {
            animation = gtk_css_computed_values_find_transition (GTK_CSS_COMPUTED_VALUES (source), i);
            if (animation)
                values->animations = g_slist_prepend (values->animations, g_object_ref (animation));
        }
        else
        {
            animation = _gtk_css_transition_new (i,
                                                 _gtk_css_computed_values_get_value (source, i),
                                                 _gtk_css_array_value_get_nth (timing_functions, i),
                                                 timestamp + delay * G_USEC_PER_SEC,
                                                 timestamp + (delay + duration) * G_USEC_PER_SEC);
            values->animations = g_slist_prepend (values->animations, animation);
        }
    }
}
Example #2
0
static void
gtk_css_animation_set_values (GtkStyleAnimation    *style_animation,
                              gint64                for_time_us,
                              GtkCssComputedValues *values)
{
  GtkCssAnimation *animation = GTK_CSS_ANIMATION (style_animation);
  double iteration, progress;
  guint i;

  iteration = gtk_css_animation_get_iteration (animation, for_time_us);

  if (!gtk_css_animation_is_executing_at_iteration (animation, iteration))
    return;

  progress = gtk_css_animation_get_progress_from_iteration (animation, iteration);
  progress = _gtk_css_ease_value_transform (animation->ease, progress);
  
  for (i = 0; i < _gtk_css_keyframes_get_n_properties (animation->keyframes); i++)
    {
      GtkCssValue *value;
      guint property_id;
      
      property_id = _gtk_css_keyframes_get_property_id (animation->keyframes, i);

      value = _gtk_css_keyframes_get_value (animation->keyframes,
                                            i,
                                            progress,
                                            _gtk_css_computed_values_get_intrinsic_value (values, property_id));
      _gtk_css_computed_values_set_animated_value (values, property_id, value);
      _gtk_css_value_unref (value);
    }
}
Example #3
0
GtkCssValue *
_gtk_css_computed_values_get_value (GtkCssComputedValues *values,
                                    guint                 id)
{
    gtk_internal_return_val_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values), NULL);

    if (values->animated_values &&
            id < values->animated_values->len &&
            g_ptr_array_index (values->animated_values, id))
        return g_ptr_array_index (values->animated_values, id);

    return _gtk_css_computed_values_get_intrinsic_value (values, id);
}