⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 layout_image.c

📁 Gqview,Linux下基于GTK+库写成的轻量级而能丰富的图像浏览程序。
💻 C
📖 第 1 页 / 共 3 页
字号:
	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 + -