{
LayoutWindow *lw = data;
- layout_image_zoom_adjust(lw, get_zoom_increment());
+ layout_image_zoom_adjust(lw, get_zoom_increment(), FALSE);
}
static void li_pop_menu_zoom_out_cb(GtkWidget *widget, gpointer data)
{
LayoutWindow *lw = data;
- layout_image_zoom_adjust(lw, -get_zoom_increment());
+ layout_image_zoom_adjust(lw, -get_zoom_increment(), FALSE);
}
static void li_pop_menu_zoom_1_1_cb(GtkWidget *widget, gpointer data)
{
LayoutWindow *lw = data;
- layout_image_zoom_set(lw, 1.0);
+ layout_image_zoom_set(lw, 1.0, FALSE);
}
static void li_pop_menu_zoom_fit_cb(GtkWidget *widget, gpointer data)
{
LayoutWindow *lw = data;
- layout_image_zoom_set(lw, 0.0);
+ layout_image_zoom_set(lw, 0.0, FALSE);
}
static void li_pop_menu_edit_cb(GtkWidget *widget, gpointer data)
*----------------------------------------------------------------------------
*/
-void layout_image_scroll(LayoutWindow *lw, gint x, gint y)
+void layout_image_scroll(LayoutWindow *lw, gint x, gint y, gboolean connect_scroll)
{
gdouble dx, dy;
gint width, height, i;
image_scroll(lw->image, x, y);
- if (!lw->connect_scroll) return;
+ if (!connect_scroll) return;
image_get_image_size(lw->image, &width, &height);
dx = (gdouble) x / width;
}
-void layout_image_zoom_adjust(LayoutWindow *lw, gdouble increment)
+void layout_image_zoom_adjust(LayoutWindow *lw, gdouble increment, gboolean connect_zoom)
{
gint i;
if (!layout_valid(&lw)) return;
image_zoom_adjust(lw->image, increment);
- if (!lw->connect_zoom) return;
+ if (!connect_zoom) return;
for (i = 0; i < MAX_SPLIT_IMAGES; i++)
{
}
}
-void layout_image_zoom_adjust_at_point(LayoutWindow *lw, gdouble increment, gint x, gint y)
+void layout_image_zoom_adjust_at_point(LayoutWindow *lw, gdouble increment, gint x, gint y, gboolean connect_zoom)
{
gint i;
if (!layout_valid(&lw)) return;
image_zoom_adjust_at_point(lw->image, increment, x, y);
- if (!lw->connect_zoom) return;
+ if (!connect_zoom) return;
for (i = 0; i < MAX_SPLIT_IMAGES; i++)
{
}
}
-void layout_image_zoom_set(LayoutWindow *lw, gdouble zoom)
+void layout_image_zoom_set(LayoutWindow *lw, gdouble zoom, gboolean connect_zoom)
{
gint i;
if (!layout_valid(&lw)) return;
image_zoom_set(lw->image, zoom);
- if (!lw->connect_zoom) return;
+ if (!connect_zoom) return;
for (i = 0; i < MAX_SPLIT_IMAGES; i++)
{
}
}
-void layout_image_zoom_set_fill_geometry(LayoutWindow *lw, gint vertical)
+void layout_image_zoom_set_fill_geometry(LayoutWindow *lw, gint vertical, gboolean connect_zoom)
{
+ gint i;
if (!layout_valid(&lw)) return;
image_zoom_set_fill_geometry(lw->image, vertical);
+
+ if (!connect_zoom) return;
+
+ for (i = 0; i < MAX_SPLIT_IMAGES; i++)
+ {
+ if (lw->split_images[i] && lw->split_images[i] != lw->image)
+ image_zoom_set_fill_geometry(lw->split_images[i], vertical);
+ }
}
void layout_image_alter(LayoutWindow *lw, AlterType type)
switch (event->direction)
{
case GDK_SCROLL_UP:
- layout_image_zoom_adjust_at_point(lw, get_zoom_increment(), event->x, event->y);
+ layout_image_zoom_adjust_at_point(lw, get_zoom_increment(), event->x, event->y, event->state & GDK_SHIFT_MASK);
break;
case GDK_SCROLL_DOWN:
- layout_image_zoom_adjust_at_point(lw, -get_zoom_increment(), event->x, event->y);
+ layout_image_zoom_adjust_at_point(lw, -get_zoom_increment(), event->x, event->y, event->state & GDK_SHIFT_MASK);
break;
default:
break;
}
}
- else if ( (event->state & GDK_SHIFT_MASK) != (guint) (options->mousewheel_scrolls))
+ else if (options->mousewheel_scrolls)
{
switch (event->direction)
{
gint i;
LayoutWindow *lw = data;
- if (!lw->connect_scroll) return;
+ if (!(event->state & GDK_SHIFT_MASK)) return;
for (i = 0; i < MAX_SPLIT_IMAGES; i++)
{
if (x != 0 || y!= 0)
{
- if (event->state & GDK_SHIFT_MASK)
- {
- x *= 3;
- y *= 3;
- }
-
keyboard_scroll_calc(&x, &y, event);
- layout_image_scroll(lw, x, y);
+ layout_image_scroll(lw, x, y, (event->state & GDK_SHIFT_MASK));
}
return stop_signal;
layout_image_to_root(lw);
}
+/* single window zoom */
static void layout_menu_zoom_in_cb(GtkAction *action, gpointer data)
{
LayoutWindow *lw = data;
- layout_image_zoom_adjust(lw, get_zoom_increment());
+ layout_image_zoom_adjust(lw, get_zoom_increment(), FALSE);
}
static void layout_menu_zoom_out_cb(GtkAction *action, gpointer data)
{
LayoutWindow *lw = data;
- layout_image_zoom_adjust(lw, -get_zoom_increment());
+ layout_image_zoom_adjust(lw, -get_zoom_increment(), FALSE);
}
static void layout_menu_zoom_1_1_cb(GtkAction *action, gpointer data)
{
LayoutWindow *lw = data;
- layout_image_zoom_set(lw, 1.0);
+ layout_image_zoom_set(lw, 1.0, FALSE);
}
static void layout_menu_zoom_fit_cb(GtkAction *action, gpointer data)
{
LayoutWindow *lw = data;
- layout_image_zoom_set(lw, 0.0);
+ layout_image_zoom_set(lw, 0.0, FALSE);
}
static void layout_menu_zoom_fit_hor_cb(GtkAction *action, gpointer data)
{
LayoutWindow *lw = data;
- layout_image_zoom_set_fill_geometry(lw, TRUE);
+ layout_image_zoom_set_fill_geometry(lw, TRUE, FALSE);
}
static void layout_menu_zoom_fit_vert_cb(GtkAction *action, gpointer data)
{
LayoutWindow *lw = data;
- layout_image_zoom_set_fill_geometry(lw, FALSE);
+ layout_image_zoom_set_fill_geometry(lw, FALSE, FALSE);
}
static void layout_menu_zoom_2_1_cb(GtkAction *action, gpointer data)
{
LayoutWindow *lw = data;
- layout_image_zoom_set(lw, 2.0);
+ layout_image_zoom_set(lw, 2.0, FALSE);
}
static void layout_menu_zoom_3_1_cb(GtkAction *action, gpointer data)
{
LayoutWindow *lw = data;
- layout_image_zoom_set(lw, 3.0);
+ layout_image_zoom_set(lw, 3.0, FALSE);
}
static void layout_menu_zoom_4_1_cb(GtkAction *action, gpointer data)
{
LayoutWindow *lw = data;
- layout_image_zoom_set(lw, 4.0);
+ layout_image_zoom_set(lw, 4.0, FALSE);
}
static void layout_menu_zoom_1_2_cb(GtkAction *action, gpointer data)
{
LayoutWindow *lw = data;
- layout_image_zoom_set(lw, -2.0);
+ layout_image_zoom_set(lw, -2.0, FALSE);
}
static void layout_menu_zoom_1_3_cb(GtkAction *action, gpointer data)
{
LayoutWindow *lw = data;
- layout_image_zoom_set(lw, -3.0);
+ layout_image_zoom_set(lw, -3.0, FALSE);
}
static void layout_menu_zoom_1_4_cb(GtkAction *action, gpointer data)
{
LayoutWindow *lw = data;
- layout_image_zoom_set(lw, -4.0);
+ layout_image_zoom_set(lw, -4.0, FALSE);
}
+/* connected zoom */
+static void layout_menu_connect_zoom_in_cb(GtkAction *action, gpointer data)
+{
+ LayoutWindow *lw = data;
+
+ layout_image_zoom_adjust(lw, get_zoom_increment(), TRUE);
+}
-static void layout_menu_split_cb(GtkRadioAction *action, GtkRadioAction *current, gpointer data)
+static void layout_menu_connect_zoom_out_cb(GtkAction *action, gpointer data)
{
LayoutWindow *lw = data;
- ImageSplitMode mode;
- layout_exit_fullscreen(lw);
+ layout_image_zoom_adjust(lw, -get_zoom_increment(), TRUE);
+}
- mode = gtk_radio_action_get_current_value(action);
- if (mode == lw->split_mode) mode = 0; /* toggle back */
+static void layout_menu_connect_zoom_1_1_cb(GtkAction *action, gpointer data)
+{
+ LayoutWindow *lw = data;
- layout_split_change(lw, mode);
+ layout_image_zoom_set(lw, 1.0, TRUE);
+}
+
+static void layout_menu_connect_zoom_fit_cb(GtkAction *action, gpointer data)
+{
+ LayoutWindow *lw = data;
+
+ layout_image_zoom_set(lw, 0.0, TRUE);
+}
+
+static void layout_menu_connect_zoom_fit_hor_cb(GtkAction *action, gpointer data)
+{
+ LayoutWindow *lw = data;
+
+ layout_image_zoom_set_fill_geometry(lw, TRUE, TRUE);
+}
+
+static void layout_menu_connect_zoom_fit_vert_cb(GtkAction *action, gpointer data)
+{
+ LayoutWindow *lw = data;
+
+ layout_image_zoom_set_fill_geometry(lw, FALSE, TRUE);
+}
+
+static void layout_menu_connect_zoom_2_1_cb(GtkAction *action, gpointer data)
+{
+ LayoutWindow *lw = data;
+
+ layout_image_zoom_set(lw, 2.0, TRUE);
+}
+
+static void layout_menu_connect_zoom_3_1_cb(GtkAction *action, gpointer data)
+{
+ LayoutWindow *lw = data;
+
+ layout_image_zoom_set(lw, 3.0, TRUE);
+}
+static void layout_menu_connect_zoom_4_1_cb(GtkAction *action, gpointer data)
+{
+ LayoutWindow *lw = data;
+
+ layout_image_zoom_set(lw, 4.0, TRUE);
+}
+
+static void layout_menu_connect_zoom_1_2_cb(GtkAction *action, gpointer data)
+{
+ LayoutWindow *lw = data;
+
+ layout_image_zoom_set(lw, -2.0, TRUE);
}
-static void layout_menu_connect_scroll_cb(GtkToggleAction *action, gpointer data)
+static void layout_menu_connect_zoom_1_3_cb(GtkAction *action, gpointer data)
{
LayoutWindow *lw = data;
- lw->connect_scroll = gtk_toggle_action_get_active(action);
+
+ layout_image_zoom_set(lw, -3.0, TRUE);
}
-static void layout_menu_connect_zoom_cb(GtkToggleAction *action, gpointer data)
+static void layout_menu_connect_zoom_1_4_cb(GtkAction *action, gpointer data)
{
LayoutWindow *lw = data;
- lw->connect_zoom = gtk_toggle_action_get_active(action);
+
+ layout_image_zoom_set(lw, -4.0, TRUE);
+}
+
+
+static void layout_menu_split_cb(GtkRadioAction *action, GtkRadioAction *current, gpointer data)
+{
+ LayoutWindow *lw = data;
+ ImageSplitMode mode;
+
+ layout_exit_fullscreen(lw);
+
+ mode = gtk_radio_action_get_current_value(action);
+ if (mode == lw->split_mode) mode = 0; /* toggle back */
+
+ layout_split_change(lw, mode);
}
{ "ViewMenu", NULL, N_("_View"), NULL, NULL, NULL },
{ "DirMenu", NULL, N_("_View Directory as"), NULL, NULL, NULL },
{ "ZoomMenu", NULL, N_("_Zoom"), NULL, NULL, NULL },
+ { "ConnectZoomMenu", NULL, N_("_Connected Zoom"), NULL, NULL, NULL },
{ "SplitMenu", NULL, N_("_Split"), NULL, NULL, NULL },
{ "HelpMenu", NULL, N_("_Help"), NULL, NULL, NULL },
{ "Wallpaper", NULL, N_("Set as _wallpaper"),NULL, NULL, CB(layout_menu_wallpaper_cb) },
{ "ZoomIn", GTK_STOCK_ZOOM_IN, N_("Zoom _in"), "equal", NULL, CB(layout_menu_zoom_in_cb) },
- { "ZoomInAlt1",GTK_STOCK_ZOOM_IN, N_("Zoom _in"), "plus", NULL, CB(layout_menu_zoom_in_cb) },
- { "ZoomInAlt2",GTK_STOCK_ZOOM_IN, N_("Zoom _in"), "KP_Add", NULL, CB(layout_menu_zoom_in_cb) },
+ { "ZoomInAlt1",GTK_STOCK_ZOOM_IN, N_("Zoom _in"), "KP_Add", NULL, CB(layout_menu_zoom_in_cb) },
{ "ZoomOut", GTK_STOCK_ZOOM_OUT, N_("Zoom _out"), "minus", NULL, CB(layout_menu_zoom_out_cb) },
{ "ZoomOutAlt1",GTK_STOCK_ZOOM_OUT, N_("Zoom _out"), "KP_Subtract", NULL, CB(layout_menu_zoom_out_cb) },
{ "Zoom100", GTK_STOCK_ZOOM_100, N_("Zoom _1:1"), "Z", NULL, CB(layout_menu_zoom_1_1_cb) },
{ "ZoomFit", GTK_STOCK_ZOOM_FIT, N_("_Zoom to fit"), "X", NULL, CB(layout_menu_zoom_fit_cb) },
{ "ZoomFitAlt1",GTK_STOCK_ZOOM_FIT, N_("_Zoom to fit"), "KP_Multiply", NULL, CB(layout_menu_zoom_fit_cb) },
{ "ZoomFillHor", NULL, N_("Fit _Horizontally"),"H", NULL, CB(layout_menu_zoom_fit_hor_cb) },
- { "ZoomFillVert", NULL, N_("Fit _Vorizontally"),"W", NULL, CB(layout_menu_zoom_fit_vert_cb) },
+ { "ZoomFillVert", NULL, N_("Fit _Vertically"), "W", NULL, CB(layout_menu_zoom_fit_vert_cb) },
{ "Zoom200", NULL, N_("Zoom _2:1"), NULL, NULL, CB(layout_menu_zoom_2_1_cb) },
{ "Zoom300", NULL, N_("Zoom _3:1"), NULL, NULL, CB(layout_menu_zoom_3_1_cb) },
{ "Zoom400", NULL, N_("Zoom _4:1"), NULL, NULL, CB(layout_menu_zoom_4_1_cb) },
{ "Zoom33", NULL, N_("Zoom 1:3"), NULL, NULL, CB(layout_menu_zoom_1_3_cb) },
{ "Zoom25", NULL, N_("Zoom 1:4"), NULL, NULL, CB(layout_menu_zoom_1_4_cb) },
+ { "ConnectZoomIn", GTK_STOCK_ZOOM_IN, N_("Zoom _in"), "plus", NULL, CB(layout_menu_connect_zoom_in_cb) },
+ { "ConnectZoomInAlt1",GTK_STOCK_ZOOM_IN, N_("Zoom _in"), "<shift>KP_Add", NULL, CB(layout_menu_connect_zoom_in_cb) },
+ { "ConnectZoomOut", GTK_STOCK_ZOOM_OUT, N_("Zoom _out"), "underscore", NULL, CB(layout_menu_connect_zoom_out_cb) },
+ { "ConnectZoomOutAlt1",GTK_STOCK_ZOOM_OUT, N_("Zoom _out"), "<shift>KP_Subtract", NULL, CB(layout_menu_connect_zoom_out_cb) },
+ { "ConnectZoom100", GTK_STOCK_ZOOM_100, N_("Zoom _1:1"), "<shift>Z", NULL, CB(layout_menu_connect_zoom_1_1_cb) },
+ { "ConnectZoom100Alt1",GTK_STOCK_ZOOM_100, N_("Zoom _1:1"), "<shift>KP_Divide", NULL, CB(layout_menu_connect_zoom_1_1_cb) },
+ { "ConnectZoomFit", GTK_STOCK_ZOOM_FIT, N_("_Zoom to fit"), "<shift>X", NULL, CB(layout_menu_connect_zoom_fit_cb) },
+ { "ConnectZoomFitAlt1",GTK_STOCK_ZOOM_FIT, N_("_Zoom to fit"), "<shift>KP_Multiply", NULL, CB(layout_menu_connect_zoom_fit_cb) },
+ { "ConnectZoomFillHor", NULL, N_("Fit _Horizontally"),"<shift>H", NULL, CB(layout_menu_connect_zoom_fit_hor_cb) },
+ { "ConnectZoomFillVert", NULL, N_("Fit _Vertically"), "<shift>W", NULL, CB(layout_menu_connect_zoom_fit_vert_cb) },
+ { "ConnectZoom200", NULL, N_("Zoom _2:1"), NULL, NULL, CB(layout_menu_connect_zoom_2_1_cb) },
+ { "ConnectZoom300", NULL, N_("Zoom _3:1"), NULL, NULL, CB(layout_menu_connect_zoom_3_1_cb) },
+ { "ConnectZoom400", NULL, N_("Zoom _4:1"), NULL, NULL, CB(layout_menu_connect_zoom_4_1_cb) },
+ { "ConnectZoom50", NULL, N_("Zoom 1:2"), NULL, NULL, CB(layout_menu_connect_zoom_1_2_cb) },
+ { "ConnectZoom33", NULL, N_("Zoom 1:3"), NULL, NULL, CB(layout_menu_connect_zoom_1_3_cb) },
+ { "ConnectZoom25", NULL, N_("Zoom 1:4"), NULL, NULL, CB(layout_menu_connect_zoom_1_4_cb) },
+
{ "ViewInNewWindow", NULL, N_("_View in new window"), "<control>V", NULL, CB(layout_menu_view_in_new_window_cb) },
{ "SBarKeywords", NULL, N_("_Keywords"), "<control>K", NULL, CB(layout_menu_bar_info_cb), FALSE },
{ "SBarExif", NULL, N_("E_xif data"), "<control>E", NULL, CB(layout_menu_bar_exif_cb), FALSE },
{ "SBarSort", NULL, N_("Sort _manager"), "<control>S", NULL, CB(layout_menu_bar_sort_cb), FALSE },
- { "ConnectScroll", NULL, N_("Co_nnected scroll"),"<control>U", NULL, CB(layout_menu_connect_scroll_cb), FALSE },
- { "ConnectZoom", NULL, N_("C_onnected zoom"), "<control>Y", NULL, CB(layout_menu_connect_zoom_cb), FALSE },
{ "SlideShow", NULL, N_("Toggle _slideshow"),"S", NULL, CB(layout_menu_slideshow_cb), FALSE },
};
" <menuitem action='Zoom33'/>"
" <menuitem action='Zoom25'/>"
" </menu>"
+" <menu action='ConnectZoomMenu'>"
+" <menuitem action='ConnectZoomIn'/>"
+" <menuitem action='ConnectZoomOut'/>"
+" <menuitem action='ConnectZoomFit'/>"
+" <menuitem action='ConnectZoomFillHor'/>"
+" <menuitem action='ConnectZoomFillVert'/>"
+" <menuitem action='ConnectZoom100'/>"
+" <menuitem action='ConnectZoom200'/>"
+" <menuitem action='ConnectZoom300'/>"
+" <menuitem action='ConnectZoom400'/>"
+" <menuitem action='ConnectZoom50'/>"
+" <menuitem action='ConnectZoom33'/>"
+" <menuitem action='ConnectZoom25'/>"
+" </menu>"
" <separator/>"
" <menu action='SplitMenu'>"
" <menuitem action='SplitHorizontal'/>"
" <menuitem action='SplitQuad'/>"
" <menuitem action='SplitSingle'/>"
" </menu>"
-" <menuitem action='ConnectScroll'/>"
-" <menuitem action='ConnectZoom'/>"
" <separator/>"
" <menuitem action='Thumbnails'/>"
" <menuitem action='ViewList'/>"
"<accelerator action='NextImageAlt2'/>"
"<accelerator action='DeleteAlt1'/>"
"<accelerator action='DeleteAlt2'/>"
-"<accelerator action='ZoomInAlt1'/>"
-"<accelerator action='ZoomInAlt2'/>"
-"<accelerator action='ZoomOutAlt1'/>"
-"<accelerator action='Zoom100Alt1'/>"
-"<accelerator action='ZoomFitAlt1'/>"
"<accelerator action='FullScreenAlt1'/>"
"<accelerator action='FullScreenAlt2'/>"
"<accelerator action='Escape'/>"
"<accelerator action='EscapeAlt1'/>"
+
+"<accelerator action='ZoomInAlt1'/>"
+"<accelerator action='ZoomOutAlt1'/>"
+"<accelerator action='Zoom100Alt1'/>"
+"<accelerator action='ZoomFitAlt1'/>"
+
+"<accelerator action='ConnectZoomInAlt1'/>"
+"<accelerator action='ConnectZoomOutAlt1'/>"
+"<accelerator action='ConnectZoom100Alt1'/>"
+"<accelerator action='ConnectZoomFitAlt1'/>"
"</ui>";
{
LayoutWindow *lw = data;
- layout_image_zoom_adjust(lw, get_zoom_increment());
+ layout_image_zoom_adjust(lw, get_zoom_increment(), TRUE);
}
static void layout_button_zoom_out_cb(GtkWidget *widget, gpointer data)
{
LayoutWindow *lw = data;
- layout_image_zoom_adjust(lw, -get_zoom_increment());
+ layout_image_zoom_adjust(lw, -get_zoom_increment(), TRUE);
}
static void layout_button_zoom_fit_cb(GtkWidget *widget, gpointer data)
{
LayoutWindow *lw = data;
- layout_image_zoom_set(lw, 0.0);
+ layout_image_zoom_set(lw, 0.0, TRUE);
}
static void layout_button_zoom_1_1_cb(GtkWidget *widget, gpointer data)
{
LayoutWindow *lw = data;
- layout_image_zoom_set(lw, 1.0);
+ layout_image_zoom_set(lw, 1.0, TRUE);
}
static void layout_button_config_cb(GtkWidget *widget, gpointer data)