Skip to content

Commit

Permalink
Store adjustment values and restore them when switching file
Browse files Browse the repository at this point in the history
A small improvement: in addition to restoring zoom and orientation, this
restores the image position when its dimensions exceed those of the
view.

Closes: #99
  • Loading branch information
Tamaranch committed Mar 1, 2025
1 parent d196ffd commit 77688f9
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 1 deletion.
27 changes: 27 additions & 0 deletions src/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ struct _RsttoFilePrivate
RsttoImageOrientation orientation;
gdouble scale;
RsttoScale auto_scale;
gdouble h_adjust, v_adjust;
};


Expand Down Expand Up @@ -484,6 +485,32 @@ rstto_file_set_auto_scale (RsttoFile *r_file,
r_file->priv->auto_scale = auto_scale;
}

gdouble
rstto_file_get_h_adjustment (RsttoFile *r_file)
{
return r_file->priv->h_adjust;
}

gdouble
rstto_file_get_v_adjustment (RsttoFile *r_file)
{
return r_file->priv->v_adjust;
}

void
rstto_file_set_h_adjustment (RsttoFile *r_file,
gdouble h_adjust)
{
r_file->priv->h_adjust = h_adjust;
}

void
rstto_file_set_v_adjustment (RsttoFile *r_file,
gdouble v_adjust)
{
r_file->priv->v_adjust = v_adjust;
}

gboolean
rstto_file_has_exif (RsttoFile *r_file)
{
Expand Down
14 changes: 14 additions & 0 deletions src/file.h
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,20 @@ void
rstto_file_set_auto_scale (RsttoFile *r_file,
RsttoScale auto_scale);

gdouble
rstto_file_get_h_adjustment (RsttoFile *r_file);

gdouble
rstto_file_get_v_adjustment (RsttoFile *r_file);

void
rstto_file_set_h_adjustment (RsttoFile *r_file,
gdouble h_adjust);

void
rstto_file_set_v_adjustment (RsttoFile *r_file,
gdouble v_adjust);

gboolean
rstto_file_has_exif (RsttoFile *r_file);

Expand Down
10 changes: 9 additions & 1 deletion src/image_viewer.c
Original file line number Diff line number Diff line change
Expand Up @@ -813,12 +813,18 @@ set_adjustments (RsttoImageViewer *viewer,
gtk_adjustment_set_upper (viewer->priv->hadjustment, MAX (viewer->priv->rendering.width, alloc.width));
gtk_adjustment_set_page_size (viewer->priv->hadjustment, alloc.width);
if (h_value != -1)
{
gtk_adjustment_set_value (viewer->priv->hadjustment, h_value);
rstto_file_set_h_adjustment (viewer->priv->file, h_value);
}

gtk_adjustment_set_upper (viewer->priv->vadjustment, MAX (viewer->priv->rendering.height, alloc.height));
gtk_adjustment_set_page_size (viewer->priv->vadjustment, alloc.height);
if (v_value != -1)
{
gtk_adjustment_set_value (viewer->priv->vadjustment, v_value);
rstto_file_set_v_adjustment (viewer->priv->file, v_value);
}

g_object_thaw_notify (G_OBJECT (viewer->priv->hadjustment));
g_object_thaw_notify (G_OBJECT (viewer->priv->vadjustment));
Expand Down Expand Up @@ -1745,6 +1751,9 @@ cb_rstto_image_loader_closed_idle (gpointer data)
viewer->priv->image_height = viewer->priv->original_image_height = transaction->image_height;
set_scale_factor (viewer, NULL, NULL);
set_scale (viewer, transaction->scale);
set_adjustments (viewer,
rstto_file_get_h_adjustment (viewer->priv->file),
rstto_file_get_v_adjustment (viewer->priv->file));
}
else
{
Expand All @@ -1764,7 +1773,6 @@ cb_rstto_image_loader_closed_idle (gpointer data)
transaction->error = NULL;
viewer->priv->transaction = NULL;

set_adjustments (viewer, -1, -1);
gdk_window_invalidate_rect (gtk_widget_get_window (widget), NULL, FALSE);

g_signal_emit_by_name (transaction->viewer, "size-ready");
Expand Down

0 comments on commit 77688f9

Please sign in to comment.