Commit 2557c517 authored by BST 1999 Andy Thomas's avatar BST 1999 Andy Thomas Committed by Andy Thomas

app/commands.c app/commands.h app/disp_callbacks.c app/gdisplay.c

Thu Aug 12 21:38:53 BST 1999 Andy Thomas <alt@gimp.org>

	* app/commands.c
	* app/commands.h
	* app/disp_callbacks.c
	* app/gdisplay.c
	* app/gdisplay.h
	* app/info_dialog.c
	* app/info_dialog.h
	* app/info_window.c
	* app/info_window.h
	* app/menus.c
	* app/scale.c
	* app/scroll.c
	* app/scroll.h
	* app/nav_window.c (new)
	* app/nav_window.h (new)
	* pixmap/dropper.xpm (new)

	New "navigator" image (accessed via <Image>/Window Nav..). This gives
	an outline of the location of the current view on an image. Eg if your
	image window is only showing part of an image then the Window Navigation	window will outline the area viewed. You can "drag" the outlined
	square around the viewport and the main image will scroll. Additional
	a single click outside the square will center the image at that
	location.

	Also started to add additional information to a new page inside the
	Window information dialog (currently only pixel value is shown).

	Both these features are currently work in progress and unfinished.
	In particular the Navigator does not keep in step with changes
	to the basic image (however it does keep in step with image size changes	and if you modify the size of the image viewing window). It also
	does not display the transparent areas of images very nicely.
parent cac72d12
Thu Aug 12 23:15:53 BST 1999 Andy Thomas <alt@gimp.org>
* app/commands.c
* app/commands.h
* app/disp_callbacks.c
* app/gdisplay.c
* app/gdisplay.h
* app/info_dialog.c
* app/info_dialog.h
* app/info_window.c
* app/info_window.h
* app/menus.c
* app/scale.c
* app/scroll.c
* app/scroll.h
* app/nav_window.c (new)
* app/nav_window.h (new)
* pixmap/dropper.xpm (new)
New "navigator" image (accessed via <Image>/Window Nav..). This gives
an outline of the location of the current view on an image. Eg if your
image window is only showing part of an image then the Window Navigation window will outline the area viewed. You can "drag" the outlined
square around the viewport and the main image will scroll. Additional
a single click outside the square will center the image at that
location.
Also started to add additional information to a new page inside the
Window information dialog (currently only pixel value is shown).
Both these features are currently work in progress and unfinished.
In particular the Navigator does not keep in step with changes
to the basic image (however it does keep in step with image size changes and if you modify the size of the image viewing window). It also
does not display the transparent areas of images very nicely.
1999-08-13 Tor Lillqvist <tml@iki.fi>
* app/makefile.{cygwin,msc} (gimp_OBJECTS): Add newest files.
......
......@@ -283,6 +283,8 @@ gimp_SOURCES = \
module_db.h \
move.c \
move.h \
nav_window.c \
nav_window.h \
ops_buttons.c \
ops_buttons.h \
palette.c \
......
......@@ -39,6 +39,7 @@
#include "gradient.h"
#include "image_render.h"
#include "info_window.h"
#include "nav_window.h"
#include "interface.h"
#include "invert.h"
#include "lc_dialog.h"
......@@ -535,6 +536,19 @@ view_window_info_cmd_callback (GtkWidget *widget,
info_dialog_popup (gdisp->window_info_dialog);
}
void
view_window_nav_cmd_callback (GtkWidget *widget,
gpointer client_data)
{
GDisplay * gdisp;
return_if_no_display (gdisp);
if (! gdisp->window_nav_dialog)
gdisp->window_nav_dialog = nav_window_create ((void *) gdisp);
info_dialog_popup (gdisp->window_nav_dialog);
}
void
view_toggle_selection_cmd_callback (GtkWidget *widget,
gpointer client_data)
......
......@@ -51,6 +51,7 @@ void view_zoom_1_4_callback (GtkWidget *, gpointer);
void view_zoom_1_8_callback (GtkWidget *, gpointer);
void view_zoom_1_16_callback (GtkWidget *, gpointer);
void view_window_info_cmd_callback (GtkWidget *, gpointer);
void view_window_nav_cmd_callback (GtkWidget *, gpointer);
void view_toggle_selection_cmd_callback (GtkWidget *, gpointer);
void view_toggle_rulers_cmd_callback (GtkWidget *, gpointer);
void view_toggle_guides_cmd_callback (GtkWidget *, gpointer);
......
......@@ -39,6 +39,7 @@
#include "gradient.h"
#include "image_render.h"
#include "info_window.h"
#include "nav_window.h"
#include "interface.h"
#include "invert.h"
#include "lc_dialog.h"
......@@ -535,6 +536,19 @@ view_window_info_cmd_callback (GtkWidget *widget,
info_dialog_popup (gdisp->window_info_dialog);
}
void
view_window_nav_cmd_callback (GtkWidget *widget,
gpointer client_data)
{
GDisplay * gdisp;
return_if_no_display (gdisp);
if (! gdisp->window_nav_dialog)
gdisp->window_nav_dialog = nav_window_create ((void *) gdisp);
info_dialog_popup (gdisp->window_nav_dialog);
}
void
view_toggle_selection_cmd_callback (GtkWidget *widget,
gpointer client_data)
......
......@@ -51,6 +51,7 @@ void view_zoom_1_4_callback (GtkWidget *, gpointer);
void view_zoom_1_8_callback (GtkWidget *, gpointer);
void view_zoom_1_16_callback (GtkWidget *, gpointer);
void view_window_info_cmd_callback (GtkWidget *, gpointer);
void view_window_nav_cmd_callback (GtkWidget *, gpointer);
void view_toggle_selection_cmd_callback (GtkWidget *, gpointer);
void view_toggle_rulers_cmd_callback (GtkWidget *, gpointer);
void view_toggle_guides_cmd_callback (GtkWidget *, gpointer);
......
......@@ -35,6 +35,7 @@
#include "interface.h"
#include "lc_dialog.h"
#include "menus.h"
#include "nav_window.h"
#include "plug_in.h"
#include "qmask.h"
#include "scale.h"
......@@ -97,6 +98,7 @@ gdisplay_new (GimpImage *gimage,
gdisp->dot_for_dot = TRUE;
gdisp->gimage = gimage;
gdisp->window_info_dialog = NULL;
gdisp->window_nav_dialog = NULL;
gdisp->depth = g_visual->depth;
gdisp->select = NULL;
gdisp->ID = display_num++;
......@@ -329,6 +331,10 @@ gdisplay_delete (GDisplay *gdisp)
if (gdisp->window_info_dialog)
info_window_free (gdisp->window_info_dialog);
/* Remove navigation dialog if we have one */
if(gdisp->window_nav_dialog)
nav_window_free(gdisp->window_nav_dialog);
/* set the active display to NULL if it was this display */
context = gimp_context_get_user ();
if (gimp_context_get_display (context) == gdisp)
......@@ -1010,7 +1016,7 @@ gdisplay_update_cursor (GDisplay *gdisp, int x, int y)
}
}
gdisplay_untransform_coords(gdisp, x, y, &t_x, &t_y, TRUE, TRUE);
gdisplay_untransform_coords(gdisp, x, y, &t_x, &t_y, FALSE, FALSE);
active_drawable = gimp_image_active_drawable (gdisp->gimage);
......@@ -1022,6 +1028,10 @@ gdisplay_update_cursor (GDisplay *gdisp, int x, int y)
t_y >= active_drawable->height)
{
gtk_label_set (GTK_LABEL (gdisp->cursor_label), "");
info_window_update_RGB(gdisp->window_info_dialog,
gdisp,
-1,
-1);
}
else
{
......@@ -1042,6 +1052,10 @@ gdisplay_update_cursor (GDisplay *gdisp, int x, int y)
(double) t_y * unit_factor / gdisp->gimage->yresolution);
}
gtk_label_set (GTK_LABEL (gdisp->cursor_label), buffer);
info_window_update_RGB(gdisp->window_info_dialog,
gdisp,
t_x,
t_y);
}
}
......@@ -1051,6 +1065,7 @@ gdisplay_update_cursor (GDisplay *gdisp, int x, int y)
if (new_cursor)
gdisplay_flush (gdisp);
}
......
......@@ -111,6 +111,7 @@ struct _GDisplay
guint progressid; /* id of statusbar message for progress */
InfoDialog *window_info_dialog; /* dialog box for image information */
InfoDialog *window_nav_dialog; /* dialog box for image navigation */
int color_type; /* is this an RGB or GRAY colormap */
......
......@@ -139,15 +139,14 @@ info_dialog_delete_callback (GtkWidget *w,
return TRUE;
}
/* public functions */
InfoDialog *
info_dialog_new (char *title)
static InfoDialog *
info_dialog_new_extended (char *title,gboolean inNotebook)
{
InfoDialog *idialog;
GtkWidget *shell;
GtkWidget *vbox;
GtkWidget *info_table;
GtkWidget *info_notebook;
idialog = g_new (InfoDialog, 1);
idialog->field_list = NULL;
......@@ -167,11 +166,28 @@ info_dialog_new (char *title)
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (shell)->vbox), vbox, TRUE, TRUE, 0);
info_table = gtk_table_new (2, 0, FALSE);
gtk_box_pack_start (GTK_BOX (vbox), info_table, TRUE, TRUE, 0);
if(inNotebook)
{
info_notebook = gtk_notebook_new();
gtk_notebook_append_page(GTK_NOTEBOOK(info_notebook),
info_table,
gtk_label_new (_("General")));
gtk_box_pack_start (GTK_BOX (vbox), info_notebook, TRUE, TRUE, 0);
}
else
{
info_notebook = NULL;
gtk_box_pack_start (GTK_BOX (vbox), info_table, TRUE, TRUE, 0);
}
idialog->shell = shell;
idialog->vbox = vbox;
idialog->info_table = info_table;
idialog->info_notebook = info_notebook;
if(inNotebook)
gtk_widget_show (idialog->info_notebook);
gtk_widget_show (idialog->info_table);
gtk_widget_show (idialog->vbox);
......@@ -179,6 +195,20 @@ info_dialog_new (char *title)
return idialog;
}
/* public functions */
InfoDialog *
info_dialog_notebook_new (char *title)
{
return info_dialog_new_extended(title,TRUE);
}
InfoDialog *
info_dialog_new (char *title)
{
return info_dialog_new_extended(title,FALSE);
}
void
info_dialog_free (InfoDialog *idialog)
{
......
......@@ -50,6 +50,7 @@ struct _InfoDialog
GtkWidget *shell;
GtkWidget *vbox;
GtkWidget *info_table;
GtkWidget *info_notebook;
GSList *field_list;
int nfields;
......@@ -60,6 +61,7 @@ struct _InfoDialog
/* Info Dialog functions */
InfoDialog *info_dialog_new (gchar *title);
InfoDialog *info_dialog_notebook_new (gchar *title);
void info_dialog_free (InfoDialog *idialog);
void info_dialog_popup (InfoDialog *idialog);
......
......@@ -15,6 +15,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "appenv.h"
#include "actionarea.h"
#include "colormaps.h"
......@@ -23,9 +24,12 @@
#include "gdisplay.h"
#include "gximage.h"
#include "interface.h"
#include "scroll.h"
#include "libgimp/gimpintl.h"
#include "libgimp/gimpunit.h"
#include "pixmaps/dropper.xpm"
#define MAX_BUF 256
......@@ -40,6 +44,12 @@ struct _InfoWinData
char shades_str[MAX_BUF];
char resolution_str[MAX_BUF];
char unit_str[MAX_BUF];
void *gdisp_ptr; /* I'a not happy 'bout this one */
GtkWidget *labelBvalue;
GtkWidget *labelGvalue;
GtkWidget *labelRvalue;
GtkWidget *labelAvalue;
gboolean showingPreview;
};
/* The different classes of visuals */
......@@ -104,6 +114,142 @@ info_window_close_callback (GtkWidget *widget,
info_dialog_popdown ((InfoDialog *) client_data);
}
static void
info_window_page_switch (GtkWidget *widget,
GtkNotebookPage *page,
gint page_num)
{
InfoDialog *info_win;
InfoWinData *iwd;
info_win = (InfoDialog *)gtk_object_get_user_data(GTK_OBJECT (widget));
iwd = (InfoWinData *)info_win->user_data;
/* Only deal with the second page */
if(page_num != 1)
{
iwd->showingPreview = FALSE;
return;
}
iwd->showingPreview = TRUE;
}
static void
info_window_image_preview_book(InfoDialog *info_win)
{
GtkWidget *hbox1;
GtkWidget *frame;
GtkWidget *alignment;
GtkWidget *table2;
GtkWidget *labelBvalue;
GtkWidget *labelGvalue;
GtkWidget *labelRvalue;
GtkWidget *labelAvalue;
GtkWidget *labelB;
GtkWidget *labelG;
GtkWidget *labelR;
GtkWidget *labelA;
GtkWidget *pixmapwid;
GdkPixmap *pixmap;
GdkBitmap *mask;
GtkStyle *style;
InfoWinData *iwd;
iwd = (InfoWinData *)info_win->user_data;
hbox1 = gtk_hbox_new (FALSE, 0);
gtk_widget_show (hbox1);
alignment = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
gtk_widget_show (alignment);
frame = gtk_frame_new(NULL);
gtk_widget_show (frame);
gtk_box_pack_start (GTK_BOX (hbox1), alignment, TRUE, TRUE, 0);
table2 = gtk_table_new (5, 2, TRUE);
gtk_container_border_width (GTK_CONTAINER (table2), 2);
gtk_widget_show (table2);
gtk_container_add (GTK_CONTAINER (frame), table2);
gtk_container_add (GTK_CONTAINER (alignment), frame);
labelAvalue = gtk_label_new ("N/A");
gtk_widget_show (labelAvalue);
gtk_table_attach (GTK_TABLE (table2), labelAvalue, 1, 2, 4, 5,
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
labelBvalue = gtk_label_new ("N/A");
gtk_widget_show (labelBvalue);
gtk_table_attach (GTK_TABLE (table2), labelBvalue, 1, 2, 3, 4,
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
labelGvalue = gtk_label_new ("N/A");
gtk_widget_show (labelGvalue);
gtk_table_attach (GTK_TABLE (table2), labelGvalue, 1, 2, 2, 3,
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
labelRvalue = gtk_label_new ("N/A");
gtk_widget_show (labelRvalue);
gtk_table_attach (GTK_TABLE (table2), labelRvalue, 1, 2, 1, 2,
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
labelA = gtk_label_new ("A:");
gtk_widget_show (labelA);
gtk_table_attach (GTK_TABLE (table2), labelA, 0, 1, 4, 5,
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
labelB = gtk_label_new ("B:");
gtk_widget_show (labelB);
gtk_table_attach (GTK_TABLE (table2), labelB, 0, 1, 3, 4,
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
labelG = gtk_label_new ("G:");
gtk_widget_show (labelG);
gtk_table_attach (GTK_TABLE (table2), labelG, 0, 1, 2, 3,
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
labelR = gtk_label_new ("R:");
gtk_widget_show (labelR);
gtk_table_attach (GTK_TABLE (table2), labelR, 0, 1, 1, 2,
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
gtk_widget_realize(info_win->shell);
style = gtk_widget_get_style (info_win->shell);
pixmap = gdk_pixmap_create_from_xpm_d (info_win->shell->window, &mask,
&style->bg[GTK_STATE_NORMAL],
dropper_xpm);
pixmapwid = gtk_pixmap_new (pixmap, mask);
gtk_misc_set_alignment (GTK_MISC (pixmapwid), 0.2, 0.2);
gtk_table_attach (GTK_TABLE (table2), pixmapwid, 0, 2, 0, 1,
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
gtk_widget_show (pixmapwid);
gtk_notebook_append_page(GTK_NOTEBOOK(info_win->info_notebook),
hbox1,
gtk_label_new (_("Extended")));
/* Set back to first page */
gtk_notebook_set_page(GTK_NOTEBOOK(info_win->info_notebook),0);
gtk_object_set_user_data(GTK_OBJECT (info_win->info_notebook),
(gpointer)info_win);
gtk_signal_connect (GTK_OBJECT (info_win->info_notebook), "switch_page",
GTK_SIGNAL_FUNC (info_window_page_switch), NULL);
iwd->labelBvalue = labelBvalue;
iwd->labelGvalue = labelGvalue;
iwd->labelRvalue = labelRvalue;
iwd->labelAvalue = labelAvalue;
}
/* displays information:
* image name
* image width, height
......@@ -136,7 +282,7 @@ info_window_create (void *gdisp_ptr)
/* create the info dialog */
title_buf = g_strdup_printf (_("%s: Window Info"), title);
info_win = info_dialog_new (title_buf);
info_win = info_dialog_notebook_new (title_buf);
g_free (title_buf);
iwd = (InfoWinData *) g_malloc (sizeof (InfoWinData));
......@@ -149,6 +295,7 @@ info_window_create (void *gdisp_ptr)
iwd->visual_class_str[0] = '\0';
iwd->visual_depth_str[0] = '\0';
iwd->shades_str[0] = '\0';
iwd->showingPreview = FALSE;
/* add the information fields */
info_dialog_add_label (info_win, _("Dimensions (w x h):"),
......@@ -178,6 +325,9 @@ info_window_create (void *gdisp_ptr)
/* update the fields */
info_window_update (info_win, gdisp_ptr);
/* Add extra tabs */
info_window_image_preview_book(info_win);
/* Create the action area */
action_items[0].user_data = info_win;
build_action_area (GTK_DIALOG (info_win->shell), action_items, 1, 0);
......@@ -185,6 +335,61 @@ info_window_create (void *gdisp_ptr)
return info_win;
}
void
info_window_update_RGB (InfoDialog *info_win,
void *gdisp_ptr,
gdouble tx,
gdouble ty)
{
GDisplay *gdisp;
InfoWinData *iwd;
char buff[5];
guchar *color;
gint has_alpha;
gint sample_type;
if(!info_win)
return;
gdisp = (GDisplay *) gdisp_ptr;
iwd = (InfoWinData *) info_win->user_data;
if(!iwd || iwd->showingPreview == FALSE)
return;
/* gimage_active_drawable (gdisp->gimage) */
if (!(color = gimp_image_get_color_at(gdisp->gimage, tx, ty))
|| (tx < 0.0 && ty < 0.0))
{
g_snprintf(buff,5,"%4s","N/A");
gtk_label_set_text(GTK_LABEL(iwd->labelBvalue),buff);
gtk_label_set_text(GTK_LABEL(iwd->labelGvalue),buff);
gtk_label_set_text(GTK_LABEL(iwd->labelRvalue),buff);
gtk_label_set_text(GTK_LABEL(iwd->labelAvalue),buff);
return;
}
g_snprintf(buff,5,"%4d",(gint)color[BLUE_PIX]);
gtk_label_set_text(GTK_LABEL(iwd->labelBvalue),buff);
g_snprintf(buff,5,"%4d",(gint)color[GREEN_PIX]);
gtk_label_set_text(GTK_LABEL(iwd->labelGvalue),buff);
g_snprintf(buff,5,"%4d",(gint)color[RED_PIX]);
gtk_label_set_text(GTK_LABEL(iwd->labelRvalue),buff);
sample_type = gimp_image_composite_type (gdisp->gimage);
has_alpha = TYPE_HAS_ALPHA (sample_type);
if(has_alpha)
g_snprintf(buff,5,"%4d",(gint)color[ALPHA_PIX]);
else
g_snprintf(buff,5,"%4s","N/A");
gtk_label_set_text(GTK_LABEL(iwd->labelAvalue),buff);
g_free(color);
}
void
info_window_free (InfoDialog *info_win)
{
......
......@@ -23,6 +23,9 @@
InfoDialog *info_window_create (void *);
void info_window_free (InfoDialog *);
void info_window_update (InfoDialog *, void *);
void info_window_update_RGB (InfoDialog *,
void *,
gdouble,
gdouble);
#endif /* __INFO_WINDOW_H__ */
......@@ -26,6 +26,7 @@
#include "general.h"
#include "gimpcontext.h"
#include "gimprc.h"
#include "info_window.h"
#include "interface.h"
#include "layer_select.h"
#include "move.h"
......@@ -199,6 +200,10 @@ gdisplay_canvas_events (GtkWidget *canvas,
case GDK_LEAVE_NOTIFY:
gdisplay_update_cursor (gdisp, 0, 0);
gtk_label_set_text (GTK_LABEL (gdisp->cursor_label), "");
info_window_update_RGB(gdisp->window_info_dialog,
gdisp,
-1,
-1);
case GDK_PROXIMITY_OUT:
gdisp->proximity = FALSE;
......
......@@ -26,6 +26,7 @@
#include "general.h"
#include "gimpcontext.h"
#include "gimprc.h"
#include "info_window.h"
#include "interface.h"
#include "layer_select.h"
#include "move.h"
......@@ -199,6 +200,10 @@ gdisplay_canvas_events (GtkWidget *canvas,
case GDK_LEAVE_NOTIFY:
gdisplay_update_cursor (gdisp, 0, 0);
gtk_label_set_text (GTK_LABEL (gdisp->cursor_label), "");
info_window_update_RGB(gdisp->window_info_dialog,
gdisp,
-1,
-1);
case GDK_PROXIMITY_OUT:
gdisp->proximity = FALSE;
......
......@@ -21,7 +21,7 @@
#include "gdisplay.h"
#include "gdisplay_ops.h"
#include "gimprc.h"
#include "info_window.h"
#include "nav_window.h"
#include "scale.h"
#include "tools.h"
......@@ -257,4 +257,7 @@ setup_scale (GDisplay *gdisp)
gtk_widget_draw (GTK_WIDGET (hruler), NULL);
gtk_widget_draw (GTK_WIDGET (vruler), NULL);
if (gdisp->window_nav_dialog)
nav_window_update_window_marker(gdisp->window_nav_dialog);
}
......@@ -21,6 +21,7 @@
#include "scroll.h"
#include "cursorutil.h"
#include "tools.h"
#include "nav_window.h"
/* This is the delay before dithering begins
......@@ -28,9 +29,6 @@
*/
#define DITHER_DELAY 250 /* milliseconds */
/* Locally defined functions */
static int scroll_display (GDisplay *, int, int);
/* STATIC variables */
/* These are the values of the initial pointer grab */
static int startx, starty;
......@@ -127,10 +125,10 @@ scroll_to_pointer_position (GDisplay *gdisp,
}
static int
int
scroll_display (GDisplay *gdisp,
int x_offset,
int y_offset)
gint x_offset,
gint y_offset)
{
int old_x, old_y;
int src_x, src_y;
......@@ -201,6 +199,8 @@ scroll_display (GDisplay *gdisp,
if (x_offset || y_offset)
gdisplays_flush ();
if (gdisp->window_nav_dialog)
nav_window_update_window_marker(gdisp->window_nav_dialog);
/* Make sure graphics expose events are processed before scrolling
* again */
......
......@@ -35,4 +35,8 @@ void end_grab_and_scroll (GDisplay *, GdkEventButton *);
void grab_and_scroll (GDisplay *, GdkEventMotion *);
void scroll_to_pointer_position (GDisplay *, GdkEventMotion *);
/* generic scroll-by-offset function */
gint scroll_display (GDisplay *, gint, gint);
#endif /* __SCROLL_H__ */
......@@ -35,6 +35,7 @@
#include "interface.h"
#include "lc_dialog.h"
#include "menus.h"
#include "nav_window.h"
#include "plug_in.h"
#include "qmask.h"
#include "scale.h"
......@@ -97,6 +98,7 @@ gdisplay_new (GimpImage *gimage,
gdisp->dot_for_dot = TRUE;
gdisp->gimage = gimage;
gdisp->window_info_dialog = NULL;
gdisp->window_nav_dialog = NULL;
gdisp->depth = g_visual->depth;
gdisp->select = NULL;
gdisp->ID = display_num++;
......@@ -329,6 +331,10 @@ gdisplay_delete (GDisplay *gdisp)
if (gdisp->window_info_dialog)
info_window_free (gdisp->window_info_dialog);
/* Remove navigation dialog if we have one */
if(gdisp->window_nav_dialog)
nav_window_free(gdisp->window_nav_dialog);
/* set the active display to NULL if it was this display */
context = gimp_context_get_user ();
if (gimp_context_get_display (context) == gdisp)
......@@ -1010,7 +1016,7 @@ gdisplay_update_cursor (GDisplay *gdisp, int x, int y)
}
}
gdisplay_untransform_coords(gdisp, x, y, &t_x, &t_y, TRUE, TRUE);
gdisplay_untransform_coords(gdisp, x, y, &t_x, &t_y, FALSE, FALSE);
active_drawable = gimp_image_active_drawable (gdisp->gimage);
......@@ -1022,6 +1028,10 @@ gdisplay_update_cursor (GDisplay *gdisp, int x, int y)
t_y >= active_drawable->height)
{
gtk_label_set (GTK_LABEL (gdisp->cursor_label), "");
info_window_update_RGB(gdisp->window_info_dialog,
gdisp,
-1,
-1);
}
else
{
......@@ -1042,6 +1052,10 @@ gdisplay_update_cursor (GDisplay *gdisp, int x, int y)
(double) t_y * unit_factor / gdisp->gimage->yresolution);
}
gtk_label_set (GTK_LABEL (gdisp->cursor_label), buffer);
info_window_update_RGB(gdisp->window_info_dialog,
gdisp,
t_x,
t_y);
}
}
......@@ -1051,6 +1065,7 @@ gdisplay_update_cursor (GDisplay *gdisp, int x, int y)
if (new_cursor)
gdisplay_flush (gdisp);
}
......
......@@ -111,6 +111,7 @@ struct _GDisplay
guint progressid; /* id of statusbar message for progress */
InfoDialog *window_info_dialog; /* dialog box for image information */
InfoDialog *window_nav_dialog; /* dialog box for image navigation */
int color_type; /* is this an RGB or GRAY colormap */
......