// center of the rectangle
   xM = 0.5 * (x0 + x1);
   yM = 0.5 * (y0 + y1);
+  
+  out->useGradients();
 
   // the four corner colors are close (or we hit the recursive limit)
   // -- fill the rectangle; but require at least one subdivision
   vy0 = ty + sMax * dx;
 
   i = 0;
+  if(i < axialMaxSplits)
+    out->useGradients();
+
   while (i < axialMaxSplits) {
 
     // bisect until color difference is small enough or we hit the
     shading->getColor(ta, &colorA);
   }
 
+  if(ia < radialMaxSplits)
+    out->useGradients();
+
   while (ia < radialMaxSplits) {
 
     // go as far along the t axis (toward t1) as we can, such that the
 
   // Does this device use drawChar() or drawString()?
   virtual GBool useDrawChar() = 0;
 
+  // Is this device able to draw gradients?
+  virtual GBool useGradients() = 0;
+
   // Does this device use beginType3Char/endType3Char?  Otherwise,
   // text in Type 3 fonts will be drawn with drawChar/drawString.
   virtual GBool interpretType3Chars() = 0;