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); } }