Patch by: Ben LeMasurier <ben.lemasurier@gmail.com>
2008-05-08 Jens Granseuer <jensgr@gmx.net> Patch by: Ben LeMasurier <ben.lemasurier@gmail.com> * e-image-chooser.c: (e_image_chooser_init), (set_image_from_data), (image_drag_motion_cb), (image_drag_drop_cb): fix scaling the image on the user photo button (bug #309629) svn path=/trunk/; revision=8697
This commit is contained in:
parent
140deb2526
commit
a854fc712c
2 changed files with 23 additions and 36 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
2008-05-08 Jens Granseuer <jensgr@gmx.net>
|
||||||
|
|
||||||
|
Patch by: Ben LeMasurier <ben.lemasurier@gmail.com>
|
||||||
|
|
||||||
|
* e-image-chooser.c: (e_image_chooser_init), (set_image_from_data),
|
||||||
|
(image_drag_motion_cb), (image_drag_drop_cb): fix scaling the image
|
||||||
|
on the user photo button (bug #309629)
|
||||||
|
|
||||||
2008-04-25 Jens Granseuer <jensgr@gmx.net>
|
2008-04-25 Jens Granseuer <jensgr@gmx.net>
|
||||||
|
|
||||||
* gnome-about-me.c: (about_me_load_photo), (about_me_setup_dialog):
|
* gnome-about-me.c: (about_me_load_photo), (about_me_setup_dialog):
|
||||||
|
|
|
@ -25,17 +25,12 @@
|
||||||
#include <glib-object.h>
|
#include <glib-object.h>
|
||||||
#include <glib/gi18n.h>
|
#include <glib/gi18n.h>
|
||||||
#include <gio/gio.h>
|
#include <gio/gio.h>
|
||||||
#include <gtk/gtkalignment.h>
|
#include <gtk/gtk.h>
|
||||||
#include <gtk/gtkframe.h>
|
|
||||||
#include <gtk/gtkimage.h>
|
|
||||||
#include <gtk/gtkbutton.h>
|
|
||||||
#include <gtk/gtkdnd.h>
|
|
||||||
|
|
||||||
#include "e-image-chooser.h"
|
#include "e-image-chooser.h"
|
||||||
|
|
||||||
struct _EImageChooserPrivate {
|
struct _EImageChooserPrivate {
|
||||||
|
|
||||||
GtkWidget *frame;
|
|
||||||
GtkWidget *image;
|
GtkWidget *image;
|
||||||
GtkWidget *browse_button;
|
GtkWidget *browse_button;
|
||||||
|
|
||||||
|
@ -62,9 +57,6 @@ static void e_image_chooser_dispose (GObject *object);
|
||||||
static gboolean image_drag_motion_cb (GtkWidget *widget,
|
static gboolean image_drag_motion_cb (GtkWidget *widget,
|
||||||
GdkDragContext *context,
|
GdkDragContext *context,
|
||||||
gint x, gint y, guint time, EImageChooser *chooser);
|
gint x, gint y, guint time, EImageChooser *chooser);
|
||||||
static void image_drag_leave_cb (GtkWidget *widget,
|
|
||||||
GdkDragContext *context,
|
|
||||||
guint time, EImageChooser *chooser);
|
|
||||||
static gboolean image_drag_drop_cb (GtkWidget *widget,
|
static gboolean image_drag_drop_cb (GtkWidget *widget,
|
||||||
GdkDragContext *context,
|
GdkDragContext *context,
|
||||||
gint x, gint y, guint time, EImageChooser *chooser);
|
gint x, gint y, guint time, EImageChooser *chooser);
|
||||||
|
@ -144,26 +136,20 @@ e_image_chooser_init (EImageChooser *chooser)
|
||||||
|
|
||||||
priv = chooser->priv = g_new0 (EImageChooserPrivate, 1);
|
priv = chooser->priv = g_new0 (EImageChooserPrivate, 1);
|
||||||
|
|
||||||
priv->frame = gtk_frame_new ("");
|
|
||||||
priv->image = gtk_image_new ();
|
priv->image = gtk_image_new ();
|
||||||
|
|
||||||
gtk_frame_set_shadow_type (GTK_FRAME (priv->frame), GTK_SHADOW_NONE);
|
|
||||||
|
|
||||||
gtk_container_add (GTK_CONTAINER (priv->frame), priv->image);
|
|
||||||
gtk_box_set_homogeneous (GTK_BOX (chooser), FALSE);
|
gtk_box_set_homogeneous (GTK_BOX (chooser), FALSE);
|
||||||
gtk_box_pack_start (GTK_BOX (chooser), priv->frame, TRUE, TRUE, 0);
|
gtk_box_pack_start (GTK_BOX (chooser), priv->image, TRUE, TRUE, 0);
|
||||||
|
|
||||||
gtk_drag_dest_set (priv->image, 0, image_drag_types, num_image_drag_types, GDK_ACTION_COPY);
|
gtk_drag_dest_set (priv->image, 0, image_drag_types, num_image_drag_types, GDK_ACTION_COPY);
|
||||||
g_signal_connect (priv->image,
|
g_signal_connect (priv->image,
|
||||||
"drag_motion", G_CALLBACK (image_drag_motion_cb), chooser);
|
"drag_motion", G_CALLBACK (image_drag_motion_cb), chooser);
|
||||||
g_signal_connect (priv->image,
|
|
||||||
"drag_leave", G_CALLBACK (image_drag_leave_cb), chooser);
|
|
||||||
g_signal_connect (priv->image,
|
g_signal_connect (priv->image,
|
||||||
"drag_drop", G_CALLBACK (image_drag_drop_cb), chooser);
|
"drag_drop", G_CALLBACK (image_drag_drop_cb), chooser);
|
||||||
g_signal_connect (priv->image,
|
g_signal_connect (priv->image,
|
||||||
"drag_data_received", G_CALLBACK (image_drag_data_received_cb), chooser);
|
"drag_data_received", G_CALLBACK (image_drag_data_received_cb), chooser);
|
||||||
|
|
||||||
gtk_widget_show_all (priv->frame);
|
gtk_widget_show_all (priv->image);
|
||||||
|
|
||||||
/* we default to being editable */
|
/* we default to being editable */
|
||||||
priv->editable = TRUE;
|
priv->editable = TRUE;
|
||||||
|
@ -209,10 +195,16 @@ set_image_from_data (EImageChooser *chooser,
|
||||||
|
|
||||||
if (pixbuf) {
|
if (pixbuf) {
|
||||||
GdkPixbuf *scaled;
|
GdkPixbuf *scaled;
|
||||||
|
GtkRequisition chooser_size;
|
||||||
|
|
||||||
float scale;
|
float scale;
|
||||||
int new_height, new_width;
|
int new_height, new_width;
|
||||||
|
|
||||||
|
gtk_widget_size_request (gtk_widget_get_parent (GTK_WIDGET (chooser)),
|
||||||
|
&chooser_size);
|
||||||
|
chooser_size.width -= 5;
|
||||||
|
chooser_size.height -= 5;
|
||||||
|
|
||||||
new_height = gdk_pixbuf_get_height (pixbuf);
|
new_height = gdk_pixbuf_get_height (pixbuf);
|
||||||
new_width = gdk_pixbuf_get_width (pixbuf);
|
new_width = gdk_pixbuf_get_width (pixbuf);
|
||||||
|
|
||||||
|
@ -224,16 +216,16 @@ set_image_from_data (EImageChooser *chooser,
|
||||||
|| chooser->priv->image_width < new_width) {
|
|| chooser->priv->image_width < new_width) {
|
||||||
/* we need to scale down */
|
/* we need to scale down */
|
||||||
if (new_height > new_width)
|
if (new_height > new_width)
|
||||||
scale = (float)chooser->priv->image_height / new_height;
|
scale = (float)chooser_size.height / new_height;
|
||||||
else
|
else
|
||||||
scale = (float)chooser->priv->image_width / new_width;
|
scale = (float)chooser_size.width / new_width;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* we need to scale up */
|
/* we need to scale up */
|
||||||
if (new_height > new_width)
|
if (new_height > new_width)
|
||||||
scale = (float)new_height / chooser->priv->image_height;
|
scale = (float)new_height / chooser_size.height;
|
||||||
else
|
else
|
||||||
scale = (float)new_width / chooser->priv->image_width;
|
scale = (float)new_width / chooser_size.width;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scale == 1.0) {
|
if (scale == 1.0) {
|
||||||
|
@ -245,8 +237,8 @@ set_image_from_data (EImageChooser *chooser,
|
||||||
else {
|
else {
|
||||||
new_width *= scale;
|
new_width *= scale;
|
||||||
new_height *= scale;
|
new_height *= scale;
|
||||||
new_width = MIN (new_width, chooser->priv->image_width);
|
new_width = MIN (new_width, chooser_size.width);
|
||||||
new_height = MIN (new_height, chooser->priv->image_height);
|
new_height = MIN (new_height, chooser_size.height);
|
||||||
|
|
||||||
scaled = gdk_pixbuf_scale_simple (pixbuf,
|
scaled = gdk_pixbuf_scale_simple (pixbuf,
|
||||||
new_width, new_height,
|
new_width, new_height,
|
||||||
|
@ -288,25 +280,15 @@ image_drag_motion_cb (GtkWidget *widget,
|
||||||
if (!strcmp (possible_type, URI_LIST_TYPE)) {
|
if (!strcmp (possible_type, URI_LIST_TYPE)) {
|
||||||
g_free (possible_type);
|
g_free (possible_type);
|
||||||
gdk_drag_status (context, GDK_ACTION_COPY, time);
|
gdk_drag_status (context, GDK_ACTION_COPY, time);
|
||||||
gtk_frame_set_shadow_type (GTK_FRAME (chooser->priv->frame), GTK_SHADOW_IN);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_free (possible_type);
|
g_free (possible_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_frame_set_shadow_type (GTK_FRAME (chooser->priv->frame), GTK_SHADOW_NONE);
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
image_drag_leave_cb (GtkWidget *widget,
|
|
||||||
GdkDragContext *context,
|
|
||||||
guint time, EImageChooser *chooser)
|
|
||||||
{
|
|
||||||
gtk_frame_set_shadow_type (GTK_FRAME (chooser->priv->frame), GTK_SHADOW_NONE);
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
image_drag_drop_cb (GtkWidget *widget,
|
image_drag_drop_cb (GtkWidget *widget,
|
||||||
GdkDragContext *context,
|
GdkDragContext *context,
|
||||||
|
@ -318,7 +300,6 @@ image_drag_drop_cb (GtkWidget *widget,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (context->targets == NULL) {
|
if (context->targets == NULL) {
|
||||||
gtk_frame_set_shadow_type (GTK_FRAME (chooser->priv->frame), GTK_SHADOW_NONE);
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -331,14 +312,12 @@ image_drag_drop_cb (GtkWidget *widget,
|
||||||
gtk_drag_get_data (widget, context,
|
gtk_drag_get_data (widget, context,
|
||||||
GDK_POINTER_TO_ATOM (p->data),
|
GDK_POINTER_TO_ATOM (p->data),
|
||||||
time);
|
time);
|
||||||
gtk_frame_set_shadow_type (GTK_FRAME (chooser->priv->frame), GTK_SHADOW_NONE);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_free (possible_type);
|
g_free (possible_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_frame_set_shadow_type (GTK_FRAME (chooser->priv->frame), GTK_SHADOW_NONE);
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue