cssvalue: Special case resulting color for transparency
authorBenjamin Otte <otte@redhat.com>
Fri, 26 Jun 2015 18:53:39 +0000 (20:53 +0200)
committerBenjamin Otte <otte@redhat.com>
Fri, 26 Jun 2015 18:54:57 +0000 (20:54 +0200)
Again, preparation for using premultiplied color transitions.

gtk/gtkcssrgbavalue.c

index ee73a458f05330d8de5bab6e7b36677c07ee30fe..0b66f8a113806b6a869d9f19b7e46ad387432e1c 100644 (file)
@@ -68,9 +68,16 @@ gtk_css_value_rgba_transition (GtkCssValue *start,
 
   progress = CLAMP (progress, 0, 1);
   result.alpha = transition (start->rgba.alpha, end->rgba.alpha, progress);
-  result.red = transition (start->rgba.red, end->rgba.red, progress);
-  result.green = transition (start->rgba.green, end->rgba.green, progress);
-  result.blue = transition (start->rgba.blue, end->rgba.blue, progress);
+  if (result.alpha <= 0.0)
+    {
+      result.red = result.green = result.blue = 0.0;
+    }
+  else
+    {
+      result.red = transition (start->rgba.red, end->rgba.red, progress);
+      result.green = transition (start->rgba.green, end->rgba.green, progress);
+      result.blue = transition (start->rgba.blue, end->rgba.blue, progress);
+    }
 
   return _gtk_css_rgba_value_new_from_rgba (&result);
 }