[Xfce4-commits] ristretto:ristretto-0.0 Implement image-cache size calculation
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
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