📄 layout_image.c
字号:
if (lw->slideshow) { layout_image_slideshow_stop(lw); } else { layout_image_slideshow_start(lw); }}gint layout_image_slideshow_active(LayoutWindow *lw){ if (!layout_valid(&lw)) return FALSE; return (lw->slideshow != NULL);}gint layout_image_slideshow_pause_toggle(LayoutWindow *lw){ gint ret; if (!layout_valid(&lw)) return FALSE; ret = slideshow_pause_toggle(lw->slideshow); layout_status_update_info(lw, NULL); return ret;}gint layout_image_slideshow_paused(LayoutWindow *lw){ if (!layout_valid(&lw)) return FALSE; return (slideshow_paused(lw->slideshow));}static gint layout_image_slideshow_continue_check(LayoutWindow *lw){ if (!lw->slideshow) return FALSE; if (!slideshow_should_continue(lw->slideshow)) { layout_image_slideshow_stop(lw); return FALSE; } return TRUE;}/* *---------------------------------------------------------------------------- * pop-up menus *---------------------------------------------------------------------------- */static void li_pop_menu_zoom_in_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; image_zoom_adjust(lw->image, get_zoom_increment());}static void li_pop_menu_zoom_out_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; image_zoom_adjust(lw->image, -get_zoom_increment());}static void li_pop_menu_zoom_1_1_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; image_zoom_set(lw->image, 1.0);}static void li_pop_menu_zoom_fit_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; image_zoom_set(lw->image, 0.0);}static void li_pop_menu_edit_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw; gint n; lw = submenu_item_get_data(widget); n = GPOINTER_TO_INT(data); if (!editor_window_flag_set(n)) { layout_image_full_screen_stop(lw); } start_editor_from_file(n, layout_image_get_path(lw));}static void li_pop_menu_wallpaper_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; layout_image_to_root(lw);}static void li_pop_menu_alter_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; AlterType type; lw = submenu_item_get_data(widget); type = (AlterType)GPOINTER_TO_INT(data); image_alter(lw->image, type);}static void li_pop_menu_info_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; info_window_new(layout_image_get_path(lw), NULL);}static void li_pop_menu_new_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; view_window_new(layout_image_get_path(lw));}static GtkWidget *li_pop_menu_click_parent(GtkWidget *widget, LayoutWindow *lw){ GtkWidget *menu; GtkWidget *parent; menu = gtk_widget_get_toplevel(widget); if (!menu) return NULL; parent = g_object_get_data(G_OBJECT(menu), "click_parent"); if (!parent && lw->full_screen) { parent = lw->full_screen->imd->widget; } return parent;}static void li_pop_menu_copy_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; file_util_copy(layout_image_get_path(lw), NULL, NULL, li_pop_menu_click_parent(widget, lw));}static void li_pop_menu_move_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; file_util_move(layout_image_get_path(lw), NULL, NULL, li_pop_menu_click_parent(widget, lw));}static void li_pop_menu_rename_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; file_util_rename(layout_image_get_path(lw), NULL, li_pop_menu_click_parent(widget, lw));}static void li_pop_menu_delete_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; file_util_delete(layout_image_get_path(lw), NULL, li_pop_menu_click_parent(widget, lw));}static void li_pop_menu_slide_start_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; layout_image_slideshow_start(lw);}static void li_pop_menu_slide_stop_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; layout_image_slideshow_stop(lw);}static void li_pop_menu_slide_pause_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; layout_image_slideshow_pause_toggle(lw);}static void li_pop_menu_full_screen_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; layout_image_full_screen_toggle(lw);}static void li_pop_menu_hide_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; layout_tools_hide_toggle(lw);}static GtkWidget *layout_image_pop_menu(LayoutWindow *lw){ GtkWidget *menu; GtkWidget *item; GtkWidget *submenu; const gchar *path; gint fullscreen; path = layout_image_get_path(lw); fullscreen = layout_image_full_screen_active(lw); menu = popup_menu_short_lived(); menu_item_add_stock(menu, _("Zoom _in"), GTK_STOCK_ZOOM_IN, G_CALLBACK(li_pop_menu_zoom_in_cb), lw); menu_item_add_stock(menu, _("Zoom _out"), GTK_STOCK_ZOOM_OUT, G_CALLBACK(li_pop_menu_zoom_out_cb), lw); menu_item_add_stock(menu, _("Zoom _1:1"), GTK_STOCK_ZOOM_100, G_CALLBACK(li_pop_menu_zoom_1_1_cb), lw); menu_item_add_stock(menu, _("Fit image to _window"), GTK_STOCK_ZOOM_FIT, G_CALLBACK(li_pop_menu_zoom_fit_cb), lw); menu_item_add_divider(menu); submenu = submenu_add_edit(menu, &item, G_CALLBACK(li_pop_menu_edit_cb), lw); if (!path) gtk_widget_set_sensitive(item, FALSE); menu_item_add_divider(submenu); menu_item_add(submenu, _("Set as _wallpaper"), G_CALLBACK(li_pop_menu_wallpaper_cb), lw); item = submenu_add_alter(menu, G_CALLBACK(li_pop_menu_alter_cb), lw); item = menu_item_add_stock(menu, _("_Properties"), GTK_STOCK_PROPERTIES, G_CALLBACK(li_pop_menu_info_cb), lw); if (!path) gtk_widget_set_sensitive(item, FALSE); item = menu_item_add_stock(menu, _("View in _new window"), GTK_STOCK_NEW, G_CALLBACK(li_pop_menu_new_cb), lw); if (!path || fullscreen) gtk_widget_set_sensitive(item, FALSE); menu_item_add_divider(menu); item = menu_item_add_stock(menu, _("_Copy..."), GTK_STOCK_COPY, G_CALLBACK(li_pop_menu_copy_cb), lw); if (!path) gtk_widget_set_sensitive(item, FALSE); item = menu_item_add(menu, _("_Move..."), G_CALLBACK(li_pop_menu_move_cb), lw); if (!path) gtk_widget_set_sensitive(item, FALSE); item = menu_item_add(menu, _("_Rename..."), G_CALLBACK(li_pop_menu_rename_cb), lw); if (!path) gtk_widget_set_sensitive(item, FALSE); item = menu_item_add_stock(menu, _("_Delete..."), GTK_STOCK_DELETE, G_CALLBACK(li_pop_menu_delete_cb), lw); if (!path) gtk_widget_set_sensitive(item, FALSE); menu_item_add_divider(menu); if (layout_image_slideshow_active(lw)) { menu_item_add(menu, _("_Stop slideshow"), G_CALLBACK(li_pop_menu_slide_stop_cb), lw); if (layout_image_slideshow_paused(lw)) { item = menu_item_add(menu, _("Continue slides_how"), G_CALLBACK(li_pop_menu_slide_pause_cb), lw); } else { item = menu_item_add(menu, _("Pause slides_how"), G_CALLBACK(li_pop_menu_slide_pause_cb), lw); } } else { menu_item_add(menu, _("_Start slideshow"), G_CALLBACK(li_pop_menu_slide_start_cb), lw); item = menu_item_add(menu, _("Pause slides_how"), G_CALLBACK(li_pop_menu_slide_pause_cb), lw); gtk_widget_set_sensitive(item, FALSE); } if (!fullscreen) { menu_item_add(menu, _("_Full screen"), G_CALLBACK(li_pop_menu_full_screen_cb), lw); } else { menu_item_add(menu, _("Exit _full screen"), G_CALLBACK(li_pop_menu_full_screen_cb), lw); } menu_item_add_divider(menu); item = menu_item_add_check(menu, _("Hide file _list"), lw->tools_hidden, G_CALLBACK(li_pop_menu_hide_cb), lw); if (fullscreen) gtk_widget_set_sensitive(item, FALSE); return menu;}static void layout_image_menu_pos_cb(GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer data){ LayoutWindow *lw = data; gdk_window_get_origin(lw->image->pr->window, x, y); popup_menu_position_clamp(menu, x, y, 0);}void layout_image_menu_popup(LayoutWindow *lw){ GtkWidget *menu; menu = layout_image_pop_menu(lw); gtk_menu_popup(GTK_MENU(menu), NULL, NULL, layout_image_menu_pos_cb, lw, 0, GDK_CURRENT_TIME);}/* *---------------------------------------------------------------------------- * dnd *---------------------------------------------------------------------------- */static void layout_image_dnd_receive(GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *selection_data, guint info, guint time, gpointer data){ LayoutWindow *lw = data; if (info == TARGET_URI_LIST || info == TARGET_APP_COLLECTION_MEMBER) { CollectionData *source; GList *list; GList *info_list; if (info == TARGET_URI_LIST) { list = uri_list_from_text(selection_data->data, TRUE); source = NULL; info_list = NULL; } else { source = collection_from_dnd_data((gchar *)selection_data->data, &list, &info_list); } if (list) { gchar *path; path = list->data; if (isfile(path)) { gchar *base; gint row; base = remove_level_from_path(path); if (strcmp(base, layout_get_path(lw)) != 0) { layout_set_path(lw, base); } g_free(base); row = layout_list_get_index(lw, path); if (source && info_list) { layout_image_set_collection(lw, source, info_list->data); } else if (row == -1) { layout_image_set_path(lw, path); } else { layout_image_set_index(lw, row); } } else if (isdir(path)) { layout_set_path(lw, path); layout_image_set_path(lw, NULL); } } path_list_free(list); g_list_free(info_list); }}static void layout_image_dnd_get(GtkWidget *widget, GdkDragContext *context, GtkSelectionData *selection_data, guint info, guint time, gpointer data){ LayoutWindow *lw = data; const gchar *path; path = layout_image_get_path(lw); if (path) { gchar *text = NULL; gint len; gint plain_text; GList *list; switch (info) { case TARGET_URI_LIST: plain_text = FALSE; break; case TARGET_TEXT_PLAIN: default: plain_text = TRUE; break; } list = g_list_append(NULL, (gchar *)path); text = uri_text_from_list(list, &len, plain_text); g_list_free(list); if (text) { gtk_selection_data_set (selection_data, selection_data->target, 8, text, len); g_free(text); } } else { gtk_selection_data_set (selection_data, selection_data->target, 8, NULL, 0); }}static void layout_image_dnd_end(GtkWidget *widget, GdkDragContext *context, gpointer data){ LayoutWindow *lw = data; if (context->action == GDK_ACTION_MOVE) { const gchar *path; gint row; path = layout_image_get_path(lw); row = layout_list_get_index(lw, path); if (row < 0) return; if (!isfile(path)) { if (row < layout_list_count(lw, NULL) - 1) { layout_image_next(lw); } else { layout_image_prev(lw); } } layout_refresh(lw); }}static void layout_image_dnd_init(LayoutWindow *lw){ gtk_drag_source_set(lw->image->pr, GDK_BUTTON2_MASK, dnd_file_drag_types, dnd_file_drag_types_count, GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK); g_signal_connect(G_OBJECT(lw->image->pr), "drag_data_get", G_CALLBACK(layout_image_dnd_get), lw); g_signal_connect(G_OBJECT(lw->image->pr), "drag_end", G_CALLBACK(layout_image_dnd_end), lw); gtk_drag_dest_set(lw->image->pr, GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP, dnd_file_drop_types, dnd_file_drop_types_count, GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK); g_signal_connect(G_OBJECT(lw->image->pr), "drag_data_received", G_CALLBACK(layout_image_dnd_receive), lw);}/* *----------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -