static gboolean
gimp_operation_tile_source_process (GeglOperation       *operation,
                                    GeglBuffer          *output,
                                    const GeglRectangle *result)
{
  GimpOperationTileSource *self = GIMP_OPERATION_TILE_SOURCE (operation);
  const Babl              *format;
  PixelRegion              srcPR;
  gpointer                 pr;

  if (! self->tile_manager)
    return FALSE;

  format = gimp_bpp_to_babl_format (tile_manager_bpp (self->tile_manager),
                                    self->linear);

  pixel_region_init (&srcPR, self->tile_manager,
                     result->x,     result->y,
                     result->width, result->height,
                     FALSE);

  for (pr = pixel_regions_register (1, &srcPR);
       pr;
       pr = pixel_regions_process (pr))
    {
      GeglRectangle rect = { srcPR.x, srcPR.y, srcPR.w, srcPR.h };

      gegl_buffer_set (output, &rect, format, srcPR.data, srcPR.rowstride);
    }

  return TRUE;
}
static void
gimp_operation_tile_source_prepare (GeglOperation *operation)
{
  GimpOperationTileSource *self = GIMP_OPERATION_TILE_SOURCE (operation);

  if (self->tile_manager)
    {
      const Babl *format;
      guint       bpp = tile_manager_bpp (self->tile_manager);

      if (self->linear)
        format = gimp_bpp_to_babl_format_linear (bpp);
      else
        format = gimp_bpp_to_babl_format (bpp);

      gegl_operation_set_format (operation, "output", format);
    }
}