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

📄 layout_util.c

📁 Gqview,Linux下基于GTK+库写成的轻量级而能丰富的图像浏览程序。
💻 C
📖 第 1 页 / 共 3 页
字号:
/* * GQview * (C) 2004 John Ellis * * Author: John Ellis * * This software is released under the GNU General Public License (GNU GPL). * Please read the included file COPYING for more information. * This software comes with no warranty of any kind, use at your own risk! */#include "gqview.h"#include "layout_util.h"#include "bar_info.h"#include "bar_exif.h"#include "bar_sort.h"#include "cache_maint.h"#include "collect.h"#include "collect-dlg.h"#include "dupe.h"#include "editors.h"#include "info.h"#include "layout_image.h"#include "pan-view.h"#include "pixbuf_util.h"#include "preferences.h"#include "print.h"#include "search.h"#include "utilops.h"#include "ui_bookmark.h"#include "ui_fileops.h"#include "ui_menu.h"#include "ui_misc.h"#include "ui_tabcomp.h"#include <gdk/gdkkeysyms.h> /* for keyboard values */#define MENU_EDIT_ACTION_OFFSET 16/* *----------------------------------------------------------------------------- * keyboard handler *----------------------------------------------------------------------------- */static guint tree_key_overrides[] = {	GDK_Page_Up,	GDK_KP_Page_Up,	GDK_Page_Down,	GDK_KP_Page_Down,	GDK_Home,	GDK_KP_Home,	GDK_End,	GDK_KP_End};static gint layout_key_match(guint keyval){	gint i;	for (i = 0; i < sizeof(tree_key_overrides) / sizeof(guint); i++)		{		if (keyval == tree_key_overrides[i]) return TRUE;		}	return FALSE;}static gint layout_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer data){	LayoutWindow *lw = data;	gint stop_signal = FALSE;	gint x = 0;	gint y = 0;	if (lw->path_entry && GTK_WIDGET_HAS_FOCUS(lw->path_entry))		{		if (event->keyval == GDK_Escape && lw->path)			{			gtk_entry_set_text(GTK_ENTRY(lw->path_entry), lw->path);			}		/* the gtkaccelgroup of the window is stealing presses before they get to the entry (and more),		 * so when the some widgets have focus, give them priority (HACK)		 */		if (gtk_widget_event(lw->path_entry, (GdkEvent *)event))			{			return TRUE;			}		}	if (lw->vdt && GTK_WIDGET_HAS_FOCUS(lw->vdt->treeview) &&	    !layout_key_match(event->keyval) &&	    gtk_widget_event(lw->vdt->treeview, (GdkEvent *)event))		{		return TRUE;		}	if (lw->bar_info &&	    bar_info_event(lw->bar_info, (GdkEvent *)event))		{		return TRUE;		}	if (lw->image &&	    (GTK_WIDGET_HAS_FOCUS(lw->image->widget) || (lw->tools && widget == lw->window)) )		{		switch (event->keyval)			{			case GDK_Left: case GDK_KP_Left:				x -= 1;				stop_signal = TRUE;				break;			case GDK_Right: case GDK_KP_Right:				x += 1;				stop_signal = TRUE;				break;			case GDK_Up: case GDK_KP_Up:				y -= 1;				stop_signal = TRUE;				break;			case GDK_Down: case GDK_KP_Down:				y += 1;				stop_signal = TRUE;				break;			case GDK_BackSpace:			case 'B': case 'b':				layout_image_prev(lw);				stop_signal = TRUE;				break;			case GDK_space:			case 'N': case 'n':				layout_image_next(lw);				stop_signal = TRUE;				break;			case GDK_Menu:				layout_image_menu_popup(lw);				stop_signal = TRUE;				break;			}		}	if (!stop_signal && !(event->state & GDK_CONTROL_MASK) )	    switch (event->keyval)		{		case '+': case GDK_KP_Add:			layout_image_zoom_adjust(lw, get_zoom_increment());			stop_signal = TRUE;			break;		case GDK_KP_Subtract:			layout_image_zoom_adjust(lw, -get_zoom_increment());			stop_signal = TRUE;			break;		case GDK_KP_Multiply:			layout_image_zoom_set(lw, 0.0);			stop_signal = TRUE;			break;		case GDK_KP_Divide:		case '1':			layout_image_zoom_set(lw, 1.0);			stop_signal = TRUE;			break;		case '2':			layout_image_zoom_set(lw, 2.0);			stop_signal = TRUE;			break;		case '3':			layout_image_zoom_set(lw, 3.0);			stop_signal = TRUE;			break;		case '4':			layout_image_zoom_set(lw, 4.0);			stop_signal = TRUE;			break;		case '7':			layout_image_zoom_set(lw, -4.0);			stop_signal = TRUE;			break;		case '8':			layout_image_zoom_set(lw, -3.0);			stop_signal = TRUE;			break;		case '9':			layout_image_zoom_set(lw, -2.0);			stop_signal = TRUE;			break;		case 'W': case 'w':			layout_image_zoom_set_fill_geometry(lw, FALSE);			break;		case 'H': case 'h':			layout_image_zoom_set_fill_geometry(lw, TRUE);			break;		case GDK_Page_Up: case GDK_KP_Page_Up:			layout_image_prev(lw);			stop_signal = TRUE;			break;		case GDK_Page_Down: case GDK_KP_Page_Down:			layout_image_next(lw);			stop_signal = TRUE;			break;		case GDK_Home: case GDK_KP_Home:			layout_image_first(lw);			stop_signal = TRUE;			break;		case GDK_End: case GDK_KP_End:			layout_image_last(lw);			stop_signal = TRUE;			break;		case GDK_Delete: case GDK_KP_Delete:			if (enable_delete_key)				{				file_util_delete(NULL, layout_selection_list(lw), widget);				stop_signal = TRUE;				}			break;		case GDK_Escape:			/* FIXME:interrupting thumbs no longer allowed */#if 0			interrupt_thumbs();#endif			stop_signal = TRUE;			break;		case 'P': case 'p':			layout_image_slideshow_pause_toggle(lw);			break;		case 'V': case 'v':			if (!(event->state & GDK_MOD1_MASK)) layout_image_full_screen_toggle(lw);			break;		}	if (event->state & GDK_SHIFT_MASK)		{		x *= 3;		y *= 3;		}	if (x != 0 || y!= 0)		{		keyboard_scroll_calc(&x, &y, event);		layout_image_scroll(lw, x, y);		}	if (stop_signal) g_signal_stop_emission_by_name(G_OBJECT(widget), "key_press_event");	return stop_signal;}void layout_keyboard_init(LayoutWindow *lw, GtkWidget *window){	g_signal_connect(G_OBJECT(window), "key_press_event",			 G_CALLBACK(layout_key_press_cb), lw);}/* *----------------------------------------------------------------------------- * menu callbacks *----------------------------------------------------------------------------- */static void layout_menu_new_window_cb(GtkAction *action, gpointer data){	LayoutWindow *lw = data;	LayoutWindow *nw;	nw = layout_new(NULL, FALSE, FALSE);	layout_sort_set(nw, file_sort_method, file_sort_ascending);	layout_set_path(nw, layout_get_path(lw));}static void layout_menu_new_cb(GtkAction *action, gpointer data){	collection_window_new(NULL);}static void layout_menu_open_cb(GtkAction *action, gpointer data){	collection_dialog_load(NULL);}static void layout_menu_search_cb(GtkAction *action, gpointer data){	LayoutWindow *lw = data;	search_new(lw->path, layout_image_get_path(lw));}static void layout_menu_dupes_cb(GtkAction *action, gpointer data){	dupe_window_new(DUPE_MATCH_NAME);}static void layout_menu_pan_cb(GtkAction *action, gpointer data){	LayoutWindow *lw = data;	pan_window_new(layout_get_path(lw));}static void layout_menu_print_cb(GtkAction *action, gpointer data){	LayoutWindow *lw = data;	print_window_new(layout_image_get_path(lw), layout_selection_list(lw), layout_list(lw), lw->window);}static void layout_menu_dir_cb(GtkAction *action, gpointer data){	LayoutWindow *lw = data;	file_util_create_dir(lw->path, lw->window);}static void layout_menu_copy_cb(GtkAction *action, gpointer data){	LayoutWindow *lw = data;	file_util_copy(NULL, layout_selection_list(lw), NULL, lw->window);}static void layout_menu_move_cb(GtkAction *action, gpointer data){	LayoutWindow *lw = data;	file_util_move(NULL, layout_selection_list(lw), NULL, lw->window);}static void layout_menu_rename_cb(GtkAction *action, gpointer data){	LayoutWindow *lw = data;	file_util_rename(NULL, layout_selection_list(lw), lw->window);}static void layout_menu_delete_cb(GtkAction *action, gpointer data){	LayoutWindow *lw = data;	file_util_delete(NULL, layout_selection_list(lw), lw->window);}static void layout_menu_close_cb(GtkAction *action, gpointer data){	LayoutWindow *lw = data;	layout_close(lw);}static void layout_menu_exit_cb(GtkAction *action, gpointer data){	exit_gqview();}static void layout_menu_alter_90_cb(GtkAction *action, gpointer data){	LayoutWindow *lw = data;	layout_image_alter(lw, ALTER_ROTATE_90);}static void layout_menu_alter_90cc_cb(GtkAction *action, gpointer data){	LayoutWindow *lw = data;	layout_image_alter(lw, ALTER_ROTATE_90_CC);}static void layout_menu_alter_180_cb(GtkAction *action, gpointer data){	LayoutWindow *lw = data;	layout_image_alter(lw, ALTER_ROTATE_180);}static void layout_menu_alter_mirror_cb(GtkAction *action, gpointer data){	LayoutWindow *lw = data;	layout_image_alter(lw, ALTER_MIRROR);}static void layout_menu_alter_flip_cb(GtkAction *action, gpointer data){	LayoutWindow *lw = data;	layout_image_alter(lw, ALTER_FLIP);}static void layout_menu_info_cb(GtkAction *action, gpointer data){	LayoutWindow *lw = data;	GList *list;	const gchar *path = NULL;	list = layout_selection_list(lw);	if (!list) path = layout_image_get_path(lw);	info_window_new(path, list);}static void layout_menu_select_all_cb(GtkAction *action, gpointer data){	LayoutWindow *lw = data;	layout_select_all(lw);}static void layout_menu_unselect_all_cb(GtkAction *action, gpointer data){	LayoutWindow *lw = data;	layout_select_none(lw);}static void layout_menu_config_cb(GtkAction *action, gpointer data){	show_config_window();}static void layout_menu_remove_thumb_cb(GtkAction *action, gpointer data){	cache_manager_show();}static void layout_menu_wallpaper_cb(GtkAction *action, gpointer data){	LayoutWindow *lw = data;	layout_image_to_root(lw);}static void layout_menu_zoom_in_cb(GtkAction *action, gpointer data){	LayoutWindow *lw = data;	layout_image_zoom_adjust(lw, get_zoom_increment());}static void layout_menu_zoom_out_cb(GtkAction *action, gpointer data){	LayoutWindow *lw = data;	layout_image_zoom_adjust(lw, -get_zoom_increment());}static void layout_menu_zoom_1_1_cb(GtkAction *action, gpointer data){	LayoutWindow *lw = data;	layout_image_zoom_set(lw, 1.0);}static void layout_menu_zoom_fit_cb(GtkAction *action, gpointer data){	LayoutWindow *lw = data;	layout_image_zoom_set(lw, 0.0);}static void layout_menu_thumb_cb(GtkToggleAction *action, gpointer data){	LayoutWindow *lw = data;	layout_thumb_set(lw, gtk_toggle_action_get_active(action));}static void layout_menu_list_cb(GtkRadioAction *action, GtkRadioAction *current, gpointer data){	LayoutWindow *lw = data;	layout_views_set(lw, lw->tree_view, (gtk_radio_action_get_current_value(action) == 1));}static void layout_menu_tree_cb(GtkToggleAction *action, gpointer data){	LayoutWindow *lw = data;	layout_views_set(lw, gtk_toggle_action_get_active(action), lw->icon_view);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -