mirror of
https://gitlab.gnome.org/GNOME/eog
synced 2024-10-19 06:24:34 +00:00
depend on Bonobo 0.32
2001-01-17 Michael Meeks <michael@helixcode.com> * configure.in (have_bonobo): depend on Bonobo 0.32 2001-01-12 Michael Meeks <michael@helixcode.com> * image-view.c (image_view_init, compute_scaled_size) upd. (paint_rectangle): add DOUBLE_COMPARE macro. (unity_zoom): impl. (compute_center_zoom_offsets): upd. (image_view_set_zoom): upd. (image_view_get_zoom): hack. old_zoom ... 2001-01-17 Michael Meeks <michael@helixcode.com> * eog-embeddable-view.c (eog_embeddable_view_construct): don't allow scroll bars ever. (configure_size): upd. * eog-image-view.c (eog_image_view_set_zoom): impl. 2001-01-16 Michael Meeks <michael@helixcode.com> * eog-embeddable-view.c (eog_embeddable_view_construct): connect to view_size_allocation. (configure_size): impl. (view_size_allocate_cb): hook up. * eog-image-view.c (eog_image_view_set_prop), (eog_image_view_get_prop): update to new property bag API.
This commit is contained in:
parent
800dd0389a
commit
be62e96c16
|
@ -33,7 +33,8 @@ png_flush_fn (png_structp png_ptr)
|
|||
}
|
||||
|
||||
void
|
||||
image_save (Bonobo_Stream stream, GdkPixbuf *pixbuf,
|
||||
image_save (Bonobo_Stream stream,
|
||||
GdkPixbuf *pixbuf,
|
||||
CORBA_Environment *ev)
|
||||
{
|
||||
png_structp png_ptr;
|
||||
|
|
|
@ -61,11 +61,13 @@ struct _ImageViewPrivate {
|
|||
/* Image being displayed */
|
||||
Image *image;
|
||||
|
||||
/* Current zoom factor */
|
||||
double zoom;
|
||||
/* Current zoom factors */
|
||||
double zoomx;
|
||||
double zoomy;
|
||||
|
||||
/* Previous zoom factor and zoom anchor point stored for size_allocate */
|
||||
double old_zoom;
|
||||
double old_zoomx;
|
||||
double old_zoomy;
|
||||
double zoom_x_anchor;
|
||||
double zoom_y_anchor;
|
||||
|
||||
|
@ -322,7 +324,7 @@ image_view_init (ImageView *view)
|
|||
GTK_WIDGET_UNSET_FLAGS (view, GTK_NO_WINDOW);
|
||||
GTK_WIDGET_SET_FLAGS (view, GTK_CAN_FOCUS);
|
||||
|
||||
priv->zoom = 1.0;
|
||||
priv->zoomx = priv->zoomy = 1.0;
|
||||
}
|
||||
|
||||
/* Frees the dirty region uta and removes the idle handler */
|
||||
|
@ -413,15 +415,15 @@ image_view_finalize (GtkObject *object)
|
|||
|
||||
/* Computes the size in pixels of the scaled image */
|
||||
static void
|
||||
compute_scaled_size (ImageView *view, double zoom, int *width, int *height)
|
||||
compute_scaled_size (ImageView *view, double zoomx, double zoomy, int *width, int *height)
|
||||
{
|
||||
ImageViewPrivate *priv;
|
||||
|
||||
priv = view->priv;
|
||||
|
||||
if (priv->image && priv->image->pixbuf) {
|
||||
*width = floor (gdk_pixbuf_get_width (priv->image->pixbuf) * zoom + 0.5);
|
||||
*height = floor (gdk_pixbuf_get_height (priv->image->pixbuf) * zoom + 0.5);
|
||||
*width = floor (gdk_pixbuf_get_width (priv->image->pixbuf) * zoomx + 0.5);
|
||||
*height = floor (gdk_pixbuf_get_height (priv->image->pixbuf) * zoomy + 0.5);
|
||||
} else
|
||||
*width = *height = 0;
|
||||
}
|
||||
|
@ -498,6 +500,14 @@ pack_pixbuf (GdkPixbuf *pixbuf)
|
|||
|
||||
#endif
|
||||
|
||||
#define DOUBLE_EQUAL(a,b) (fabs (a - b) < 1e-6)
|
||||
static gboolean
|
||||
unity_zoom (ImageViewPrivate *priv)
|
||||
{
|
||||
return (DOUBLE_EQUAL (priv->zoomx, 1.0) &&
|
||||
DOUBLE_EQUAL (priv->zoomx, 1.0));
|
||||
}
|
||||
|
||||
/* Paints a rectangle of the dirty region */
|
||||
static void
|
||||
paint_rectangle (ImageView *view, ArtIRect *rect, GdkInterpType interp_type)
|
||||
|
@ -513,7 +523,7 @@ paint_rectangle (ImageView *view, ArtIRect *rect, GdkInterpType interp_type)
|
|||
|
||||
priv = view->priv;
|
||||
|
||||
compute_scaled_size (view, priv->zoom, &scaled_width, &scaled_height);
|
||||
compute_scaled_size (view, priv->zoomx, priv->zoomy, &scaled_width, &scaled_height);
|
||||
|
||||
width = GTK_WIDGET (view)->allocation.width;
|
||||
height = GTK_WIDGET (view)->allocation.height;
|
||||
|
@ -589,7 +599,8 @@ paint_rectangle (ImageView *view, ArtIRect *rect, GdkInterpType interp_type)
|
|||
|
||||
/* Short-circuit the fast case to avoid a memcpy() */
|
||||
|
||||
if (priv->zoom == 1.0
|
||||
|
||||
if (unity_zoom (priv)
|
||||
&& gdk_pixbuf_get_colorspace (priv->image->pixbuf) == GDK_COLORSPACE_RGB
|
||||
&& !gdk_pixbuf_get_has_alpha (priv->image->pixbuf)
|
||||
&& gdk_pixbuf_get_bits_per_sample (priv->image->pixbuf) == 8) {
|
||||
|
@ -687,8 +698,8 @@ paint_rectangle (ImageView *view, ArtIRect *rect, GdkInterpType interp_type)
|
|||
0, 0,
|
||||
d.x1 - d.x0, d.y1 - d.y0,
|
||||
-(d.x0 - xofs), -(d.y0 - yofs),
|
||||
priv->zoom, priv->zoom,
|
||||
(priv->zoom == 1.0) ? GDK_INTERP_NEAREST : interp_type,
|
||||
priv->zoomx, priv->zoomy,
|
||||
unity_zoom (priv) ? GDK_INTERP_NEAREST : interp_type,
|
||||
255,
|
||||
d.x0 - xofs, d.y0 - yofs,
|
||||
check_size,
|
||||
|
@ -813,7 +824,7 @@ request_paint_area (ImageView *view, GdkRectangle *area, gboolean asynch)
|
|||
* speed.
|
||||
*/
|
||||
|
||||
if (!asynch && (priv->interp_type == GDK_INTERP_NEAREST || priv->zoom == 1.0)) {
|
||||
if (!asynch && (priv->interp_type == GDK_INTERP_NEAREST || unity_zoom (priv))) {
|
||||
paint_rectangle (view, &r, priv->interp_type);
|
||||
return;
|
||||
}
|
||||
|
@ -1091,29 +1102,29 @@ compute_center_zoom_offsets (ImageView *view,
|
|||
priv = view->priv;
|
||||
g_assert (priv->need_zoom_change);
|
||||
|
||||
compute_scaled_size (view, priv->old_zoom, &old_scaled_width, &old_scaled_height);
|
||||
compute_scaled_size (view, priv->old_zoomx, priv->old_zoomy, &old_scaled_width, &old_scaled_height);
|
||||
|
||||
if (old_scaled_width < old_width)
|
||||
view_cx = (priv->zoom_x_anchor * old_scaled_width) / priv->old_zoom;
|
||||
view_cx = (priv->zoom_x_anchor * old_scaled_width) / priv->old_zoomx;
|
||||
else
|
||||
view_cx = (priv->xofs + priv->zoom_x_anchor * old_width) / priv->old_zoom;
|
||||
view_cx = (priv->xofs + priv->zoom_x_anchor * old_width) / priv->old_zoomx;
|
||||
|
||||
if (old_scaled_height < old_height)
|
||||
view_cy = (priv->zoom_y_anchor * old_scaled_height) / priv->old_zoom;
|
||||
view_cy = (priv->zoom_y_anchor * old_scaled_height) / priv->old_zoomy;
|
||||
else
|
||||
view_cy = (priv->yofs + priv->zoom_y_anchor * old_height) / priv->old_zoom;
|
||||
view_cy = (priv->yofs + priv->zoom_y_anchor * old_height) / priv->old_zoomy;
|
||||
|
||||
compute_scaled_size (view, priv->zoom, &new_scaled_width, &new_scaled_height);
|
||||
compute_scaled_size (view, priv->zoomx, priv->zoomy, &new_scaled_width, &new_scaled_height);
|
||||
|
||||
if (new_scaled_width < new_width)
|
||||
*xofs = 0;
|
||||
else
|
||||
*xofs = floor (view_cx * priv->zoom - priv->zoom_x_anchor * new_width + 0.5);
|
||||
*xofs = floor (view_cx * priv->zoomx - priv->zoom_x_anchor * new_width + 0.5);
|
||||
|
||||
if (new_scaled_height < new_height)
|
||||
*yofs = 0;
|
||||
else
|
||||
*yofs = floor (view_cy * priv->zoom - priv->zoom_y_anchor * new_height + 0.5);
|
||||
*yofs = floor (view_cy * priv->zoomy - priv->zoom_y_anchor * new_height + 0.5);
|
||||
}
|
||||
|
||||
/* Size_allocate handler for the image view */
|
||||
|
@ -1160,7 +1171,7 @@ image_view_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
|
|||
|
||||
/* Set scroll increments */
|
||||
|
||||
compute_scaled_size (view, priv->zoom, &scaled_width, &scaled_height);
|
||||
compute_scaled_size (view, priv->zoomx, priv->zoomy, &scaled_width, &scaled_height);
|
||||
|
||||
priv->hadj->page_size = MIN (scaled_width, allocation->width);
|
||||
priv->hadj->page_increment = allocation->width / 2;
|
||||
|
@ -1262,12 +1273,12 @@ image_view_button_press (GtkWidget *widget, GdkEventButton *event)
|
|||
|
||||
case 4:
|
||||
set_zoom_anchor (view, event->x, event->y);
|
||||
image_view_set_zoom (view, priv->zoom * 1.05);
|
||||
image_view_set_zoom (view, priv->zoomx * 1.05, priv->zoomy * 1.05);
|
||||
return TRUE;
|
||||
|
||||
case 5:
|
||||
set_zoom_anchor (view, event->x, event->y);
|
||||
image_view_set_zoom (view, priv->zoom / 1.05);
|
||||
image_view_set_zoom (view, priv->zoomx / 1.05, priv->zoomy / 1.05);
|
||||
return TRUE;
|
||||
|
||||
default:
|
||||
|
@ -1376,7 +1387,7 @@ image_view_key_press (GtkWidget *widget, GdkEventKey *event)
|
|||
ImageView *view;
|
||||
ImageViewPrivate *priv;
|
||||
gboolean do_zoom;
|
||||
double zoom;
|
||||
double zoomx, zoomy;
|
||||
gboolean do_scroll;
|
||||
int xofs, yofs;
|
||||
|
||||
|
@ -1386,7 +1397,7 @@ image_view_key_press (GtkWidget *widget, GdkEventKey *event)
|
|||
do_zoom = FALSE;
|
||||
do_scroll = FALSE;
|
||||
xofs = yofs = 0;
|
||||
zoom = 1.0;
|
||||
zoomx = zoomy = 1.0;
|
||||
|
||||
if ((event->state & (GDK_MODIFIER_MASK & ~GDK_LOCK_MASK)) != 0)
|
||||
return FALSE;
|
||||
|
@ -1419,18 +1430,20 @@ image_view_key_press (GtkWidget *widget, GdkEventKey *event)
|
|||
case GDK_equal:
|
||||
case GDK_KP_Add:
|
||||
do_zoom = TRUE;
|
||||
zoom = priv->zoom * 1.05;
|
||||
zoomx = priv->zoomx * 1.05;
|
||||
zoomy = priv->zoomy * 1.05;
|
||||
break;
|
||||
|
||||
case GDK_minus:
|
||||
case GDK_KP_Subtract:
|
||||
do_zoom = TRUE;
|
||||
zoom = priv->zoom / 1.05;
|
||||
zoomx = priv->zoomx / 1.05;
|
||||
zoomy = priv->zoomy / 1.05;
|
||||
break;
|
||||
|
||||
case GDK_1:
|
||||
do_zoom = TRUE;
|
||||
zoom = 1.0;
|
||||
zoomx = zoomy = 1.0;
|
||||
break;
|
||||
|
||||
case GDK_F:
|
||||
|
@ -1453,7 +1466,7 @@ image_view_key_press (GtkWidget *widget, GdkEventKey *event)
|
|||
else
|
||||
set_default_zoom_anchor (view);
|
||||
|
||||
image_view_set_zoom (view, zoom);
|
||||
image_view_set_zoom (view, zoomx, zoomy);
|
||||
}
|
||||
|
||||
if (do_scroll) {
|
||||
|
@ -1650,28 +1663,34 @@ image_view_get_image (ImageView *view)
|
|||
* Sets the zoom factor for an image view.
|
||||
**/
|
||||
void
|
||||
image_view_set_zoom (ImageView *view, double zoom)
|
||||
image_view_set_zoom (ImageView *view, double zoomx, double zoomy)
|
||||
{
|
||||
ImageViewPrivate *priv;
|
||||
|
||||
g_return_if_fail (view != NULL);
|
||||
g_return_if_fail (IS_IMAGE_VIEW (view));
|
||||
g_return_if_fail (zoom > 0.0);
|
||||
g_return_if_fail (zoomx > 0.0);
|
||||
g_return_if_fail (zoomy > 0.0);
|
||||
|
||||
priv = view->priv;
|
||||
|
||||
if (zoom > MAX_ZOOM_FACTOR)
|
||||
zoom = MAX_ZOOM_FACTOR;
|
||||
if (zoomx > MAX_ZOOM_FACTOR)
|
||||
zoomx = MAX_ZOOM_FACTOR;
|
||||
if (zoomy > MAX_ZOOM_FACTOR)
|
||||
zoomy = MAX_ZOOM_FACTOR;
|
||||
|
||||
if (priv->zoom == zoom)
|
||||
if (DOUBLE_EQUAL (priv->zoomx, zoomx) &&
|
||||
DOUBLE_EQUAL (priv->zoomy, zoomy))
|
||||
return;
|
||||
|
||||
if (!priv->need_zoom_change) {
|
||||
priv->old_zoom = priv->zoom;
|
||||
priv->old_zoomx = priv->zoomx;
|
||||
priv->old_zoomy = priv->zoomy;
|
||||
priv->need_zoom_change = TRUE;
|
||||
}
|
||||
|
||||
priv->zoom = zoom;
|
||||
priv->zoomx = zoomx;
|
||||
priv->zoomy = zoomy;
|
||||
|
||||
gtk_widget_queue_resize (GTK_WIDGET (view));
|
||||
}
|
||||
|
@ -1693,7 +1712,7 @@ image_view_get_zoom (ImageView *view)
|
|||
g_return_val_if_fail (IS_IMAGE_VIEW (view), -1.0);
|
||||
|
||||
priv = view->priv;
|
||||
return priv->zoom;
|
||||
return (priv->zoomx + priv->zoomy) / 2;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -69,7 +69,7 @@ GtkWidget *image_view_new (void);
|
|||
void image_view_set_image (ImageView *view, Image *image);
|
||||
Image *image_view_get_image (ImageView *view);
|
||||
|
||||
void image_view_set_zoom (ImageView *view, double zoom);
|
||||
void image_view_set_zoom (ImageView *view, double zoomx, double zoomy);
|
||||
double image_view_get_zoom (ImageView *view);
|
||||
|
||||
void image_view_set_interp_type (ImageView *view, GdkInterpType interp_type);
|
||||
|
|
|
@ -227,7 +227,7 @@ ui_image_zoom_fit (UIImage *ui)
|
|||
|
||||
image = image_view_get_image (IMAGE_VIEW (priv->view));
|
||||
if (!image) {
|
||||
image_view_set_zoom (IMAGE_VIEW (priv->view), 1.0);
|
||||
image_view_set_zoom (IMAGE_VIEW (priv->view), 1.0, 1.0);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -248,5 +248,5 @@ ui_image_zoom_fit (UIImage *ui)
|
|||
iw = ih = 0;
|
||||
|
||||
zoom = zoom_fit_scale (w - 2 * xthick, h - 2 * ythick, iw, ih, TRUE);
|
||||
image_view_set_zoom (IMAGE_VIEW (priv->view), zoom);
|
||||
image_view_set_zoom (IMAGE_VIEW (priv->view), zoom, zoom);
|
||||
}
|
||||
|
|
|
@ -1,3 +1,14 @@
|
|||
2001-01-12 Michael Meeks <michael@helixcode.com>
|
||||
|
||||
* image-view.c (image_view_init, compute_scaled_size) upd.
|
||||
(paint_rectangle): add DOUBLE_COMPARE macro.
|
||||
(unity_zoom): impl.
|
||||
(compute_center_zoom_offsets): upd.
|
||||
(image_view_set_zoom): upd.
|
||||
(image_view_get_zoom): hack.
|
||||
|
||||
old_zoom ...
|
||||
|
||||
2001-01-03 Jason Leach <jasonleach@usa.net>
|
||||
|
||||
* preferences-dialog.glade: Added brief descriptions to the
|
||||
|
|
|
@ -42,7 +42,7 @@ set_window_zoom (Window *window, double zoom, gboolean mult)
|
|||
if (mult)
|
||||
zoom *= image_view_get_zoom (view);
|
||||
|
||||
image_view_set_zoom (view, zoom);
|
||||
image_view_set_zoom (view, zoom, zoom);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -132,11 +132,11 @@ cmd_cb_full_screen (GtkWidget *widget, gpointer data)
|
|||
|
||||
switch (zoom_type) {
|
||||
case FULL_SCREEN_ZOOM_1:
|
||||
image_view_set_zoom (view, 1.0);
|
||||
image_view_set_zoom (view, 1.0, 1.0);
|
||||
break;
|
||||
|
||||
case FULL_SCREEN_ZOOM_SAME_AS_WINDOW:
|
||||
image_view_set_zoom (view, zoom);
|
||||
image_view_set_zoom (view, zoom, zoom);
|
||||
break;
|
||||
|
||||
case FULL_SCREEN_ZOOM_FIT:
|
||||
|
|
|
@ -61,11 +61,13 @@ struct _ImageViewPrivate {
|
|||
/* Image being displayed */
|
||||
Image *image;
|
||||
|
||||
/* Current zoom factor */
|
||||
double zoom;
|
||||
/* Current zoom factors */
|
||||
double zoomx;
|
||||
double zoomy;
|
||||
|
||||
/* Previous zoom factor and zoom anchor point stored for size_allocate */
|
||||
double old_zoom;
|
||||
double old_zoomx;
|
||||
double old_zoomy;
|
||||
double zoom_x_anchor;
|
||||
double zoom_y_anchor;
|
||||
|
||||
|
@ -322,7 +324,7 @@ image_view_init (ImageView *view)
|
|||
GTK_WIDGET_UNSET_FLAGS (view, GTK_NO_WINDOW);
|
||||
GTK_WIDGET_SET_FLAGS (view, GTK_CAN_FOCUS);
|
||||
|
||||
priv->zoom = 1.0;
|
||||
priv->zoomx = priv->zoomy = 1.0;
|
||||
}
|
||||
|
||||
/* Frees the dirty region uta and removes the idle handler */
|
||||
|
@ -413,15 +415,15 @@ image_view_finalize (GtkObject *object)
|
|||
|
||||
/* Computes the size in pixels of the scaled image */
|
||||
static void
|
||||
compute_scaled_size (ImageView *view, double zoom, int *width, int *height)
|
||||
compute_scaled_size (ImageView *view, double zoomx, double zoomy, int *width, int *height)
|
||||
{
|
||||
ImageViewPrivate *priv;
|
||||
|
||||
priv = view->priv;
|
||||
|
||||
if (priv->image && priv->image->pixbuf) {
|
||||
*width = floor (gdk_pixbuf_get_width (priv->image->pixbuf) * zoom + 0.5);
|
||||
*height = floor (gdk_pixbuf_get_height (priv->image->pixbuf) * zoom + 0.5);
|
||||
*width = floor (gdk_pixbuf_get_width (priv->image->pixbuf) * zoomx + 0.5);
|
||||
*height = floor (gdk_pixbuf_get_height (priv->image->pixbuf) * zoomy + 0.5);
|
||||
} else
|
||||
*width = *height = 0;
|
||||
}
|
||||
|
@ -498,6 +500,14 @@ pack_pixbuf (GdkPixbuf *pixbuf)
|
|||
|
||||
#endif
|
||||
|
||||
#define DOUBLE_EQUAL(a,b) (fabs (a - b) < 1e-6)
|
||||
static gboolean
|
||||
unity_zoom (ImageViewPrivate *priv)
|
||||
{
|
||||
return (DOUBLE_EQUAL (priv->zoomx, 1.0) &&
|
||||
DOUBLE_EQUAL (priv->zoomx, 1.0));
|
||||
}
|
||||
|
||||
/* Paints a rectangle of the dirty region */
|
||||
static void
|
||||
paint_rectangle (ImageView *view, ArtIRect *rect, GdkInterpType interp_type)
|
||||
|
@ -513,7 +523,7 @@ paint_rectangle (ImageView *view, ArtIRect *rect, GdkInterpType interp_type)
|
|||
|
||||
priv = view->priv;
|
||||
|
||||
compute_scaled_size (view, priv->zoom, &scaled_width, &scaled_height);
|
||||
compute_scaled_size (view, priv->zoomx, priv->zoomy, &scaled_width, &scaled_height);
|
||||
|
||||
width = GTK_WIDGET (view)->allocation.width;
|
||||
height = GTK_WIDGET (view)->allocation.height;
|
||||
|
@ -589,7 +599,8 @@ paint_rectangle (ImageView *view, ArtIRect *rect, GdkInterpType interp_type)
|
|||
|
||||
/* Short-circuit the fast case to avoid a memcpy() */
|
||||
|
||||
if (priv->zoom == 1.0
|
||||
|
||||
if (unity_zoom (priv)
|
||||
&& gdk_pixbuf_get_colorspace (priv->image->pixbuf) == GDK_COLORSPACE_RGB
|
||||
&& !gdk_pixbuf_get_has_alpha (priv->image->pixbuf)
|
||||
&& gdk_pixbuf_get_bits_per_sample (priv->image->pixbuf) == 8) {
|
||||
|
@ -687,8 +698,8 @@ paint_rectangle (ImageView *view, ArtIRect *rect, GdkInterpType interp_type)
|
|||
0, 0,
|
||||
d.x1 - d.x0, d.y1 - d.y0,
|
||||
-(d.x0 - xofs), -(d.y0 - yofs),
|
||||
priv->zoom, priv->zoom,
|
||||
(priv->zoom == 1.0) ? GDK_INTERP_NEAREST : interp_type,
|
||||
priv->zoomx, priv->zoomy,
|
||||
unity_zoom (priv) ? GDK_INTERP_NEAREST : interp_type,
|
||||
255,
|
||||
d.x0 - xofs, d.y0 - yofs,
|
||||
check_size,
|
||||
|
@ -813,7 +824,7 @@ request_paint_area (ImageView *view, GdkRectangle *area, gboolean asynch)
|
|||
* speed.
|
||||
*/
|
||||
|
||||
if (!asynch && (priv->interp_type == GDK_INTERP_NEAREST || priv->zoom == 1.0)) {
|
||||
if (!asynch && (priv->interp_type == GDK_INTERP_NEAREST || unity_zoom (priv))) {
|
||||
paint_rectangle (view, &r, priv->interp_type);
|
||||
return;
|
||||
}
|
||||
|
@ -1091,29 +1102,29 @@ compute_center_zoom_offsets (ImageView *view,
|
|||
priv = view->priv;
|
||||
g_assert (priv->need_zoom_change);
|
||||
|
||||
compute_scaled_size (view, priv->old_zoom, &old_scaled_width, &old_scaled_height);
|
||||
compute_scaled_size (view, priv->old_zoomx, priv->old_zoomy, &old_scaled_width, &old_scaled_height);
|
||||
|
||||
if (old_scaled_width < old_width)
|
||||
view_cx = (priv->zoom_x_anchor * old_scaled_width) / priv->old_zoom;
|
||||
view_cx = (priv->zoom_x_anchor * old_scaled_width) / priv->old_zoomx;
|
||||
else
|
||||
view_cx = (priv->xofs + priv->zoom_x_anchor * old_width) / priv->old_zoom;
|
||||
view_cx = (priv->xofs + priv->zoom_x_anchor * old_width) / priv->old_zoomx;
|
||||
|
||||
if (old_scaled_height < old_height)
|
||||
view_cy = (priv->zoom_y_anchor * old_scaled_height) / priv->old_zoom;
|
||||
view_cy = (priv->zoom_y_anchor * old_scaled_height) / priv->old_zoomy;
|
||||
else
|
||||
view_cy = (priv->yofs + priv->zoom_y_anchor * old_height) / priv->old_zoom;
|
||||
view_cy = (priv->yofs + priv->zoom_y_anchor * old_height) / priv->old_zoomy;
|
||||
|
||||
compute_scaled_size (view, priv->zoom, &new_scaled_width, &new_scaled_height);
|
||||
compute_scaled_size (view, priv->zoomx, priv->zoomy, &new_scaled_width, &new_scaled_height);
|
||||
|
||||
if (new_scaled_width < new_width)
|
||||
*xofs = 0;
|
||||
else
|
||||
*xofs = floor (view_cx * priv->zoom - priv->zoom_x_anchor * new_width + 0.5);
|
||||
*xofs = floor (view_cx * priv->zoomx - priv->zoom_x_anchor * new_width + 0.5);
|
||||
|
||||
if (new_scaled_height < new_height)
|
||||
*yofs = 0;
|
||||
else
|
||||
*yofs = floor (view_cy * priv->zoom - priv->zoom_y_anchor * new_height + 0.5);
|
||||
*yofs = floor (view_cy * priv->zoomy - priv->zoom_y_anchor * new_height + 0.5);
|
||||
}
|
||||
|
||||
/* Size_allocate handler for the image view */
|
||||
|
@ -1160,7 +1171,7 @@ image_view_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
|
|||
|
||||
/* Set scroll increments */
|
||||
|
||||
compute_scaled_size (view, priv->zoom, &scaled_width, &scaled_height);
|
||||
compute_scaled_size (view, priv->zoomx, priv->zoomy, &scaled_width, &scaled_height);
|
||||
|
||||
priv->hadj->page_size = MIN (scaled_width, allocation->width);
|
||||
priv->hadj->page_increment = allocation->width / 2;
|
||||
|
@ -1262,12 +1273,12 @@ image_view_button_press (GtkWidget *widget, GdkEventButton *event)
|
|||
|
||||
case 4:
|
||||
set_zoom_anchor (view, event->x, event->y);
|
||||
image_view_set_zoom (view, priv->zoom * 1.05);
|
||||
image_view_set_zoom (view, priv->zoomx * 1.05, priv->zoomy * 1.05);
|
||||
return TRUE;
|
||||
|
||||
case 5:
|
||||
set_zoom_anchor (view, event->x, event->y);
|
||||
image_view_set_zoom (view, priv->zoom / 1.05);
|
||||
image_view_set_zoom (view, priv->zoomx / 1.05, priv->zoomy / 1.05);
|
||||
return TRUE;
|
||||
|
||||
default:
|
||||
|
@ -1376,7 +1387,7 @@ image_view_key_press (GtkWidget *widget, GdkEventKey *event)
|
|||
ImageView *view;
|
||||
ImageViewPrivate *priv;
|
||||
gboolean do_zoom;
|
||||
double zoom;
|
||||
double zoomx, zoomy;
|
||||
gboolean do_scroll;
|
||||
int xofs, yofs;
|
||||
|
||||
|
@ -1386,7 +1397,7 @@ image_view_key_press (GtkWidget *widget, GdkEventKey *event)
|
|||
do_zoom = FALSE;
|
||||
do_scroll = FALSE;
|
||||
xofs = yofs = 0;
|
||||
zoom = 1.0;
|
||||
zoomx = zoomy = 1.0;
|
||||
|
||||
if ((event->state & (GDK_MODIFIER_MASK & ~GDK_LOCK_MASK)) != 0)
|
||||
return FALSE;
|
||||
|
@ -1419,18 +1430,20 @@ image_view_key_press (GtkWidget *widget, GdkEventKey *event)
|
|||
case GDK_equal:
|
||||
case GDK_KP_Add:
|
||||
do_zoom = TRUE;
|
||||
zoom = priv->zoom * 1.05;
|
||||
zoomx = priv->zoomx * 1.05;
|
||||
zoomy = priv->zoomy * 1.05;
|
||||
break;
|
||||
|
||||
case GDK_minus:
|
||||
case GDK_KP_Subtract:
|
||||
do_zoom = TRUE;
|
||||
zoom = priv->zoom / 1.05;
|
||||
zoomx = priv->zoomx / 1.05;
|
||||
zoomy = priv->zoomy / 1.05;
|
||||
break;
|
||||
|
||||
case GDK_1:
|
||||
do_zoom = TRUE;
|
||||
zoom = 1.0;
|
||||
zoomx = zoomy = 1.0;
|
||||
break;
|
||||
|
||||
case GDK_F:
|
||||
|
@ -1453,7 +1466,7 @@ image_view_key_press (GtkWidget *widget, GdkEventKey *event)
|
|||
else
|
||||
set_default_zoom_anchor (view);
|
||||
|
||||
image_view_set_zoom (view, zoom);
|
||||
image_view_set_zoom (view, zoomx, zoomy);
|
||||
}
|
||||
|
||||
if (do_scroll) {
|
||||
|
@ -1650,28 +1663,34 @@ image_view_get_image (ImageView *view)
|
|||
* Sets the zoom factor for an image view.
|
||||
**/
|
||||
void
|
||||
image_view_set_zoom (ImageView *view, double zoom)
|
||||
image_view_set_zoom (ImageView *view, double zoomx, double zoomy)
|
||||
{
|
||||
ImageViewPrivate *priv;
|
||||
|
||||
g_return_if_fail (view != NULL);
|
||||
g_return_if_fail (IS_IMAGE_VIEW (view));
|
||||
g_return_if_fail (zoom > 0.0);
|
||||
g_return_if_fail (zoomx > 0.0);
|
||||
g_return_if_fail (zoomy > 0.0);
|
||||
|
||||
priv = view->priv;
|
||||
|
||||
if (zoom > MAX_ZOOM_FACTOR)
|
||||
zoom = MAX_ZOOM_FACTOR;
|
||||
if (zoomx > MAX_ZOOM_FACTOR)
|
||||
zoomx = MAX_ZOOM_FACTOR;
|
||||
if (zoomy > MAX_ZOOM_FACTOR)
|
||||
zoomy = MAX_ZOOM_FACTOR;
|
||||
|
||||
if (priv->zoom == zoom)
|
||||
if (DOUBLE_EQUAL (priv->zoomx, zoomx) &&
|
||||
DOUBLE_EQUAL (priv->zoomy, zoomy))
|
||||
return;
|
||||
|
||||
if (!priv->need_zoom_change) {
|
||||
priv->old_zoom = priv->zoom;
|
||||
priv->old_zoomx = priv->zoomx;
|
||||
priv->old_zoomy = priv->zoomy;
|
||||
priv->need_zoom_change = TRUE;
|
||||
}
|
||||
|
||||
priv->zoom = zoom;
|
||||
priv->zoomx = zoomx;
|
||||
priv->zoomy = zoomy;
|
||||
|
||||
gtk_widget_queue_resize (GTK_WIDGET (view));
|
||||
}
|
||||
|
@ -1693,7 +1712,7 @@ image_view_get_zoom (ImageView *view)
|
|||
g_return_val_if_fail (IS_IMAGE_VIEW (view), -1.0);
|
||||
|
||||
priv = view->priv;
|
||||
return priv->zoom;
|
||||
return (priv->zoomx + priv->zoomy) / 2;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -69,7 +69,7 @@ GtkWidget *image_view_new (void);
|
|||
void image_view_set_image (ImageView *view, Image *image);
|
||||
Image *image_view_get_image (ImageView *view);
|
||||
|
||||
void image_view_set_zoom (ImageView *view, double zoom);
|
||||
void image_view_set_zoom (ImageView *view, double zoomx, double zoomy);
|
||||
double image_view_get_zoom (ImageView *view);
|
||||
|
||||
void image_view_set_interp_type (ImageView *view, GdkInterpType interp_type);
|
||||
|
|
|
@ -227,7 +227,7 @@ ui_image_zoom_fit (UIImage *ui)
|
|||
|
||||
image = image_view_get_image (IMAGE_VIEW (priv->view));
|
||||
if (!image) {
|
||||
image_view_set_zoom (IMAGE_VIEW (priv->view), 1.0);
|
||||
image_view_set_zoom (IMAGE_VIEW (priv->view), 1.0, 1.0);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -248,5 +248,5 @@ ui_image_zoom_fit (UIImage *ui)
|
|||
iw = ih = 0;
|
||||
|
||||
zoom = zoom_fit_scale (w - 2 * xthick, h - 2 * ythick, iw, ih, TRUE);
|
||||
image_view_set_zoom (IMAGE_VIEW (priv->view), zoom);
|
||||
image_view_set_zoom (IMAGE_VIEW (priv->view), zoom, zoom);
|
||||
}
|
||||
|
|
|
@ -1,3 +1,20 @@
|
|||
2001-01-17 Michael Meeks <michael@helixcode.com>
|
||||
|
||||
* eog-embeddable-view.c (eog_embeddable_view_construct):
|
||||
don't allow scroll bars ever.
|
||||
(configure_size): upd.
|
||||
|
||||
* eog-image-view.c (eog_image_view_set_zoom): impl.
|
||||
|
||||
2001-01-16 Michael Meeks <michael@helixcode.com>
|
||||
|
||||
* eog-embeddable-view.c (eog_embeddable_view_construct):
|
||||
connect to view_size_allocation. (configure_size): impl.
|
||||
(view_size_allocate_cb): hook up.
|
||||
|
||||
* eog-image-view.c (eog_image_view_set_prop),
|
||||
(eog_image_view_get_prop): update to new property bag API.
|
||||
|
||||
2001-01-17 Michael Meeks <michael@helixcode.com>
|
||||
|
||||
* eog-image-view.c (eog_image_view_set_prop),
|
||||
|
|
|
@ -15,7 +15,9 @@
|
|||
|
||||
#include <gnome.h>
|
||||
|
||||
#include <eog-embeddable-view.h>
|
||||
#include "gtkscrollframe.h"
|
||||
#include "image-view.h"
|
||||
#include "eog-embeddable-view.h"
|
||||
|
||||
struct _EogEmbeddableViewPrivate {
|
||||
EogImage *image;
|
||||
|
@ -168,6 +170,60 @@ eog_embeddable_view_corba_object_create (BonoboObject *object)
|
|||
return (Bonobo_View) bonobo_object_activate_servant (object, servant);
|
||||
}
|
||||
|
||||
#define EOG_DEBUG
|
||||
|
||||
static void
|
||||
configure_size (EogEmbeddableView *view,
|
||||
GtkAllocation *allocation)
|
||||
{
|
||||
GdkPixbuf *pixbuf;
|
||||
double zoomx, zoomy;
|
||||
|
||||
if (!view->priv->image)
|
||||
return;
|
||||
|
||||
if (!allocation)
|
||||
allocation = &view->priv->root->allocation;
|
||||
|
||||
/* g_warning ("Configure size allocation '%d' '%d'",
|
||||
allocation->width, allocation->height);*/
|
||||
|
||||
pixbuf = eog_image_get_pixbuf (
|
||||
view->priv->image);
|
||||
|
||||
if (!pixbuf)
|
||||
return;
|
||||
|
||||
zoomx = (1.0 * allocation->width) /
|
||||
gdk_pixbuf_get_width (pixbuf);
|
||||
zoomy = (1.0 * allocation->height) /
|
||||
gdk_pixbuf_get_height (pixbuf);
|
||||
|
||||
/* g_warning ("Set to zoom %f %f, pixbuf %d %d",
|
||||
zoomx, zoomy,
|
||||
gdk_pixbuf_get_width (pixbuf),
|
||||
gdk_pixbuf_get_height (pixbuf));*/
|
||||
|
||||
eog_image_view_set_zoom (view->priv->image_view,
|
||||
zoomx, zoomy);
|
||||
}
|
||||
|
||||
static void
|
||||
view_size_allocate_cb (GtkWidget *drawing_area,
|
||||
GtkAllocation *allocation,
|
||||
EogEmbeddableView *view)
|
||||
{
|
||||
configure_size (view, allocation);
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
set_image_cb (EogImage *image,
|
||||
EogEmbeddableView *view)
|
||||
{
|
||||
configure_size (view, NULL);
|
||||
}
|
||||
|
||||
EogEmbeddableView *
|
||||
eog_embeddable_view_construct (EogEmbeddableView *embeddable_view,
|
||||
Bonobo_View corba_object,
|
||||
|
@ -187,6 +243,15 @@ eog_embeddable_view_construct (EogEmbeddableView *embeddable_view,
|
|||
|
||||
embeddable_view->priv->image_view = eog_image_view_new (image, TRUE);
|
||||
embeddable_view->priv->root = eog_image_view_get_widget (embeddable_view->priv->image_view);
|
||||
gtk_scroll_frame_set_policy (GTK_SCROLL_FRAME (embeddable_view->priv->root),
|
||||
GTK_POLICY_NEVER,
|
||||
GTK_POLICY_NEVER);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (image), "set_image",
|
||||
GTK_SIGNAL_FUNC (set_image_cb), embeddable_view);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (embeddable_view->priv->root), "size_allocate",
|
||||
GTK_SIGNAL_FUNC (view_size_allocate_cb), embeddable_view);
|
||||
|
||||
bonobo_object_add_interface (BONOBO_OBJECT (embeddable_view),
|
||||
BONOBO_OBJECT (embeddable_view->priv->image_view));
|
||||
|
|
|
@ -25,25 +25,23 @@
|
|||
|
||||
BEGIN_GNOME_DECLS
|
||||
|
||||
/* You may call all these functions with or without the image library
|
||||
/*
|
||||
* You may call all these functions with or without the image library
|
||||
* being installed; if the image library is not installed, this'll
|
||||
* set the Persist::WrongDataType exception and return FALSE.
|
||||
*/
|
||||
|
||||
gboolean
|
||||
eog_image_save_xpm (EogImage *image,
|
||||
Bonobo_Stream stream,
|
||||
CORBA_Environment *ev);
|
||||
gboolean eog_image_save_xpm (EogImage *image,
|
||||
Bonobo_Stream stream,
|
||||
CORBA_Environment *ev);
|
||||
|
||||
gboolean
|
||||
eog_image_save_png (EogImage *image,
|
||||
Bonobo_Stream stream,
|
||||
CORBA_Environment *ev);
|
||||
gboolean eog_image_save_png (EogImage *image,
|
||||
Bonobo_Stream stream,
|
||||
CORBA_Environment *ev);
|
||||
|
||||
gboolean
|
||||
eog_image_save_jpeg (EogImage *image,
|
||||
Bonobo_Stream stream,
|
||||
CORBA_Environment *ev);
|
||||
gboolean eog_image_save_jpeg (EogImage *image,
|
||||
Bonobo_Stream stream,
|
||||
CORBA_Environment *ev);
|
||||
|
||||
END_GNOME_DECLS
|
||||
|
||||
|
|
|
@ -476,7 +476,25 @@ eog_image_view_set_zoom_factor (EogImageView *image_view,
|
|||
|
||||
view = IMAGE_VIEW (image_view->priv->image_view);
|
||||
|
||||
image_view_set_zoom (view, zoom_factor);
|
||||
image_view_set_zoom (view, zoom_factor, zoom_factor);
|
||||
}
|
||||
|
||||
void
|
||||
eog_image_view_set_zoom (EogImageView *image_view,
|
||||
double zoomx,
|
||||
double zoomy)
|
||||
|
||||
{
|
||||
ImageView *view;
|
||||
|
||||
g_return_if_fail (zoomx > 0.0);
|
||||
g_return_if_fail (zoomy > 0.0);
|
||||
g_return_if_fail (image_view != NULL);
|
||||
g_return_if_fail (EOG_IS_IMAGE_VIEW (image_view));
|
||||
|
||||
view = IMAGE_VIEW (image_view->priv->image_view);
|
||||
|
||||
image_view_set_zoom (view, zoomx, zoomy);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -60,6 +60,10 @@ void eog_image_view_set_zoom_factor (EogImageView *image_view,
|
|||
float zoom_factor);
|
||||
void eog_image_view_zoom_to_fit (EogImageView *image_view,
|
||||
gboolean keep_aspect_ratio);
|
||||
void eog_image_view_set_zoom (EogImageView *image_view,
|
||||
double zoomx,
|
||||
double zoomy);
|
||||
|
||||
|
||||
|
||||
/* Properties */
|
||||
|
|
Loading…
Reference in a new issue