@Override
 public Renderer createRenderer(Reader reader, int width, int height, PixelFormat pixelFormat) {
   renderer = new RendererImpl(reader, width, height, pixelFormat);
   synchronized (renderer) {
     cursor = renderer.getCursor();
   }
   init(renderer.getWidth(), renderer.getHeight());
   return renderer;
 }
 /**
  * @see
  *     org.locationtech.udig.project.internal.render.impl.RendererImpl#setContext(org.locationtech.udig.project.render.RenderContext)
  */
 @SuppressWarnings("unchecked")
 public void setContext(IRenderContext newContext) {
   if (context != null) {
     ((CompositeRenderContext) context).removeListener(contextListener);
   }
   if (newContext != null) {
     CompositeRenderContext compositeRenderContext = (CompositeRenderContext) newContext;
     compositeRenderContext.addListener(contextListener);
     for (IRenderContext context : compositeRenderContext.getContexts()) {
       if (findExecutor(context) == null) {
         Renderer renderer = getRendererCreator(context).getRenderer((RenderContext) context);
         getRenderExecutors().add(createRenderExecutor(renderer));
       }
     }
     super.setContext(newContext);
   }
 }
 @Override
 public void paintComponent(Graphics g) {
   synchronized (renderer) {
     offscreenImage = renderer.getOffscreanImage();
     if (offscreenImage != null) {
       g.drawImage(offscreenImage, 0, 0, null);
     }
   }
   synchronized (cursor) {
     Image cursorImage = cursor.getImage();
     if (showCursor
         && cursorImage != null
         && g.getClipBounds().intersects(cursor.rX, cursor.rY, cursor.width, cursor.height)) {
       g.drawImage(cursorImage, cursor.rX, cursor.rY, null);
     }
   }
 }
 @Override
 public void setPixelFormat(PixelFormat pixelFormat) {
   if (renderer != null) {
     renderer.initPixelFormat(pixelFormat);
   }
 }