[Xfce4-commits] ristretto:ristretto-0.0 Implement image-cache size calculation

2011-10-23 Thread Stephan Arts
Updating branch refs/heads/ristretto-0.0
 to 4b1c367e21a57eaf0f1785838268f379f22bde89 (commit)
   from e81a905eac295ffb23214cac5f239e8c0370379d (commit)

commit 4b1c367e21a57eaf0f1785838268f379f22bde89
Author: Stephan Arts step...@xfce.org
Date:   Sat May 2 00:32:50 2009 +0200

Implement image-cache size calculation

 ChangeLog |6 ++
 src/image.c   |   14 ++
 src/image.h   |1 +
 src/image_cache.c |   31 +++
 4 files changed, 40 insertions(+), 12 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 3742c2a..dcfc193 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2009-05-02  Stephan Arts step...@xfce.org
 
+   * src/image,c
+ src/image.h
+ src/image_cache.c: Implement image-cache size calculation
+
+2009-05-02  Stephan Arts step...@xfce.org
+
* src/main_window.c: Add jpeg filter to the open-files dialog
 
 2009-05-01  Stephan Arts step...@xfce.org
diff --git a/src/image.c b/src/image.c
index 1442f64..9c53043 100644
--- a/src/image.c
+++ b/src/image.c
@@ -791,3 +791,17 @@ cb_rstto_image_update(RsttoImage *image)
 }
 return TRUE;
 }
+
+guint64
+rstto_image_get_size (RsttoImage *image)
+{
+GdkPixbuf *pixbuf = rstto_image_get_pixbuf (image);
+if (pixbuf)
+{
+gint n_channels = gdk_pixbuf_get_n_channels (pixbuf);
+gint rowstride = gdk_pixbuf_get_rowstride (pixbuf);
+gint height = gdk_pixbuf_get_height (pixbuf);
+return rowstride * height *n_channels;
+}
+return 0;
+}
diff --git a/src/image.h b/src/image.h
index f8f4544..a7866ea 100644
--- a/src/image.h
+++ b/src/image.h
@@ -88,6 +88,7 @@ rstto_image_pop_transformation (RsttoImage *image, GError 
**error);
 
 /* Should only be used by image-transformation implementations */
 void rstto_image_set_pixbuf (RsttoImage *image, GdkPixbuf *pixbuf);
+guint64 rstto_image_get_size (RsttoImage *image);
 
 G_END_DECLS
 
diff --git a/src/image_cache.c b/src/image_cache.c
index 0c2aed6..55f2de3 100644
--- a/src/image_cache.c
+++ b/src/image_cache.c
@@ -90,10 +90,18 @@ void
 rstto_image_cache_push_image (RsttoImageCache *cache, RsttoImage *image, 
gboolean last)
 {
 RsttoSettings *settings = rstto_settings_new();
-GValue val = {0, };
+GValue val = {0, }, val_cache_size = {0, };
+guint64 size = 0;
+guint64 cache_size = 0;
+RsttoImage *c_image;
+GList *iter = NULL;
 
 g_value_init (val, G_TYPE_BOOLEAN);
+g_value_init (val_cache_size, G_TYPE_UINT);
 g_object_get_property (G_OBJECT (settings), enable-cache, val);
+g_object_get_property (G_OBJECT (settings), cache-size, val_cache_size);
+
+cache_size = g_value_get_uint(val_cache_size)*100;
 
 if (cache-cache_list)
 {
@@ -115,24 +123,23 @@ rstto_image_cache_push_image (RsttoImageCache *cache, 
RsttoImage *image, gboolea
 {
 if (g_list_length (cache-cache_list)  1)
 {
-RsttoImage *c_image = g_list_last (cache-cache_list)-data;
+c_image = g_list_last (cache-cache_list)-data;
 rstto_image_unload (c_image);
 cache-cache_list = g_list_remove (cache-cache_list, c_image);
-g_object_unref (image);
 }
 }
 else
 {
-/**
- * TODO:
- * Fix the cache-size calculation
- */
-if (g_list_length (cache-cache_list)  3)
+for (iter = cache-cache_list-next; iter != NULL; iter = g_list_next 
(iter))
 {
-RsttoImage *c_image = g_list_last (cache-cache_list)-data;
-rstto_image_unload (c_image);
-cache-cache_list = g_list_remove (cache-cache_list, c_image);
-g_object_unref (image);
+c_image = iter-data;
+size += rstto_image_get_size (c_image);
+if (size  cache_size)
+{
+rstto_image_unload (c_image);
+cache-cache_list = g_list_remove (cache-cache_list, c_image);
+iter = g_list_previous(iter);
+} 
 }
 }
 g_value_unset (val);
___
Xfce4-commits mailing list
Xfce4-commits@xfce.org
https://mail.xfce.org/mailman/listinfo/xfce4-commits


[Xfce4-commits] ristretto:ristretto-0.0 Implement image-cache size calculation

2011-10-23 Thread Stephan Arts
Updating branch refs/heads/ristretto-0.0
 to 4b1c367e21a57eaf0f1785838268f379f22bde89 (commit)
   from e81a905eac295ffb23214cac5f239e8c0370379d (commit)

commit 4b1c367e21a57eaf0f1785838268f379f22bde89
Author: Stephan Arts step...@xfce.org
Date:   Sat May 2 00:32:50 2009 +0200

Implement image-cache size calculation

 ChangeLog |6 ++
 src/image.c   |   14 ++
 src/image.h   |1 +
 src/image_cache.c |   31 +++
 4 files changed, 40 insertions(+), 12 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 3742c2a..dcfc193 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2009-05-02  Stephan Arts step...@xfce.org
 
+   * src/image,c
+ src/image.h
+ src/image_cache.c: Implement image-cache size calculation
+
+2009-05-02  Stephan Arts step...@xfce.org
+
* src/main_window.c: Add jpeg filter to the open-files dialog
 
 2009-05-01  Stephan Arts step...@xfce.org
diff --git a/src/image.c b/src/image.c
index 1442f64..9c53043 100644
--- a/src/image.c
+++ b/src/image.c
@@ -791,3 +791,17 @@ cb_rstto_image_update(RsttoImage *image)
 }
 return TRUE;
 }
+
+guint64
+rstto_image_get_size (RsttoImage *image)
+{
+GdkPixbuf *pixbuf = rstto_image_get_pixbuf (image);
+if (pixbuf)
+{
+gint n_channels = gdk_pixbuf_get_n_channels (pixbuf);
+gint rowstride = gdk_pixbuf_get_rowstride (pixbuf);
+gint height = gdk_pixbuf_get_height (pixbuf);
+return rowstride * height *n_channels;
+}
+return 0;
+}
diff --git a/src/image.h b/src/image.h
index f8f4544..a7866ea 100644
--- a/src/image.h
+++ b/src/image.h
@@ -88,6 +88,7 @@ rstto_image_pop_transformation (RsttoImage *image, GError 
**error);
 
 /* Should only be used by image-transformation implementations */
 void rstto_image_set_pixbuf (RsttoImage *image, GdkPixbuf *pixbuf);
+guint64 rstto_image_get_size (RsttoImage *image);
 
 G_END_DECLS
 
diff --git a/src/image_cache.c b/src/image_cache.c
index 0c2aed6..55f2de3 100644
--- a/src/image_cache.c
+++ b/src/image_cache.c
@@ -90,10 +90,18 @@ void
 rstto_image_cache_push_image (RsttoImageCache *cache, RsttoImage *image, 
gboolean last)
 {
 RsttoSettings *settings = rstto_settings_new();
-GValue val = {0, };
+GValue val = {0, }, val_cache_size = {0, };
+guint64 size = 0;
+guint64 cache_size = 0;
+RsttoImage *c_image;
+GList *iter = NULL;
 
 g_value_init (val, G_TYPE_BOOLEAN);
+g_value_init (val_cache_size, G_TYPE_UINT);
 g_object_get_property (G_OBJECT (settings), enable-cache, val);
+g_object_get_property (G_OBJECT (settings), cache-size, val_cache_size);
+
+cache_size = g_value_get_uint(val_cache_size)*100;
 
 if (cache-cache_list)
 {
@@ -115,24 +123,23 @@ rstto_image_cache_push_image (RsttoImageCache *cache, 
RsttoImage *image, gboolea
 {
 if (g_list_length (cache-cache_list)  1)
 {
-RsttoImage *c_image = g_list_last (cache-cache_list)-data;
+c_image = g_list_last (cache-cache_list)-data;
 rstto_image_unload (c_image);
 cache-cache_list = g_list_remove (cache-cache_list, c_image);
-g_object_unref (image);
 }
 }
 else
 {
-/**
- * TODO:
- * Fix the cache-size calculation
- */
-if (g_list_length (cache-cache_list)  3)
+for (iter = cache-cache_list-next; iter != NULL; iter = g_list_next 
(iter))
 {
-RsttoImage *c_image = g_list_last (cache-cache_list)-data;
-rstto_image_unload (c_image);
-cache-cache_list = g_list_remove (cache-cache_list, c_image);
-g_object_unref (image);
+c_image = iter-data;
+size += rstto_image_get_size (c_image);
+if (size  cache_size)
+{
+rstto_image_unload (c_image);
+cache-cache_list = g_list_remove (cache-cache_list, c_image);
+iter = g_list_previous(iter);
+} 
 }
 }
 g_value_unset (val);
___
Xfce4-commits mailing list
Xfce4-commits@xfce.org
https://mail.xfce.org/mailman/listinfo/xfce4-commits