summaryrefslogtreecommitdiff
path: root/gdk-pixbuf
diff options
context:
space:
mode:
authorMatthias Clasen <maclas@gmx.de>2004-08-26 05:33:13 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2004-08-26 05:33:13 +0000
commitcd50f460a5feed71868a6530e5baad08b1a326af (patch)
treec2792f683a6bbd7d5a73c57aaa70bd391283c0ea /gdk-pixbuf
parenteee651cc915d84fe99cabca70d2aedd8e4270f01 (diff)
downloadgtk+-cd50f460a5feed71868a6530e5baad08b1a326af.tar.gz
Add gdk_pixbuf_new_from_file_at_scale(), which is just like
Thu Aug 26 01:23:16 2004 Matthias Clasen <maclas@gmx.de> * gdk-pixbuf-core.h: * gdk-pixbuf.symbols: * gdk-pixbuf-io.c (gdk_pixbuf_new_from_file_at_scale): Add gdk_pixbuf_new_from_file_at_scale(), which is just like gdk_pixbuf_new_from_file_at_size(), but optionally ignores the aspect ratio. (#136395, Dom Lachowicz)
Diffstat (limited to 'gdk-pixbuf')
-rw-r--r--gdk-pixbuf/ChangeLog9
-rw-r--r--gdk-pixbuf/gdk-pixbuf-core.h5
-rw-r--r--gdk-pixbuf/gdk-pixbuf-io.c78
-rw-r--r--gdk-pixbuf/gdk-pixbuf.symbols1
4 files changed, 76 insertions, 17 deletions
diff --git a/gdk-pixbuf/ChangeLog b/gdk-pixbuf/ChangeLog
index 3717c4329b..a2967d28b5 100644
--- a/gdk-pixbuf/ChangeLog
+++ b/gdk-pixbuf/ChangeLog
@@ -1,3 +1,12 @@
+Thu Aug 26 01:23:16 2004 Matthias Clasen <maclas@gmx.de>
+
+ * gdk-pixbuf-core.h:
+ * gdk-pixbuf.symbols:
+ * gdk-pixbuf-io.c (gdk_pixbuf_new_from_file_at_scale):
+ Add gdk_pixbuf_new_from_file_at_scale(), which is just
+ like gdk_pixbuf_new_from_file_at_size(), but optionally
+ ignores the aspect ratio. (#136395, Dom Lachowicz)
+
Wed Aug 25 17:23:23 2004 Manish Singh <yosh@gimp.org>
* io-gif.c: remove unused set_need_recomposite() function.
diff --git a/gdk-pixbuf/gdk-pixbuf-core.h b/gdk-pixbuf/gdk-pixbuf-core.h
index 3110a62380..c0f5668ba2 100644
--- a/gdk-pixbuf/gdk-pixbuf-core.h
+++ b/gdk-pixbuf/gdk-pixbuf-core.h
@@ -122,6 +122,11 @@ GdkPixbuf *gdk_pixbuf_new_from_file_at_size (const char *filename,
int width,
int height,
GError **error);
+GdkPixbuf *gdk_pixbuf_new_from_file_at_scale (const char *filename,
+ int width,
+ int height,
+ gboolean keep_aspect_ratio,
+ GError **error);
GdkPixbuf *gdk_pixbuf_new_from_data (const guchar *data,
GdkColorspace colorspace,
diff --git a/gdk-pixbuf/gdk-pixbuf-io.c b/gdk-pixbuf/gdk-pixbuf-io.c
index 88d223ee44..b22fc86aa0 100644
--- a/gdk-pixbuf/gdk-pixbuf-io.c
+++ b/gdk-pixbuf/gdk-pixbuf-io.c
@@ -868,49 +868,59 @@ size_prepared_cb (GdkPixbufLoader *loader,
gpointer data)
{
struct {
- int width;
- int height;
+ gint width;
+ gint height;
+ gboolean preserve_aspect_ratio;
} *info = data;
g_return_if_fail (width > 0 && height > 0);
- if ((double)height * (double)info->width >
- (double)width * (double)info->height) {
- width = 0.5 + (double)width * (double)info->height / (double)height;
- height = info->height;
+ if(info->preserve_aspect_ratio) {
+ if ((double)height * (double)info->width >
+ (double)width * (double)info->height) {
+ width = 0.5 + (double)width * (double)info->height / (double)height;
+ height = info->height;
+ } else {
+ height = 0.5 + (double)height * (double)info->width / (double)width;
+ width = info->width;
+ }
} else {
- height = 0.5 + (double)height * (double)info->width / (double)width;
width = info->width;
+ height = info->height;
}
-
+
gdk_pixbuf_loader_set_size (loader, width, height);
}
/**
- * gdk_pixbuf_new_from_file_at_size:
+ * gdk_pixbuf_new_from_file_at_scale:
* @filename: Name of file to load.
* @width: The width the image should have
* @height: The height the image should have
+ * @preserve_aspect_ratio: %TRUE to preserve the image's aspect ratio
* @error: Return location for an error
*
* Creates a new pixbuf by loading an image from a file. The file format is
* detected automatically. If %NULL is returned, then @error will be set.
* Possible errors are in the #GDK_PIXBUF_ERROR and #G_FILE_ERROR domains.
- * The image will be scaled to fit in the requested size, preserving its aspect ratio.
+ * The image will be scaled to fit in the requested size, optionally preserving
+ * the image's aspect ratio.
*
- * Return value: A newly-created pixbuf with a reference count of 1, or %NULL if
- * any of several error conditions occurred: the file could not be opened,
+ * Return value: A newly-created pixbuf with a reference count of 1, or %NULL
+ * if any of several error conditions occurred: the file could not be opened,
* there was no loader for the file's format, there was not enough memory to
* allocate the image buffer, or the image file contained invalid data.
*
- * Since: 2.4
+ * Since: 2.6
**/
GdkPixbuf *
-gdk_pixbuf_new_from_file_at_size (const char *filename,
- int width,
- int height,
- GError **error)
+gdk_pixbuf_new_from_file_at_scale (const char *filename,
+ int width,
+ int height,
+ gboolean preserve_aspect_ratio,
+ GError **error)
{
+
GdkPixbufLoader *loader;
GdkPixbuf *pixbuf;
@@ -920,6 +930,7 @@ gdk_pixbuf_new_from_file_at_size (const char *filename,
struct {
gint width;
gint height;
+ gboolean preserve_aspect_ratio;
} info;
g_return_val_if_fail (filename != NULL, NULL);
@@ -943,6 +954,7 @@ gdk_pixbuf_new_from_file_at_size (const char *filename,
info.width = width;
info.height = height;
+ info.preserve_aspect_ratio = preserve_aspect_ratio;
g_signal_connect (loader, "size-prepared", G_CALLBACK (size_prepared_cb), &info);
@@ -988,6 +1000,38 @@ gdk_pixbuf_new_from_file_at_size (const char *filename,
return pixbuf;
}
+/**
+ * gdk_pixbuf_new_from_file_at_size:
+ * @filename: Name of file to load.
+ * @width: The width the image should have
+ * @height: The height the image should have
+ * @error: Return location for an error
+ *
+ * Creates a new pixbuf by loading an image from a file. The file format is
+ * detected automatically. If %NULL is returned, then @error will be set.
+ * Possible errors are in the #GDK_PIXBUF_ERROR and #G_FILE_ERROR domains.
+ * The image will be scaled to fit in the requested size, preserving
+ * the image's aspect ratio.
+ *
+ * Return value: A newly-created pixbuf with a reference count of 1, or
+ * %NULL if any of several error conditions occurred: the file could not
+ * be opened, there was no loader for the file's format, there was not
+ * enough memory to allocate the image buffer, or the image file contained
+ * invalid data.
+ *
+ * Since: 2.4
+ **/
+GdkPixbuf *
+gdk_pixbuf_new_from_file_at_size (const char *filename,
+ int width,
+ int height,
+ GError **error)
+{
+ return gdk_pixbuf_new_from_file_at_scale (filename,
+ width, height,
+ TRUE, error);
+}
+
static void
info_cb (GdkPixbufLoader *loader,
int width,
diff --git a/gdk-pixbuf/gdk-pixbuf.symbols b/gdk-pixbuf/gdk-pixbuf.symbols
index f42c960239..2d14d2360f 100644
--- a/gdk-pixbuf/gdk-pixbuf.symbols
+++ b/gdk-pixbuf/gdk-pixbuf.symbols
@@ -61,6 +61,7 @@ gdk_pixbuf_new
gdk_pixbuf_new_from_data
gdk_pixbuf_new_from_file
gdk_pixbuf_new_from_file_at_size
+gdk_pixbuf_new_from_file_at_scale
gdk_pixbuf_new_from_inline
gdk_pixbuf_new_from_xpm_data
gdk_pixbuf_new_subpixbuf