added new function gimp_g_value_get_memsize() that attempts to calculate

2004-07-13  Sven Neumann  <sven@gimp.org>

	* app/core/gimp-utils.[ch]: added new function
	gimp_g_value_get_memsize() that attempts to calculate the memory
	requirements for a GValue.

	* app/text/gimptextundo.c (gimp_text_undo_get_memsize): use the
	new function to obtain a better estimate for the size of the text
	undo.
This commit is contained in:
Sven Neumann 2004-07-13 10:09:22 +00:00 committed by Sven Neumann
parent 11795e78f4
commit f274dce25b
4 changed files with 52 additions and 9 deletions

View File

@ -1,3 +1,13 @@
2004-07-13 Sven Neumann <sven@gimp.org>
* app/core/gimp-utils.[ch]: added new function
gimp_g_value_get_memsize() that attempts to calculate the memory
requirements for a GValue.
* app/text/gimptextundo.c (gimp_text_undo_get_memsize): use the
new function to obtain a better estimate for the size of the text
undo.
2004-07-13 Sven Neumann <sven@gimp.org>
* app/tools/gimptexttool.c (gimp_text_tool_create_layer): plugged

View File

@ -27,6 +27,8 @@
#include "core-types.h"
#include "config/gimpconfig-types.h"
#include "gimp-utils.h"
@ -99,6 +101,39 @@ gimp_g_list_get_memsize (GList *list,
return g_list_length (list) * (data_size + sizeof (GList));
}
gint64
gimp_g_value_get_memsize (GValue *value)
{
gint64 memsize = sizeof (GValue);
if (G_VALUE_HOLDS_STRING (value))
{
memsize += strlen (g_value_get_string (value)) + 1;
}
else if (G_VALUE_HOLDS_BOXED (value))
{
if (GIMP_VALUE_HOLDS_COLOR (value))
{
memsize += sizeof (GimpRGB);
}
else if (GIMP_VALUE_HOLDS_MATRIX2 (value))
{
memsize += sizeof (GimpMatrix2);
}
else
{
g_warning ("%s: unhandled boxed value type: %s",
G_STRFUNC, G_VALUE_TYPE_NAME (value));
}
}
else if (G_VALUE_HOLDS_OBJECT (value))
{
g_warning ("%s: unhandled object value type: %s",
G_STRFUNC, G_VALUE_TYPE_NAME (value));
}
return memsize;
}
/*
* basically copied from gtk_get_default_language()

View File

@ -39,6 +39,7 @@ gint64 gimp_g_slist_get_memsize (GSList *slist,
gint64 data_size);
gint64 gimp_g_list_get_memsize (GList *list,
gint64 data_size);
gint64 gimp_g_value_get_memsize (GValue *value);
gchar * gimp_get_default_language (const gchar *category);

View File

@ -27,6 +27,7 @@
#include "core/gimpitem.h"
#include "core/gimpitemundo.h"
#include "core/gimp-utils.h"
#include "gimptext.h"
#include "gimptextlayer.h"
@ -199,15 +200,11 @@ gimp_text_undo_get_memsize (GimpObject *object,
GimpTextUndo *undo = GIMP_TEXT_UNDO (object);
gint64 memsize = 0;
if (undo->pspec)
{
/* this is incorrect, but how can it be done better? */
memsize = sizeof (GValue);
}
else if (undo->text)
{
memsize = gimp_object_get_memsize (GIMP_OBJECT (undo->text), NULL);
}
if (undo->value)
memsize += gimp_g_value_get_memsize (undo->value);
if (undo->text)
memsize += gimp_object_get_memsize (GIMP_OBJECT (undo->text), NULL);
return memsize + GIMP_OBJECT_CLASS (parent_class)->get_memsize (object,
gui_size);