[gimp] Implement GimpDrawable::estimate_memsize()
- From: Michael Natterer <mitch src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gimp] Implement GimpDrawable::estimate_memsize()
- Date: Thu, 27 Aug 2009 17:49:17 +0000 (UTC)
commit 1accd760a3a72da5867ca2c4167d41104094380b
Author: Michael Natterer <mitch gimp org>
Date: Thu Aug 27 19:43:45 2009 +0200
Implement GimpDrawable::estimate_memsize()
Add the scaled sizes of all children and of the projection so the
scale dialog's size warning is correct again.
app/core/gimpgrouplayer.c | 46 +++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 46 insertions(+), 0 deletions(-)
---
diff --git a/app/core/gimpgrouplayer.c b/app/core/gimpgrouplayer.c
index 684560c..23ff01f 100644
--- a/app/core/gimpgrouplayer.c
+++ b/app/core/gimpgrouplayer.c
@@ -106,6 +106,10 @@ static void gimp_group_layer_transform (GimpItem *item,
GimpTransformResize clip_result,
GimpProgress *progress);
+static gint64 gimp_group_layer_estimate_memsize (const GimpDrawable *drawable,
+ gint width,
+ gint height);
+
static GeglNode * gimp_group_layer_get_graph (GimpProjectable *projectable);
static GList * gimp_group_layer_get_layers (GimpProjectable *projectable);
@@ -152,6 +156,7 @@ gimp_group_layer_class_init (GimpGroupLayerClass *klass)
GimpObjectClass *gimp_object_class = GIMP_OBJECT_CLASS (klass);
GimpViewableClass *viewable_class = GIMP_VIEWABLE_CLASS (klass);
GimpItemClass *item_class = GIMP_ITEM_CLASS (klass);
+ GimpDrawableClass *drawable_class = GIMP_DRAWABLE_CLASS (klass);
object_class->set_property = gimp_group_layer_set_property;
object_class->get_property = gimp_group_layer_get_property;
@@ -180,6 +185,8 @@ gimp_group_layer_class_init (GimpGroupLayerClass *klass)
item_class->rotate_desc = _("Rotate Group Layer");
item_class->transform_desc = _("Transform Group Layer");
+ drawable_class->estimate_memsize = gimp_group_layer_estimate_memsize;
+
g_object_class_install_property (object_class, PROP_LOCK_CONTENT,
g_param_spec_boolean ("lock-content",
NULL, NULL,
@@ -663,6 +670,45 @@ gimp_group_layer_transform (GimpItem *item,
clip_result, progress);
}
+static gint64
+gimp_group_layer_estimate_memsize (const GimpDrawable *drawable,
+ gint width,
+ gint height)
+{
+ GimpGroupLayer *group = GIMP_GROUP_LAYER (drawable);
+ GList *list;
+ GimpImageBaseType base_type;
+ gint64 memsize = 0;
+
+ for (list = gimp_item_stack_get_item_iter (GIMP_ITEM_STACK (group->children));
+ list;
+ list = g_list_next (list))
+ {
+ GimpDrawable *child = list->data;
+ gint child_width;
+ gint child_height;
+
+ child_width = (gimp_item_get_width (GIMP_ITEM (child)) *
+ width /
+ gimp_item_get_width (GIMP_ITEM (drawable)));
+ child_height = (gimp_item_get_height (GIMP_ITEM (child)) *
+ height /
+ gimp_item_get_height (GIMP_ITEM (drawable)));
+
+ memsize += gimp_drawable_estimate_memsize (child,
+ child_width,
+ child_height);
+ }
+
+ base_type = GIMP_IMAGE_TYPE_BASE_TYPE (gimp_drawable_type (drawable));
+
+ memsize += gimp_projection_estimate_memsize (base_type, width, height);
+
+ return memsize + GIMP_DRAWABLE_CLASS (parent_class)->estimate_memsize (drawable,
+ width,
+ height);
+}
+
static GeglNode *
gimp_group_layer_get_graph (GimpProjectable *projectable)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]