code: @Override
      protected boolean isDirty()
      {
          boolean dirty = super.isDirty();
          if (dirty)
          {
              return true;
          }
          else if (isCheckingDirtyChildPainters())
          {
              for (Painter<T> p : painters)
              {
                  if (p instanceof AbstractPainter)
                  {
                      AbstractPainter<?> ap = (AbstractPainter<?>) p;
                      if (ap.isDirty())
                      {
                          return true;
                      }
                  }
              }
          }
          return false;
      }
docs: <p>This <code>CompoundPainter</code> is dirty if it, or (optionally)
  any of its children, are dirty. If the super implementation returns
  <code>true</code>, we return <code>true</code>.  Otherwise, if
  {@link #isCheckingDirtyChildPainters()} is <code>true</code>, we iterate
  over all child <code>Painter</code>s and query them to see
  if they are dirty. If so, then <code>true</code> is returned.
  Otherwise, we return <code>false</code>.</p>
  
  @see #isCheckingDirtyChildPainters()