Exemplo n.º 1
0
static void scroll_cb(ImageWindow *imd, GdkEventScroll *event, gpointer data)
{
	ViewWindow *vw = data;

	if (event->state & GDK_CONTROL_MASK)
		{
		switch (event->direction)
			{
			case GDK_SCROLL_UP:
				image_zoom_adjust_at_point(imd, get_zoom_increment(), event->x, event->y);
				break;
			case GDK_SCROLL_DOWN:
				image_zoom_adjust_at_point(imd, -get_zoom_increment(), event->x, event->y);
				break;
			default:
				break;
			}
		}
	else if ( (event->state & GDK_SHIFT_MASK) != (guint) (options->mousewheel_scrolls))
		{
		switch (event->direction)
			{
			case GDK_SCROLL_UP:
				image_scroll(imd, 0, -MOUSEWHEEL_SCROLL_SIZE);
				break;
			case GDK_SCROLL_DOWN:
				image_scroll(imd, 0, MOUSEWHEEL_SCROLL_SIZE);
				break;
			case GDK_SCROLL_LEFT:
				image_scroll(imd, -MOUSEWHEEL_SCROLL_SIZE, 0);
				break;
			case GDK_SCROLL_RIGHT:
				image_scroll(imd, MOUSEWHEEL_SCROLL_SIZE, 0);
				break;
			default:
				break;
			}
		}
	else
		{
		switch (event->direction)
			{
			case GDK_SCROLL_UP:
				view_step_prev(vw);
				break;
			case GDK_SCROLL_DOWN:
				view_step_next(vw);
				break;
			default:
				break;
			}
		}
}
Exemplo n.º 2
0
static gboolean lirc_input_callback(GIOChannel *source, GIOCondition condition,
                                    gpointer data)
{
    LayoutWindow *lw = data;
    gchar *ptr;
    gint ret;
    gint x = 0;
    gint y = 0;

    /* LIRC code and corresponding geeqie command (and parameters)*/
    gchar *code;
    gchar *cmd;

    /* parameters for geeqie command */
    gint i_parm;
    gfloat fl_parm;

    while ((ret = lirc_nextcode(&code)) == 0 && code)
    {
        while ((ret = lirc_code2char(config, code, &cmd)) == 0 && cmd)
        {
            if (g_ascii_strncasecmp("LEFT", cmd, 4) == 0)
            {
                ptr = cmd + 4;
                while (g_ascii_isspace(*ptr)) ptr++;
                i_parm = atoi(ptr);

                if (i_parm <= 0) i_parm = 1;
                x -= i_parm;
            }
            else if (g_ascii_strncasecmp("RIGHT", cmd, 5) == 0)
            {
                ptr = cmd + 5;
                while (g_ascii_isspace(*ptr)) ptr++;
                i_parm = atoi(ptr);

                if (i_parm <= 0) i_parm = 1;
                x += i_parm;
            }
            else if (g_ascii_strncasecmp("UP", cmd, 2) == 0)
            {
                ptr = cmd + 2;
                while (g_ascii_isspace(*ptr)) ptr++;
                i_parm = atoi(ptr);

                if (i_parm <= 0) i_parm = 1;
                y -= i_parm;
            }
            else if (g_ascii_strncasecmp("DOWN", cmd, 4) == 0)
            {
                ptr = cmd + 4;
                while (g_ascii_isspace(*ptr)) ptr++;
                i_parm = atoi(ptr);

                if (i_parm <= 0) i_parm = 1;
                y += i_parm;
            }
            else if (g_ascii_strcasecmp("PREV", cmd) == 0)
            {
                layout_image_prev(lw);
            }
            else if (g_ascii_strcasecmp("NEXT", cmd) == 0)
            {
                layout_image_next(lw);
            }
            else if (g_ascii_strncasecmp("ZOOM_IN", cmd, 7) == 0)
            {
                ptr = cmd + 7;
                while (g_ascii_isspace(*ptr)) ptr++;
                fl_parm = atoi(ptr) / 10.0;

                if (fl_parm <= 0.01) fl_parm = get_zoom_increment();
                layout_image_zoom_adjust(lw, fl_parm, FALSE);
            }
            else if (g_ascii_strncasecmp("ZOOM_OUT", cmd, 8) == 0)
            {
                ptr = cmd + 8;
                while (g_ascii_isspace(*ptr)) ptr++;
                fl_parm = atoi(ptr) / 10.0;

                if (fl_parm <= 0.01) fl_parm = get_zoom_increment();
                layout_image_zoom_adjust(lw, -fl_parm, FALSE);
            }
            else if (g_ascii_strcasecmp("ZOOM_MAX", cmd) == 0)
            {
                layout_image_zoom_set(lw, 0.0, FALSE);
            }
            else if (g_ascii_strcasecmp("FULL_SCREEN", cmd) == 0)
            {
                layout_image_full_screen_toggle(lw);
            }
            else if (g_ascii_strncasecmp("SET_ZOOM", cmd, 8) == 0)
            {
                ptr = cmd + 8;
                while (g_ascii_isspace(*ptr)) ptr++;
                i_parm = atoi(ptr);

                if (i_parm <= 0) i_parm = 1;
                layout_image_zoom_set(lw, 1.0, FALSE);
            }
            else if (g_ascii_strncasecmp("SET_INV_ZOOM", cmd, 12) == 0)
            {
                ptr = cmd + 12;
                while (g_ascii_isspace(*ptr)) ptr++;
                i_parm = atoi(ptr);

                if (i_parm <= 0) i_parm = 1;
                layout_image_zoom_set(lw, -i_parm, FALSE);
            }
            else if (g_ascii_strcasecmp("FIRST", cmd) == 0)
            {
                layout_image_first(lw);
            }
            else if (g_ascii_strcasecmp("LAST", cmd) == 0)
            {
                layout_image_last(lw);
            }
            else if (g_ascii_strcasecmp("PAUSE", cmd) == 0)
            {
                layout_image_slideshow_pause_toggle(lw);
            }
            else if (g_ascii_strcasecmp("ROTATE_90", cmd) == 0)
            {
                layout_image_alter_orientation(lw, ALTER_ROTATE_90);
            }
            else if (g_ascii_strcasecmp("ROTATE_90_CC", cmd) == 0)
            {
                layout_image_alter_orientation(lw, ALTER_ROTATE_90_CC);
            }
            else if (g_ascii_strcasecmp("INFO", cmd) == 0)
            {
                layout_image_overlay_toggle(lw);
            }
            else if (g_ascii_strcasecmp("EXIT", cmd) == 0)
            {
                exit_program();
            }
        }
        free(code);
        if (ret == -1) break;
    }
    if (x != 0 || y != 0)
    {
        layout_image_scroll(lw, x, y, FALSE);
    }

    if (ret == -1)
    {
        /* something went badly wrong */
        g_fprintf(stderr, _("disconnected from LIRC\n"));
        lirc_cleanup();
        return (gboolean)FALSE;
    }
    return (gboolean)TRUE;
}
Exemplo n.º 3
0
static gboolean view_window_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer data)
{
	ViewWindow *vw = data;
	ImageWindow *imd;
	gint stop_signal;
	GtkWidget *menu;
	gint x = 0;
	gint y = 0;

	imd = view_window_active_image(vw);

	stop_signal = TRUE;
	switch (event->keyval)
		{
		case GDK_KEY_Left: case GDK_KEY_KP_Left:
			x -= 1;
			break;
		case GDK_KEY_Right: case GDK_KEY_KP_Right:
			x += 1;
			break;
		case GDK_KEY_Up: case GDK_KEY_KP_Up:
			y -= 1;
			break;
		case GDK_KEY_Down: case GDK_KEY_KP_Down:
			y += 1;
			break;
		default:
			stop_signal = FALSE;
			break;
		}

	if (x != 0 || y!= 0)
		{
		if (event->state & GDK_SHIFT_MASK)
			{
			x *= 3;
			y *= 3;
			}

		keyboard_scroll_calc(&x, &y, event);
		image_scroll(imd, x, y);
		}

	if (stop_signal) return stop_signal;

	if (event->state & GDK_CONTROL_MASK)
		{
		stop_signal = TRUE;
		switch (event->keyval)
			{
			case '1':
			case '2':
			case '3':
			case '4':
			case '5':
			case '6':
			case '7':
			case '8':
			case '9':
			case '0':
				break;
			case 'C': case 'c':
				file_util_copy(image_get_fd(imd), NULL, NULL, imd->widget);
				break;
			case 'M': case 'm':
				file_util_move(image_get_fd(imd), NULL, NULL, imd->widget);
				break;
			case 'R': case 'r':
				file_util_rename(image_get_fd(imd), NULL, imd->widget);
				break;
			case 'D': case 'd':
				file_util_delete(image_get_fd(imd), NULL, imd->widget);
				break;
			case 'W': case 'w':
				view_window_close(vw);
				break;
			default:
				stop_signal = FALSE;
				break;
			}
		}
	else if (event->state & GDK_SHIFT_MASK)
		{
		stop_signal = TRUE;
		switch (event->keyval)
			{
			case 'R': case 'r':
				image_alter_orientation(imd, ALTER_ROTATE_180);
				break;
			case 'M': case 'm':
				image_alter_orientation(imd, ALTER_MIRROR);
				break;
			case 'F': case 'f':
				image_alter_orientation(imd, ALTER_FLIP);
				break;
			case 'G': case 'g':
				image_set_desaturate(imd, !image_get_desaturate(imd));
				break;
			case 'P': case 'p':
				{
				FileData *fd;

				view_fullscreen_toggle(vw, TRUE);
				imd = view_window_active_image(vw);
				fd = image_get_fd(imd);
				print_window_new(fd,
						 fd ? g_list_append(NULL, file_data_ref(fd)) : NULL,
						 filelist_copy(vw->list), vw->window);
				}
				break;
			default:
				stop_signal = FALSE;
				break;
			}
		}
	else
		{
		stop_signal = TRUE;
		switch (event->keyval)
			{
			case GDK_KEY_Page_Up: case GDK_KEY_KP_Page_Up:
			case GDK_KEY_BackSpace:
			case 'B': case 'b':
				view_step_prev(vw);
				break;
			case GDK_KEY_Page_Down: case GDK_KEY_KP_Page_Down:
			case GDK_KEY_space:
			case 'N': case 'n':
				view_step_next(vw);
				break;
			case GDK_KEY_Home: case GDK_KEY_KP_Home:
				view_step_to_end(vw, FALSE);
				break;
			case GDK_KEY_End: case GDK_KEY_KP_End:
				view_step_to_end(vw, TRUE);
				break;
			case '+': case '=': case GDK_KEY_KP_Add:
				image_zoom_adjust(imd, get_zoom_increment());
				break;
			case '-': case GDK_KEY_KP_Subtract:
				image_zoom_adjust(imd, -get_zoom_increment());
				break;
			case 'X': case 'x': case GDK_KEY_KP_Multiply:
				image_zoom_set(imd, 0.0);
				break;
			case 'Z': case 'z': case GDK_KEY_KP_Divide: case '1':
				image_zoom_set(imd, 1.0);
				break;
			case '2':
				image_zoom_set(imd, 2.0);
				break;
			case '3':
				image_zoom_set(imd, 3.0);
				break;
			case '4':
				image_zoom_set(imd, 4.0);
				break;
			case '7':
				image_zoom_set(imd, -4.0);
				break;
			case '8':
				image_zoom_set(imd, -3.0);
				break;
			case '9':
				image_zoom_set(imd, -2.0);
				break;
			case 'W': case 'w':
				image_zoom_set_fill_geometry(imd, FALSE);
				break;
			case 'H': case 'h':
				image_zoom_set_fill_geometry(imd, TRUE);
				break;
			case 'R': case 'r':
				image_reload(imd);
				break;
			case 'S': case 's':
				if (vw->ss)
					{
					view_slideshow_stop(vw);
					}
				else
					{
					view_slideshow_start(vw);
					}
				break;
			case 'P': case 'p':
				slideshow_pause_toggle(vw->ss);
				break;
			case 'F': case 'f':
			case 'V': case 'v':
			case GDK_KEY_F11:
				view_fullscreen_toggle(vw, FALSE);
				break;
			case 'I': case 'i':
				view_overlay_toggle(vw);
				break;
			case ']':
				image_alter_orientation(imd, ALTER_ROTATE_90);
				break;
			case '[':
				image_alter_orientation(imd, ALTER_ROTATE_90_CC);
				break;
			case GDK_KEY_Delete: case GDK_KEY_KP_Delete:
				if (options->file_ops.enable_delete_key)
					{
					file_util_delete(image_get_fd(imd), NULL, imd->widget);
					}
				break;
			case GDK_KEY_Escape:
				if (vw->fs)
					{
					view_fullscreen_toggle(vw, TRUE);
					}
				else
					{
					view_window_close(vw);
					}
				break;
			case GDK_KEY_Menu:
			case GDK_KEY_F10:
				menu = view_popup_menu(vw);
				gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
					       view_window_menu_pos_cb, vw, 0, GDK_CURRENT_TIME);
				break;
			default:
				stop_signal = FALSE;
				break;
			}
		}

	return stop_signal;
}
Exemplo n.º 4
0
static void view_zoom_out_cb(GtkWidget *widget, gpointer data)
{
	ViewWindow *vw = data;

	image_zoom_adjust(view_window_active_image(vw), -get_zoom_increment());
}