also check gradient's opacity
diff --git a/src/artboard.cpp b/src/artboard.cpp
index 1b59a85..395354b 100644
--- a/src/artboard.cpp
+++ b/src/artboard.cpp
@@ -491,7 +491,7 @@
     // For now we're conservative/lazy -- if we see that any of our paints are animated
     // we assume that might make it non-opaque, so we early out
     for (const auto obj : anim->m_KeyedObjects) {
-        auto ptr = this->resolve(obj->objectId());
+        const auto ptr = this->resolve(obj->objectId());
         for (const auto sp : m_ShapePaints) {
             if (ptr == sp) {
                 return true;
diff --git a/src/shapes/paint/linear_gradient.cpp b/src/shapes/paint/linear_gradient.cpp
index 8f680de..45274da 100644
--- a/src/shapes/paint/linear_gradient.cpp
+++ b/src/shapes/paint/linear_gradient.cpp
@@ -128,6 +128,9 @@
 void LinearGradient::opacityChanged() { markGradientDirty(); }
 
 bool LinearGradient::onIsTranslucent() const {
+    if (opacity() < 1) {
+        return true;
+    }
     for (const auto stop : m_Stops) {
         unsigned alpha = stop->colorValue() >> 24;  // helper for this?
         if (alpha != 0xFF) {