Esempio n. 1
0
GeglBuffer *
gimp_applicator_get_cache_buffer (GimpApplicator  *applicator,
                                  GeglRectangle  **rectangles,
                                  gint            *n_rectangles)
{
  g_return_val_if_fail (GIMP_IS_APPLICATOR (applicator), NULL);
  g_return_val_if_fail (rectangles != NULL, NULL);
  g_return_val_if_fail (n_rectangles != NULL, NULL);

  if (applicator->output_cache_node)
    {
      GeglBuffer *cache;

      gegl_node_get (applicator->output_cache_node,
                     "cache", &cache,
                     NULL);

      if (cache)
        {
          if (gegl_buffer_list_valid_rectangles (cache, rectangles, n_rectangles))
            return cache;

          g_object_unref (cache);
        }
    }

  return NULL;
}
Esempio n. 2
0
GeglBuffer *
gimp_applicator_get_cache_buffer (GimpApplicator  *applicator,
                                  GeglRectangle  **rectangles,
                                  gint            *n_rectangles)
{
  if (applicator->cache_node)
    {
      GeglBuffer *cache;

      gegl_node_get (applicator->cache_node,
                     "cache", &cache,
                     NULL);

      if (cache)
        {
          if (gegl_buffer_list_valid_rectangles (cache, rectangles, n_rectangles))
            return cache;

          g_object_unref (cache);
        }
    }

  return NULL;
}
Esempio n. 3
0
void
gimp_applicator_set_preview (GimpApplicator      *applicator,
                             gboolean             enable,
                             const GeglRectangle *rect)
{
  g_return_if_fail (GIMP_IS_APPLICATOR (applicator));
  g_return_if_fail (rect != NULL);

  if (! applicator->preview_cache_node)
    return;

  if (applicator->preview_enabled     != enable      ||
      applicator->preview_rect.x      != rect->x     ||
      applicator->preview_rect.y      != rect->y     ||
      applicator->preview_rect.width  != rect->width ||
      applicator->preview_rect.height != rect->height)
    {
      if (enable)
        {
          if (! applicator->preview_enabled)
            {
              gegl_node_set (applicator->preview_crop_node,
                             "operation", "gimp:compose-crop",
                             "x",         rect->x,
                             "y",         rect->y,
                             "width",     rect->width,
                             "height",    rect->height,
                             NULL);

              gegl_node_connect_to (applicator->input_node,        "output",
                                    applicator->preview_crop_node, "aux");
            }
          else
            {
              gegl_node_set (applicator->preview_crop_node,
                             "x",      rect->x,
                             "y",      rect->y,
                             "width",  rect->width,
                             "height", rect->height,
                             NULL);
            }
        }
      else if (applicator->preview_enabled)
        {
          GeglBuffer *cache;

          gegl_node_disconnect (applicator->preview_crop_node, "aux");
          gegl_node_set (applicator->preview_crop_node,
                         "operation", "gegl:nop",
                         NULL);

          /*  when disabling the preview, preserve the cached result
           *  by processing it into the output cache, which only
           *  involves the mode and affect nodes.
           */
          gegl_node_get (applicator->preview_cache_node,
                         "cache", &cache,
                         NULL);

          if (cache)
            {
              GeglRectangle *rectangles;
              gint           n_rectangles;

              if (gegl_buffer_list_valid_rectangles (cache, &rectangles,
                                                     &n_rectangles))
                {
                  gint i;

                  for (i = 0; i < n_rectangles; i++)
                    gegl_node_blit (applicator->output_cache_node, 1.0,
                                    &rectangles[i],
                                    NULL, NULL, 0, GEGL_BLIT_DEFAULT);

                  g_free (rectangles);
                }

              g_object_unref (cache);
            }
        }

      applicator->preview_enabled = enable;
      applicator->preview_rect    = *rect;
    }
}