diff src/img-view.c @ 1:b3e0e515fabf

Initial revision
author gqview
date Mon, 03 Apr 2000 18:24:05 +0000
parents
children c0e337a01cb7
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/img-view.c	Mon Apr 03 18:24:05 2000 +0000
@@ -0,0 +1,300 @@
+/*
+ * GQview image viewer
+ * (C)1999 John Ellis
+ *
+ * Author: John Ellis
+ *
+ */
+
+#include "gqview.h"
+#include "image.h"
+#include <gdk/gdkkeysyms.h> /* for keyboard values */
+
+/*
+ *-----------------------------------------------------------------------------
+ * view window keyboard
+ *-----------------------------------------------------------------------------
+ */
+
+static gint view_window_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer data)
+{
+	ImageWindow *imd = data;
+	gint stop_signal = FALSE;
+	gint x = 0;
+	gint y = 0;
+
+	switch (event->keyval)
+		{
+		case GDK_Left:
+			x -= 1;
+			stop_signal = TRUE;
+			break;
+		case GDK_Right:
+			x += 1;
+			stop_signal = TRUE;
+			break;
+		case GDK_Up:
+			y -= 1;
+			stop_signal = TRUE;
+			break;
+		case GDK_Down:
+			y += 1;
+			stop_signal = TRUE;
+			break;
+		case '+': case '=':
+			image_area_adjust_zoom(imd, 1);
+			break;
+		case '-':
+			image_area_adjust_zoom(imd, -1);
+			break;
+		case 'x':
+			image_area_set_zoom(imd, 0);
+			break;
+		case 'z':
+			image_area_set_zoom(imd, 1);
+			break;
+		case GDK_Delete:
+			file_util_delete(image_area_get_path(imd), NULL);
+			stop_signal = TRUE;
+			break;
+		case GDK_Escape:
+			gtk_widget_destroy(imd->top_window);
+			stop_signal = TRUE;
+			break;
+		}
+
+	if (event->state & GDK_CONTROL_MASK)
+		{
+		gint n = -1;
+		switch (event->keyval)
+			{
+			case '1':
+				n = 0;
+				break;
+			case '2':
+				n = 1;
+				break;
+			case '3':
+				n = 2;
+				break;
+			case '4':
+				n = 3;
+				break;
+			case '5':
+				n = 4;
+				break;
+			case '6':
+				n = 5;
+				break;
+			case '7':
+				n = 6;
+				break;
+			case '8':
+				n = 7;
+				break;
+			}
+		if (n != -1)
+			{
+			start_editor_from_file(n, image_area_get_path(imd));
+			}
+		}
+
+	if (event->state & GDK_SHIFT_MASK)
+		{
+		x *= 3;
+		y *= 3;
+		}
+
+	if (x != 0 || y!= 0)
+		{
+		keyboard_scroll_calc(&x, &y, event);
+		image_area_scroll(imd, x, y);
+		}
+
+	return stop_signal;
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * view window main routines
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void button3_cb(ImageWindow *imd, GdkEventButton *bevent, gpointer data)
+{
+	gtk_object_set_data(GTK_OBJECT(menu_window_view), "view_active", imd);
+	gtk_menu_popup (GTK_MENU(menu_window_view), NULL, NULL, NULL, NULL,
+		bevent->button, bevent->time);
+}
+
+static gint view_window_delete_cb(GtkWidget *w, GdkEventAny *event, gpointer data)
+{
+	gtk_widget_destroy(w);
+	return TRUE;
+}
+
+static gint view_window_destroy_cb(GtkWidget *w, GdkEventAny *event, gpointer data)
+{
+	ImageWindow *imd = data;
+	image_area_free(imd);
+	return FALSE;
+}
+
+void view_window_new(gchar *path)
+{
+	GtkWidget *window;
+	ImageWindow *imd;
+	GtkAllocation req_size;
+	gint w, h;
+	if (!path) return;
+
+	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+	gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, FALSE);
+	gtk_window_set_title (GTK_WINDOW (window), "GQview");
+        gtk_window_set_wmclass(GTK_WINDOW (window), "view", "GQview");
+        gtk_container_border_width (GTK_CONTAINER (window), 0);
+
+	imd = image_area_new(NULL);
+	image_area_set_topwindow(imd, window, NULL, TRUE);
+	gtk_container_add(GTK_CONTAINER(window), imd->eventbox);
+	gtk_viewport_set_shadow_type (GTK_VIEWPORT(imd->viewport), GTK_SHADOW_NONE);
+        gtk_container_border_width (GTK_CONTAINER (imd->viewport), 0);
+	gtk_widget_show_all(imd->eventbox);
+
+	image_dnd_init(imd);
+
+	image_area_set_button(imd, 3, button3_cb, NULL);
+
+	gtk_signal_connect(GTK_OBJECT(window), "delete_event", (GtkSignalFunc) view_window_delete_cb, NULL);
+	gtk_signal_connect(GTK_OBJECT(window), "destroy_event", (GtkSignalFunc) view_window_destroy_cb, imd);
+	gtk_signal_connect(GTK_OBJECT(window), "key_press_event", GTK_SIGNAL_FUNC(view_window_key_press_cb), imd);
+
+	image_area_set_image(imd, path, get_default_zoom(NULL));
+
+	w = imd->width;
+	h = imd->height;
+	if (limit_window_size)
+		{
+		gint mw = gdk_screen_width() * max_window_size / 100;
+		gint mh = gdk_screen_height() * max_window_size / 100;
+
+		if (w > mw) w = mw;
+		if (h > mh) h = mh;
+		}
+
+	gtk_window_set_default_size (GTK_WINDOW(window), w, h);
+	req_size.x = req_size.y = 0;
+	req_size.width = w;
+	req_size.height = h;
+	gtk_widget_size_allocate(GTK_WIDGET(window), &req_size);
+
+	gtk_widget_set_usize(imd->eventbox, w, h);
+
+	gtk_widget_show(window);
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * view window menu routines and callbacks
+ *-----------------------------------------------------------------------------
+ */ 
+
+static ImageWindow *view_window_get_active()
+{
+	return gtk_object_get_data(GTK_OBJECT(menu_window_view), "view_active");
+}
+
+void view_window_active_edit(gint n)
+{
+	ImageWindow *imd = view_window_get_active();
+	if (!imd) return;
+	start_editor_from_file(n, image_area_get_path(imd));
+}
+
+static void view_zoom_in_cb(GtkWidget *widget, gpointer data)
+{
+	ImageWindow *imd = view_window_get_active();
+	if (!imd) return;
+	image_area_adjust_zoom(imd, 1);
+}
+
+static void view_zoom_out_cb(GtkWidget *widget, gpointer data)
+{
+	ImageWindow *imd = view_window_get_active();
+	if (!imd) return;
+	image_area_adjust_zoom(imd, -1);
+}
+
+static void view_zoom_1_1_cb(GtkWidget *widget, gpointer data)
+{
+	ImageWindow *imd = view_window_get_active();
+	if (!imd) return;
+	image_area_set_zoom(imd, 1);
+}
+
+static void view_zoom_fit_cb(GtkWidget *widget, gpointer data)
+{
+	ImageWindow *imd = view_window_get_active();
+	if (!imd) return;
+	image_area_set_zoom(imd, 0);
+}
+
+static void view_copy_cb(GtkWidget *widget, gpointer data)
+{
+	ImageWindow *imd = view_window_get_active();
+	if (!imd) return;
+	file_util_copy(image_area_get_path(imd), NULL, current_path);
+}
+
+static void view_move_cb(GtkWidget *widget, gpointer data)
+{
+	ImageWindow *imd = view_window_get_active();
+	if (!imd) return;
+	file_util_move(image_area_get_path(imd), NULL, current_path);
+}
+
+static void view_rename_cb(GtkWidget *widget, gpointer data)
+{
+	ImageWindow *imd = view_window_get_active();
+	if (!imd) return;
+	file_util_rename(image_area_get_path(imd), NULL);
+}
+
+static void view_delete_cb(GtkWidget *widget, gpointer data)
+{
+	ImageWindow *imd = view_window_get_active();
+	if (!imd) return;
+	file_util_delete(image_area_get_path(imd), NULL);
+}
+
+static void view_close_cb(GtkWidget *widget, gpointer data)
+{
+	ImageWindow *imd = view_window_get_active();
+	if (!imd) return;
+	gtk_widget_destroy(imd->top_window);
+}
+
+void create_menu_view_popup()
+{
+	menu_window_view = gtk_menu_new();
+	add_menu_popup_item(menu_window_view, _("Zoom in"), view_zoom_in_cb, NULL);
+	add_menu_popup_item(menu_window_view, _("Zoom out"), view_zoom_out_cb, NULL);
+	add_menu_popup_item(menu_window_view, _("Zoom 1:1"), view_zoom_1_1_cb, NULL);
+	add_menu_popup_item(menu_window_view, _("Fit image to window"), view_zoom_fit_cb, NULL);
+	add_menu_divider(menu_window_view);
+
+	menu_window_view_edit = gtk_menu_item_new_with_label(_("Edit"));
+	gtk_menu_append(GTK_MENU(menu_window_view), menu_window_view_edit);
+	gtk_widget_show(menu_window_view_edit);
+
+	add_menu_divider(menu_window_view);
+	add_menu_popup_item(menu_window_view, _("Copy..."), view_copy_cb, NULL);
+	add_menu_popup_item(menu_window_view, _("Move..."), view_move_cb, NULL);
+	add_menu_popup_item(menu_window_view, _("Rename..."), view_rename_cb, NULL);
+	add_menu_popup_item(menu_window_view, _("Delete..."), view_delete_cb, NULL);
+
+	add_menu_divider(menu_window_view);
+	add_menu_popup_item(menu_window_view, _("Close window"), view_close_cb, NULL);
+}
+
+