app: add GimpTileHandlerValidate::invalidated signal

Add a new GimpTileHandlerValidate::invalidated signal, which is
emitted when a region of the buffer is invalidated.  This would
allow us to properly invalidate the graph in response; this
normally happens in response to GeglBuffer::changed, but this
signal is not emitted when a region is merely invalidated.

(cherry picked from commit 3ea391602e)
This commit is contained in:
Ell
2020-01-15 21:38:59 +02:00
parent 537ae20fa0
commit 0a93f5609e
2 changed files with 28 additions and 0 deletions

View File

@ -22,11 +22,19 @@
#include "gimp-gegl-types.h"
#include "core/gimpmarshal.h"
#include "gimp-gegl-loops.h"
#include "gimp-gegl-utils.h"
#include "gimptilehandlervalidate.h"
enum
{
INVALIDATED,
LAST_SIGNAL
};
enum
{
PROP_0,
@ -71,12 +79,24 @@ G_DEFINE_TYPE (GimpTileHandlerValidate, gimp_tile_handler_validate,
#define parent_class gimp_tile_handler_validate_parent_class
static guint gimp_tile_handler_validate_signals[LAST_SIGNAL];
static void
gimp_tile_handler_validate_class_init (GimpTileHandlerValidateClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
gimp_tile_handler_validate_signals[INVALIDATED] =
g_signal_new ("invalidated",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpTileHandlerValidateClass, invalidated),
NULL, NULL,
g_cclosure_marshal_VOID__BOXED,
G_TYPE_NONE, 1,
GEGL_TYPE_RECTANGLE);
object_class->finalize = gimp_tile_handler_validate_finalize;
object_class->set_property = gimp_tile_handler_validate_set_property;
object_class->get_property = gimp_tile_handler_validate_get_property;
@ -462,6 +482,9 @@ gimp_tile_handler_validate_invalidate (GimpTileHandlerValidate *validate,
(cairo_rectangle_int_t *) rect);
gegl_tile_handler_damage_rect (GEGL_TILE_HANDLER (validate), rect);
g_signal_emit (validate, gimp_tile_handler_validate_signals[INVALIDATED],
0, rect, NULL);
}
void

View File

@ -56,6 +56,11 @@ struct _GimpTileHandlerValidateClass
{
GeglTileHandlerClass parent_class;
/* signals */
void (* invalidated) (GimpTileHandlerValidate *validate,
const GeglRectangle *rect);
/* virtual functions */
void (* begin_validate) (GimpTileHandlerValidate *validate);
void (* end_validate) (GimpTileHandlerValidate *validate);
void (* validate) (GimpTileHandlerValidate *validate,