Exemplo n.º 1
0
void
gegl_cache_invalidate (GeglCache           *self,
                       const GeglRectangle *roi)
{
  gint i;
  g_mutex_lock (&self->mutex);

  if (roi)
    {
      GeglRectangle expanded = gegl_rectangle_expand (roi);

      GeglRegion *temp_region;
      temp_region = gegl_region_rectangle (&expanded);
      for (i = 0; i < GEGL_CACHE_VALID_MIPMAPS; i++)
        gegl_region_subtract (self->valid_region[i], temp_region);
      gegl_region_destroy (temp_region);
      g_signal_emit (self, gegl_cache_signals[INVALIDATED], 0,
                     roi, NULL);
    }
  else
    {
      GeglRectangle rect = { 0, 0, 0, 0 }; /* should probably be the extent of the cache */
      for (i = 0; i < GEGL_CACHE_VALID_MIPMAPS; i++)
      {
        if (self->valid_region[i])
          gegl_region_destroy (self->valid_region[i]);
        self->valid_region[i] = gegl_region_new ();
      }
      g_signal_emit (self, gegl_cache_signals[INVALIDATED], 0,
                     &rect, NULL);
    }
  g_mutex_unlock (&self->mutex);
}
Exemplo n.º 2
0
static void
node_invalidated (GeglNode            *source,
                  const GeglRectangle *rect,
                  gpointer             data)
{
    GeglCache *cache = GEGL_CACHE (data);
    GeglRectangle expanded = gegl_rectangle_expand (rect);

    {
        GeglRegion *region;
        region = gegl_region_rectangle (&expanded);
        gegl_region_subtract (cache->valid_region, region);
        gegl_region_destroy (region);
    }

    g_mutex_lock (cache->mutex);
    g_signal_emit_by_name (cache, "invalidated", &expanded, NULL);
    g_mutex_unlock (cache->mutex);
}
Exemplo n.º 3
0
void
gegl_cache_invalidate (GeglCache           *self,
                       const GeglRectangle *roi)
{
#if 0
    if (roi)
    {
        gegl_buffer_clear (GEGL_BUFFER (self), roi);
    }
    else
    {
        g_warning ("XXX: full invalidation of GeglCache NYI\n");
    }
#endif

    g_mutex_lock (self->mutex);

    if (roi)
    {
        GeglRectangle expanded = gegl_rectangle_expand (roi);

        GeglRegion *temp_region;
        temp_region = gegl_region_rectangle (&expanded);
        gegl_region_subtract (self->valid_region, temp_region);
        gegl_region_destroy (temp_region);
        g_signal_emit (self, gegl_cache_signals[INVALIDATED], 0,
                       roi, NULL);
    }
    else
    {
        GeglRectangle rect = { 0, 0, 0, 0 }; /* should probably be the extent of the cache */
        if (self->valid_region)
            gegl_region_destroy (self->valid_region);
        self->valid_region = gegl_region_new ();
        g_signal_emit (self, gegl_cache_signals[INVALIDATED], 0,
                       &rect, NULL);
    }
    g_mutex_unlock (self->mutex);
}