app: virtualize GimpBrush::begin_use() and ::end_use()

This commit is contained in:
Michael Natterer 2011-04-12 13:59:04 +02:00
parent 391c74899c
commit 5a4a741936
2 changed files with 58 additions and 44 deletions

View File

@ -81,6 +81,8 @@ static gchar * gimp_brush_get_description (GimpViewable *vie
static void gimp_brush_dirty (GimpData *data);
static const gchar * gimp_brush_get_extension (GimpData *data);
static void gimp_brush_real_begin_use (GimpBrush *brush);
static void gimp_brush_real_end_use (GimpBrush *brush);
static GimpBrush * gimp_brush_real_select_brush (GimpBrush *brush,
const GimpCoords *last_coords,
const GimpCoords *current_coords);
@ -131,6 +133,8 @@ gimp_brush_class_init (GimpBrushClass *klass)
data_class->dirty = gimp_brush_dirty;
data_class->get_extension = gimp_brush_get_extension;
klass->begin_use = gimp_brush_real_begin_use;
klass->end_use = gimp_brush_real_end_use;
klass->select_brush = gimp_brush_real_select_brush;
klass->want_null_motion = gimp_brush_real_want_null_motion;
klass->transform_size = gimp_brush_real_transform_size;
@ -406,6 +410,32 @@ gimp_brush_get_extension (GimpData *data)
return GIMP_BRUSH_FILE_EXTENSION;
}
static void
gimp_brush_real_begin_use (GimpBrush *brush)
{
brush->mask_cache =
gimp_brush_cache_new ((GDestroyNotify) temp_buf_free, 'M', 'm');
brush->pixmap_cache =
gimp_brush_cache_new ((GDestroyNotify) temp_buf_free, 'P', 'p');
brush->boundary_cache =
gimp_brush_cache_new ((GDestroyNotify) gimp_bezier_desc_free, 'B', 'b');
}
static void
gimp_brush_real_end_use (GimpBrush *brush)
{
g_object_unref (brush->mask_cache);
brush->mask_cache = NULL;
g_object_unref (brush->pixmap_cache);
brush->pixmap_cache = NULL;
g_object_unref (brush->boundary_cache);
brush->boundary_cache = NULL;
}
static GimpBrush *
gimp_brush_real_select_brush (GimpBrush *brush,
const GimpCoords *last_coords,
@ -479,6 +509,29 @@ gimp_brush_get_standard (GimpContext *context)
return standard_brush;
}
void
gimp_brush_begin_use (GimpBrush *brush)
{
g_return_if_fail (GIMP_IS_BRUSH (brush));
brush->use_count++;
if (brush->use_count == 1)
GIMP_BRUSH_GET_CLASS (brush)->begin_use (brush);
}
void
gimp_brush_end_use (GimpBrush *brush)
{
g_return_if_fail (GIMP_IS_BRUSH (brush));
g_return_if_fail (brush->use_count > 0);
brush->use_count--;
if (brush->use_count == 0)
GIMP_BRUSH_GET_CLASS (brush)->end_use (brush);
}
GimpBrush *
gimp_brush_select_brush (GimpBrush *brush,
const GimpCoords *last_coords,
@ -736,44 +789,3 @@ gimp_brush_set_spacing (GimpBrush *brush,
g_object_notify (G_OBJECT (brush), "spacing");
}
}
void
gimp_brush_begin_use (GimpBrush *brush)
{
g_return_if_fail (GIMP_IS_BRUSH (brush));
brush->use_count++;
if (brush->use_count == 1)
{
brush->mask_cache =
gimp_brush_cache_new ((GDestroyNotify) temp_buf_free, 'M', 'm');
brush->pixmap_cache =
gimp_brush_cache_new ((GDestroyNotify) temp_buf_free, 'P', 'p');
brush->boundary_cache =
gimp_brush_cache_new ((GDestroyNotify) gimp_bezier_desc_free, 'B', 'b');
}
}
void
gimp_brush_end_use (GimpBrush *brush)
{
g_return_if_fail (GIMP_IS_BRUSH (brush));
g_return_if_fail (brush->use_count > 0);
brush->use_count--;
if (brush->use_count == 0)
{
g_object_unref (brush->mask_cache);
brush->mask_cache = NULL;
g_object_unref (brush->pixmap_cache);
brush->pixmap_cache = NULL;
g_object_unref (brush->boundary_cache);
brush->boundary_cache = NULL;
}
}

View File

@ -55,6 +55,8 @@ struct _GimpBrushClass
GimpDataClass parent_class;
/* virtual functions */
void (* begin_use) (GimpBrush *brush);
void (* end_use) (GimpBrush *brush);
GimpBrush * (* select_brush) (GimpBrush *brush,
const GimpCoords *last_coords,
const GimpCoords *current_coords);
@ -96,6 +98,9 @@ GimpData * gimp_brush_new (GimpContext *context,
const gchar *name);
GimpData * gimp_brush_get_standard (GimpContext *context);
void gimp_brush_begin_use (GimpBrush *brush);
void gimp_brush_end_use (GimpBrush *brush);
GimpBrush * gimp_brush_select_brush (GimpBrush *brush,
const GimpCoords *last_coords,
const GimpCoords *current_coords);
@ -140,8 +145,5 @@ gint gimp_brush_get_spacing (const GimpBrush *brush);
void gimp_brush_set_spacing (GimpBrush *brush,
gint spacing);
void gimp_brush_begin_use (GimpBrush *brush);
void gimp_brush_end_use (GimpBrush *brush);
#endif /* __GIMP_BRUSH_H__ */