mirror of https://github.com/GNOME/gimp.git
It works (until you try to load/save from a stream - found another bonobo
It works (until you try to load/save from a stream - found another bonobo bug).
This commit is contained in:
parent
81bfe9d592
commit
c55b2ccfdc
|
@ -78,10 +78,10 @@ static guint gdisplay_hash (GDisplay *);
|
|||
|
||||
static GHashTable *display_ht = NULL;
|
||||
|
||||
|
||||
GDisplay*
|
||||
gdisplay_new (GimpImage *gimage,
|
||||
unsigned int scale)
|
||||
gdisplay_new_with_info (GimpImage *gimage,
|
||||
unsigned int scale,
|
||||
gboolean embeddable)
|
||||
{
|
||||
GDisplay *gdisp;
|
||||
char title [MAX_TITLE_BUF];
|
||||
|
@ -116,7 +116,7 @@ gdisplay_new (GimpImage *gimage,
|
|||
gdisp->proximity = FALSE;
|
||||
gdisp->have_cursor = FALSE;
|
||||
gdisp->using_override_cursor = FALSE;
|
||||
|
||||
gdisp->is_embeddable = embeddable?1:0;
|
||||
gdisp->progressid = FALSE;
|
||||
|
||||
gdisp->idle_render.idleid = -1;
|
||||
|
@ -161,6 +161,13 @@ gdisplay_new (GimpImage *gimage,
|
|||
return gdisp;
|
||||
}
|
||||
|
||||
GDisplay*
|
||||
gdisplay_new (GimpImage *gimage,
|
||||
unsigned int scale)
|
||||
{
|
||||
return gdisplay_new_with_info (gimage, scale, FALSE);
|
||||
}
|
||||
|
||||
|
||||
static int print (char *, int, int, const char *, ...) G_GNUC_PRINTF (4, 5);
|
||||
|
||||
|
@ -1103,8 +1110,9 @@ gdisplay_resize_cursor_label (GDisplay *gdisp)
|
|||
(gdouble) gdisp->gimage->height * unit_factor /
|
||||
gdisp->gimage->yresolution);
|
||||
}
|
||||
|
||||
cursor_label_width =
|
||||
gdk_string_width (gtk_widget_get_style (gdisp->cursor_label)->font, buffer);
|
||||
gdk_string_width (gtk_widget_get_style(gdisp->cursor_label)->font, buffer);
|
||||
|
||||
/* find out how many pixels the label's parent frame is bigger than
|
||||
* the label itself */
|
||||
|
|
|
@ -150,6 +150,8 @@ struct _GDisplay
|
|||
short have_cursor; /* is cursor currently drawn ? */
|
||||
|
||||
IdleRenderStruct idle_render; /* state of this gdisplay's render thread */
|
||||
|
||||
guint8 is_embeddable : 1; /* Is this display not in a toplevel window? */
|
||||
};
|
||||
|
||||
|
||||
|
@ -157,6 +159,7 @@ struct _GDisplay
|
|||
/* member function declarations */
|
||||
|
||||
GDisplay * gdisplay_new (GimpImage *, unsigned int);
|
||||
GDisplay * gdisplay_new_with_info (GimpImage *, unsigned int, gboolean embeddable);
|
||||
void gdisplay_reconnect (GDisplay *, GimpImage *);
|
||||
void gdisplay_remove_and_delete (GDisplay *);
|
||||
int gdisplay_mask_value (GDisplay *, int, int);
|
||||
|
|
|
@ -78,10 +78,10 @@ static guint gdisplay_hash (GDisplay *);
|
|||
|
||||
static GHashTable *display_ht = NULL;
|
||||
|
||||
|
||||
GDisplay*
|
||||
gdisplay_new (GimpImage *gimage,
|
||||
unsigned int scale)
|
||||
gdisplay_new_with_info (GimpImage *gimage,
|
||||
unsigned int scale,
|
||||
gboolean embeddable)
|
||||
{
|
||||
GDisplay *gdisp;
|
||||
char title [MAX_TITLE_BUF];
|
||||
|
@ -116,7 +116,7 @@ gdisplay_new (GimpImage *gimage,
|
|||
gdisp->proximity = FALSE;
|
||||
gdisp->have_cursor = FALSE;
|
||||
gdisp->using_override_cursor = FALSE;
|
||||
|
||||
gdisp->is_embeddable = embeddable?1:0;
|
||||
gdisp->progressid = FALSE;
|
||||
|
||||
gdisp->idle_render.idleid = -1;
|
||||
|
@ -161,6 +161,13 @@ gdisplay_new (GimpImage *gimage,
|
|||
return gdisp;
|
||||
}
|
||||
|
||||
GDisplay*
|
||||
gdisplay_new (GimpImage *gimage,
|
||||
unsigned int scale)
|
||||
{
|
||||
return gdisplay_new_with_info (gimage, scale, FALSE);
|
||||
}
|
||||
|
||||
|
||||
static int print (char *, int, int, const char *, ...) G_GNUC_PRINTF (4, 5);
|
||||
|
||||
|
@ -1103,8 +1110,9 @@ gdisplay_resize_cursor_label (GDisplay *gdisp)
|
|||
(gdouble) gdisp->gimage->height * unit_factor /
|
||||
gdisp->gimage->yresolution);
|
||||
}
|
||||
|
||||
cursor_label_width =
|
||||
gdk_string_width (gtk_widget_get_style (gdisp->cursor_label)->font, buffer);
|
||||
gdk_string_width (gtk_widget_get_style(gdisp->cursor_label)->font, buffer);
|
||||
|
||||
/* find out how many pixels the label's parent frame is bigger than
|
||||
* the label itself */
|
||||
|
|
|
@ -150,6 +150,8 @@ struct _GDisplay
|
|||
short have_cursor; /* is cursor currently drawn ? */
|
||||
|
||||
IdleRenderStruct idle_render; /* state of this gdisplay's render thread */
|
||||
|
||||
guint8 is_embeddable : 1; /* Is this display not in a toplevel window? */
|
||||
};
|
||||
|
||||
|
||||
|
@ -157,6 +159,7 @@ struct _GDisplay
|
|||
/* member function declarations */
|
||||
|
||||
GDisplay * gdisplay_new (GimpImage *, unsigned int);
|
||||
GDisplay * gdisplay_new_with_info (GimpImage *, unsigned int, gboolean embeddable);
|
||||
void gdisplay_reconnect (GDisplay *, GimpImage *);
|
||||
void gdisplay_remove_and_delete (GDisplay *);
|
||||
int gdisplay_mask_value (GDisplay *, int, int);
|
||||
|
|
|
@ -642,6 +642,49 @@ toolbox_raise_callback (GtkWidget *widget,
|
|||
gdk_window_raise(toolbox_shell->window);
|
||||
}
|
||||
|
||||
static void
|
||||
do_gdisplay_resize_cursor_label (GtkWidget *widget, GDisplay *display)
|
||||
{
|
||||
gdisplay_resize_cursor_label (display);
|
||||
}
|
||||
|
||||
static void
|
||||
do_qmaskon_pixmap_creation (GtkWidget *widget, GDisplay *gdisp)
|
||||
{
|
||||
GdkPixmap *pxmp;
|
||||
GdkBitmap *mask;
|
||||
GtkStyle *style;
|
||||
GtkWidget *pixmap;
|
||||
|
||||
style = gtk_widget_get_style(gdisp->shell);
|
||||
|
||||
pxmp = gdk_pixmap_create_from_xpm_d(gdisp->shell->window, &mask,
|
||||
&style->bg[GTK_STATE_NORMAL],
|
||||
qmasksel_xpm);
|
||||
|
||||
pixmap = gtk_pixmap_new (pxmp, mask);
|
||||
gtk_container_add (GTK_CONTAINER (gdisp->qmaskon), pixmap);
|
||||
gtk_widget_show(pixmap);
|
||||
}
|
||||
|
||||
static void
|
||||
do_qmaskoff_pixmap_creation (GtkWidget *widget, GDisplay *gdisp)
|
||||
{
|
||||
GdkPixmap *pxmp;
|
||||
GdkBitmap *mask;
|
||||
GtkStyle *style;
|
||||
GtkWidget *pixmap;
|
||||
|
||||
style = gtk_widget_get_style(gdisp->shell);
|
||||
|
||||
pxmp = gdk_pixmap_create_from_xpm_d(gdisp->shell->window, &mask,
|
||||
&style->bg[GTK_STATE_NORMAL],
|
||||
qmasknosel_xpm);
|
||||
pixmap = gtk_pixmap_new (pxmp, mask);
|
||||
gtk_container_add (GTK_CONTAINER (gdisp->qmaskoff), pixmap);
|
||||
gtk_widget_show(pixmap);
|
||||
}
|
||||
|
||||
void
|
||||
create_display_shell (GDisplay* gdisp,
|
||||
int width,
|
||||
|
@ -658,7 +701,6 @@ create_display_shell (GDisplay* gdisp,
|
|||
GtkWidget *table_lower;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *arrow;
|
||||
GtkWidget *pixmap;
|
||||
|
||||
GSList *group = NULL;
|
||||
|
||||
|
@ -699,16 +741,26 @@ create_display_shell (GDisplay* gdisp,
|
|||
gdisp->vsbdata = GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, height, 1, 1, height));
|
||||
|
||||
/* The toplevel shell */
|
||||
gdisp->shell = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_widget_ref (gdisp->shell);
|
||||
gtk_window_set_title (GTK_WINDOW (gdisp->shell), title);
|
||||
gtk_window_set_wmclass (GTK_WINDOW (gdisp->shell), "image_window", "Gimp");
|
||||
gtk_window_set_policy (GTK_WINDOW (gdisp->shell), TRUE, TRUE, TRUE);
|
||||
if(gdisp->is_embeddable) {
|
||||
gdisp->shell = gtk_vbox_new(FALSE, 0);
|
||||
} else {
|
||||
gdisp->shell = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_title (GTK_WINDOW (gdisp->shell), title);
|
||||
gtk_window_set_wmclass (GTK_WINDOW (gdisp->shell), "image_window", "Gimp");
|
||||
gtk_window_set_policy (GTK_WINDOW (gdisp->shell), TRUE, TRUE, TRUE);
|
||||
gtk_signal_connect (GTK_OBJECT (gdisp->shell), "delete_event",
|
||||
GTK_SIGNAL_FUNC (gdisplay_delete),
|
||||
gdisp);
|
||||
}
|
||||
|
||||
gtk_widget_set_events (gdisp->shell,
|
||||
GDK_POINTER_MOTION_MASK
|
||||
| GDK_POINTER_MOTION_HINT_MASK
|
||||
| GDK_BUTTON_PRESS_MASK
|
||||
| GDK_KEY_PRESS_MASK
|
||||
| GDK_KEY_RELEASE_MASK);
|
||||
gtk_object_set_user_data (GTK_OBJECT (gdisp->shell), (gpointer) gdisp);
|
||||
gtk_widget_set_events (gdisp->shell, GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK);
|
||||
gtk_signal_connect (GTK_OBJECT (gdisp->shell), "delete_event",
|
||||
GTK_SIGNAL_FUNC (gdisplay_delete),
|
||||
gdisp);
|
||||
gtk_widget_ref (gdisp->shell);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (gdisp->shell), "destroy",
|
||||
(GtkSignalFunc) gdisplay_destroy,
|
||||
|
@ -804,32 +856,12 @@ create_display_shell (GDisplay* gdisp,
|
|||
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gdisp->qmaskoff), TRUE);
|
||||
gtk_widget_set_usize(GTK_WIDGET(gdisp->qmaskon), 15, 15);
|
||||
gtk_widget_set_usize(GTK_WIDGET(gdisp->qmaskoff), 15, 15);
|
||||
/* Draw pixmaps - note: you must realize the parent prior to doing the
|
||||
rest! */
|
||||
{
|
||||
GdkPixmap *pxmp;
|
||||
GdkBitmap *mask;
|
||||
GtkStyle *style;
|
||||
|
||||
style = gtk_widget_get_style(gdisp->shell);
|
||||
gtk_widget_realize(gdisp->shell);
|
||||
|
||||
pxmp = gdk_pixmap_create_from_xpm_d(gdisp->shell->window, &mask,
|
||||
&style->bg[GTK_STATE_NORMAL],
|
||||
qmasksel_xpm);
|
||||
gtk_signal_connect (GTK_OBJECT(gdisp->qmaskon), "realize",
|
||||
GTK_SIGNAL_FUNC(do_qmaskon_pixmap_creation), gdisp);
|
||||
gtk_signal_connect (GTK_OBJECT(gdisp->qmaskoff), "realize",
|
||||
GTK_SIGNAL_FUNC(do_qmaskoff_pixmap_creation), gdisp);
|
||||
|
||||
pixmap = gtk_pixmap_new (pxmp, mask);
|
||||
gtk_container_add (GTK_CONTAINER (gdisp->qmaskon), pixmap);
|
||||
gtk_widget_show(pixmap);
|
||||
|
||||
pxmp = gdk_pixmap_create_from_xpm_d(gdisp->shell->window, &mask,
|
||||
&style->bg[GTK_STATE_NORMAL],
|
||||
qmasknosel_xpm);
|
||||
pixmap = gtk_pixmap_new (pxmp, mask);
|
||||
gtk_container_add (GTK_CONTAINER (gdisp->qmaskoff), pixmap);
|
||||
gtk_widget_show(pixmap);
|
||||
}
|
||||
|
||||
gdisp->canvas = gtk_drawing_area_new ();
|
||||
gtk_drawing_area_size (GTK_DRAWING_AREA (gdisp->canvas), n_width, n_height);
|
||||
gtk_widget_set_events (gdisp->canvas, CANVAS_EVENT_MASK);
|
||||
|
@ -892,8 +924,8 @@ create_display_shell (GDisplay* gdisp,
|
|||
|
||||
/* we need to realize the cursor_label widget here, so the size gets
|
||||
computed correctly */
|
||||
gtk_widget_realize (gdisp->cursor_label);
|
||||
gdisplay_resize_cursor_label (gdisp);
|
||||
gtk_signal_connect (GTK_OBJECT(gdisp->cursor_label), "realize",
|
||||
GTK_SIGNAL_FUNC(do_gdisplay_resize_cursor_label), gdisp);
|
||||
|
||||
gdisp->statusbar = gtk_statusbar_new ();
|
||||
gtk_widget_set_usize (gdisp->statusbar, 1, -1);
|
||||
|
@ -918,7 +950,10 @@ create_display_shell (GDisplay* gdisp,
|
|||
gdisp->popup = image_popup_menu;
|
||||
|
||||
/* the accelerator table for images */
|
||||
gtk_window_add_accel_group (GTK_WINDOW (gdisp->shell), image_accel_group);
|
||||
if( !gdisp->is_embeddable)
|
||||
gtk_window_add_accel_group (GTK_WINDOW (gdisp->shell), image_accel_group);
|
||||
else
|
||||
/* XXX FIXME: Dunno how to handle accel groups here */;
|
||||
|
||||
gtk_widget_show (arrow);
|
||||
gtk_widget_show (gdisp->qmaskon);
|
||||
|
@ -952,11 +987,15 @@ create_display_shell (GDisplay* gdisp,
|
|||
gtk_widget_show (vbox);
|
||||
|
||||
gtk_widget_show (gdisp->shell);
|
||||
#if 0
|
||||
#ifdef __GNUC__
|
||||
#warning DODGY?
|
||||
#endif /*__GNUC__ */
|
||||
|
||||
gtk_widget_realize (gdisp->canvas);
|
||||
|
||||
gdk_window_set_back_pixmap(gdisp->canvas->window, NULL, 0);
|
||||
#endif
|
||||
|
||||
/* set the focus to the canvas area */
|
||||
gtk_widget_grab_focus (gdisp->canvas);
|
||||
|
|
|
@ -642,6 +642,49 @@ toolbox_raise_callback (GtkWidget *widget,
|
|||
gdk_window_raise(toolbox_shell->window);
|
||||
}
|
||||
|
||||
static void
|
||||
do_gdisplay_resize_cursor_label (GtkWidget *widget, GDisplay *display)
|
||||
{
|
||||
gdisplay_resize_cursor_label (display);
|
||||
}
|
||||
|
||||
static void
|
||||
do_qmaskon_pixmap_creation (GtkWidget *widget, GDisplay *gdisp)
|
||||
{
|
||||
GdkPixmap *pxmp;
|
||||
GdkBitmap *mask;
|
||||
GtkStyle *style;
|
||||
GtkWidget *pixmap;
|
||||
|
||||
style = gtk_widget_get_style(gdisp->shell);
|
||||
|
||||
pxmp = gdk_pixmap_create_from_xpm_d(gdisp->shell->window, &mask,
|
||||
&style->bg[GTK_STATE_NORMAL],
|
||||
qmasksel_xpm);
|
||||
|
||||
pixmap = gtk_pixmap_new (pxmp, mask);
|
||||
gtk_container_add (GTK_CONTAINER (gdisp->qmaskon), pixmap);
|
||||
gtk_widget_show(pixmap);
|
||||
}
|
||||
|
||||
static void
|
||||
do_qmaskoff_pixmap_creation (GtkWidget *widget, GDisplay *gdisp)
|
||||
{
|
||||
GdkPixmap *pxmp;
|
||||
GdkBitmap *mask;
|
||||
GtkStyle *style;
|
||||
GtkWidget *pixmap;
|
||||
|
||||
style = gtk_widget_get_style(gdisp->shell);
|
||||
|
||||
pxmp = gdk_pixmap_create_from_xpm_d(gdisp->shell->window, &mask,
|
||||
&style->bg[GTK_STATE_NORMAL],
|
||||
qmasknosel_xpm);
|
||||
pixmap = gtk_pixmap_new (pxmp, mask);
|
||||
gtk_container_add (GTK_CONTAINER (gdisp->qmaskoff), pixmap);
|
||||
gtk_widget_show(pixmap);
|
||||
}
|
||||
|
||||
void
|
||||
create_display_shell (GDisplay* gdisp,
|
||||
int width,
|
||||
|
@ -658,7 +701,6 @@ create_display_shell (GDisplay* gdisp,
|
|||
GtkWidget *table_lower;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *arrow;
|
||||
GtkWidget *pixmap;
|
||||
|
||||
GSList *group = NULL;
|
||||
|
||||
|
@ -699,16 +741,26 @@ create_display_shell (GDisplay* gdisp,
|
|||
gdisp->vsbdata = GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, height, 1, 1, height));
|
||||
|
||||
/* The toplevel shell */
|
||||
gdisp->shell = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_widget_ref (gdisp->shell);
|
||||
gtk_window_set_title (GTK_WINDOW (gdisp->shell), title);
|
||||
gtk_window_set_wmclass (GTK_WINDOW (gdisp->shell), "image_window", "Gimp");
|
||||
gtk_window_set_policy (GTK_WINDOW (gdisp->shell), TRUE, TRUE, TRUE);
|
||||
if(gdisp->is_embeddable) {
|
||||
gdisp->shell = gtk_vbox_new(FALSE, 0);
|
||||
} else {
|
||||
gdisp->shell = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_title (GTK_WINDOW (gdisp->shell), title);
|
||||
gtk_window_set_wmclass (GTK_WINDOW (gdisp->shell), "image_window", "Gimp");
|
||||
gtk_window_set_policy (GTK_WINDOW (gdisp->shell), TRUE, TRUE, TRUE);
|
||||
gtk_signal_connect (GTK_OBJECT (gdisp->shell), "delete_event",
|
||||
GTK_SIGNAL_FUNC (gdisplay_delete),
|
||||
gdisp);
|
||||
}
|
||||
|
||||
gtk_widget_set_events (gdisp->shell,
|
||||
GDK_POINTER_MOTION_MASK
|
||||
| GDK_POINTER_MOTION_HINT_MASK
|
||||
| GDK_BUTTON_PRESS_MASK
|
||||
| GDK_KEY_PRESS_MASK
|
||||
| GDK_KEY_RELEASE_MASK);
|
||||
gtk_object_set_user_data (GTK_OBJECT (gdisp->shell), (gpointer) gdisp);
|
||||
gtk_widget_set_events (gdisp->shell, GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK);
|
||||
gtk_signal_connect (GTK_OBJECT (gdisp->shell), "delete_event",
|
||||
GTK_SIGNAL_FUNC (gdisplay_delete),
|
||||
gdisp);
|
||||
gtk_widget_ref (gdisp->shell);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (gdisp->shell), "destroy",
|
||||
(GtkSignalFunc) gdisplay_destroy,
|
||||
|
@ -804,32 +856,12 @@ create_display_shell (GDisplay* gdisp,
|
|||
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gdisp->qmaskoff), TRUE);
|
||||
gtk_widget_set_usize(GTK_WIDGET(gdisp->qmaskon), 15, 15);
|
||||
gtk_widget_set_usize(GTK_WIDGET(gdisp->qmaskoff), 15, 15);
|
||||
/* Draw pixmaps - note: you must realize the parent prior to doing the
|
||||
rest! */
|
||||
{
|
||||
GdkPixmap *pxmp;
|
||||
GdkBitmap *mask;
|
||||
GtkStyle *style;
|
||||
|
||||
style = gtk_widget_get_style(gdisp->shell);
|
||||
gtk_widget_realize(gdisp->shell);
|
||||
|
||||
pxmp = gdk_pixmap_create_from_xpm_d(gdisp->shell->window, &mask,
|
||||
&style->bg[GTK_STATE_NORMAL],
|
||||
qmasksel_xpm);
|
||||
gtk_signal_connect (GTK_OBJECT(gdisp->qmaskon), "realize",
|
||||
GTK_SIGNAL_FUNC(do_qmaskon_pixmap_creation), gdisp);
|
||||
gtk_signal_connect (GTK_OBJECT(gdisp->qmaskoff), "realize",
|
||||
GTK_SIGNAL_FUNC(do_qmaskoff_pixmap_creation), gdisp);
|
||||
|
||||
pixmap = gtk_pixmap_new (pxmp, mask);
|
||||
gtk_container_add (GTK_CONTAINER (gdisp->qmaskon), pixmap);
|
||||
gtk_widget_show(pixmap);
|
||||
|
||||
pxmp = gdk_pixmap_create_from_xpm_d(gdisp->shell->window, &mask,
|
||||
&style->bg[GTK_STATE_NORMAL],
|
||||
qmasknosel_xpm);
|
||||
pixmap = gtk_pixmap_new (pxmp, mask);
|
||||
gtk_container_add (GTK_CONTAINER (gdisp->qmaskoff), pixmap);
|
||||
gtk_widget_show(pixmap);
|
||||
}
|
||||
|
||||
gdisp->canvas = gtk_drawing_area_new ();
|
||||
gtk_drawing_area_size (GTK_DRAWING_AREA (gdisp->canvas), n_width, n_height);
|
||||
gtk_widget_set_events (gdisp->canvas, CANVAS_EVENT_MASK);
|
||||
|
@ -892,8 +924,8 @@ create_display_shell (GDisplay* gdisp,
|
|||
|
||||
/* we need to realize the cursor_label widget here, so the size gets
|
||||
computed correctly */
|
||||
gtk_widget_realize (gdisp->cursor_label);
|
||||
gdisplay_resize_cursor_label (gdisp);
|
||||
gtk_signal_connect (GTK_OBJECT(gdisp->cursor_label), "realize",
|
||||
GTK_SIGNAL_FUNC(do_gdisplay_resize_cursor_label), gdisp);
|
||||
|
||||
gdisp->statusbar = gtk_statusbar_new ();
|
||||
gtk_widget_set_usize (gdisp->statusbar, 1, -1);
|
||||
|
@ -918,7 +950,10 @@ create_display_shell (GDisplay* gdisp,
|
|||
gdisp->popup = image_popup_menu;
|
||||
|
||||
/* the accelerator table for images */
|
||||
gtk_window_add_accel_group (GTK_WINDOW (gdisp->shell), image_accel_group);
|
||||
if( !gdisp->is_embeddable)
|
||||
gtk_window_add_accel_group (GTK_WINDOW (gdisp->shell), image_accel_group);
|
||||
else
|
||||
/* XXX FIXME: Dunno how to handle accel groups here */;
|
||||
|
||||
gtk_widget_show (arrow);
|
||||
gtk_widget_show (gdisp->qmaskon);
|
||||
|
@ -952,11 +987,15 @@ create_display_shell (GDisplay* gdisp,
|
|||
gtk_widget_show (vbox);
|
||||
|
||||
gtk_widget_show (gdisp->shell);
|
||||
#if 0
|
||||
#ifdef __GNUC__
|
||||
#warning DODGY?
|
||||
#endif /*__GNUC__ */
|
||||
|
||||
gtk_widget_realize (gdisp->canvas);
|
||||
|
||||
gdk_window_set_back_pixmap(gdisp->canvas->window, NULL, 0);
|
||||
#endif
|
||||
|
||||
/* set the focus to the canvas area */
|
||||
gtk_widget_grab_focus (gdisp->canvas);
|
||||
|
|
|
@ -78,10 +78,10 @@ static guint gdisplay_hash (GDisplay *);
|
|||
|
||||
static GHashTable *display_ht = NULL;
|
||||
|
||||
|
||||
GDisplay*
|
||||
gdisplay_new (GimpImage *gimage,
|
||||
unsigned int scale)
|
||||
gdisplay_new_with_info (GimpImage *gimage,
|
||||
unsigned int scale,
|
||||
gboolean embeddable)
|
||||
{
|
||||
GDisplay *gdisp;
|
||||
char title [MAX_TITLE_BUF];
|
||||
|
@ -116,7 +116,7 @@ gdisplay_new (GimpImage *gimage,
|
|||
gdisp->proximity = FALSE;
|
||||
gdisp->have_cursor = FALSE;
|
||||
gdisp->using_override_cursor = FALSE;
|
||||
|
||||
gdisp->is_embeddable = embeddable?1:0;
|
||||
gdisp->progressid = FALSE;
|
||||
|
||||
gdisp->idle_render.idleid = -1;
|
||||
|
@ -161,6 +161,13 @@ gdisplay_new (GimpImage *gimage,
|
|||
return gdisp;
|
||||
}
|
||||
|
||||
GDisplay*
|
||||
gdisplay_new (GimpImage *gimage,
|
||||
unsigned int scale)
|
||||
{
|
||||
return gdisplay_new_with_info (gimage, scale, FALSE);
|
||||
}
|
||||
|
||||
|
||||
static int print (char *, int, int, const char *, ...) G_GNUC_PRINTF (4, 5);
|
||||
|
||||
|
@ -1103,8 +1110,9 @@ gdisplay_resize_cursor_label (GDisplay *gdisp)
|
|||
(gdouble) gdisp->gimage->height * unit_factor /
|
||||
gdisp->gimage->yresolution);
|
||||
}
|
||||
|
||||
cursor_label_width =
|
||||
gdk_string_width (gtk_widget_get_style (gdisp->cursor_label)->font, buffer);
|
||||
gdk_string_width (gtk_widget_get_style(gdisp->cursor_label)->font, buffer);
|
||||
|
||||
/* find out how many pixels the label's parent frame is bigger than
|
||||
* the label itself */
|
||||
|
|
|
@ -150,6 +150,8 @@ struct _GDisplay
|
|||
short have_cursor; /* is cursor currently drawn ? */
|
||||
|
||||
IdleRenderStruct idle_render; /* state of this gdisplay's render thread */
|
||||
|
||||
guint8 is_embeddable : 1; /* Is this display not in a toplevel window? */
|
||||
};
|
||||
|
||||
|
||||
|
@ -157,6 +159,7 @@ struct _GDisplay
|
|||
/* member function declarations */
|
||||
|
||||
GDisplay * gdisplay_new (GimpImage *, unsigned int);
|
||||
GDisplay * gdisplay_new_with_info (GimpImage *, unsigned int, gboolean embeddable);
|
||||
void gdisplay_reconnect (GDisplay *, GimpImage *);
|
||||
void gdisplay_remove_and_delete (GDisplay *);
|
||||
int gdisplay_mask_value (GDisplay *, int, int);
|
||||
|
|
|
@ -27,6 +27,26 @@
|
|||
#include "gdisplay.h"
|
||||
#include "fileops.h"
|
||||
|
||||
/* Random header files in case they might be needed */
|
||||
#include "appenv.h"
|
||||
#include "actionarea.h"
|
||||
#include "file_new_dialog.h"
|
||||
#include "gimage.h"
|
||||
#include "gimpcontext.h"
|
||||
#include "gimprc.h"
|
||||
#include "global_edit.h"
|
||||
#include "interface.h"
|
||||
#include "lc_dialog.h"
|
||||
#include "plug_in.h"
|
||||
#include "tile_manager_pvt.h"
|
||||
#include "gdisplay.h"
|
||||
|
||||
#include "libgimp/gimpchainbutton.h"
|
||||
#include "libgimp/gimplimits.h"
|
||||
#include "libgimp/gimpsizeentry.h"
|
||||
#include "libgimp/gimpintl.h"
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
|
||||
|
@ -76,6 +96,7 @@ gimp_object_factory (GnomeEmbeddableFactory *this, void *data)
|
|||
GnomeEmbeddable *bonobo_object;
|
||||
GnomePersistStream *stream;
|
||||
bonobo_object_data_t *bonobo_object_data;
|
||||
GimpImage *gimage;
|
||||
|
||||
bonobo_object_data = g_new0 (bonobo_object_data_t, 1);
|
||||
|
||||
|
@ -93,6 +114,25 @@ gimp_object_factory (GnomeEmbeddableFactory *this, void *data)
|
|||
|
||||
gnome_object_add_interface (GNOME_OBJECT (bonobo_object),
|
||||
GNOME_OBJECT (stream));
|
||||
|
||||
/* Make a basic blank image */
|
||||
bonobo_object_data->gimp_image = gimage = gimp_image_new(320, 200, RGB);
|
||||
gimp_image_set_resolution (gimage, 72.0, 72.0);
|
||||
gimp_image_set_unit (gimage, UNIT_INCH);
|
||||
gimage_disable_undo(bonobo_object_data->gimp_image);
|
||||
{
|
||||
Layer *layer;
|
||||
|
||||
layer = layer_new (gimage, gimage->width, gimage->height,
|
||||
RGBA_GIMAGE, _("Background"), OPAQUE_OPACITY, NORMAL);
|
||||
if (layer) {
|
||||
gimage_add_layer(gimage, layer, 0);
|
||||
drawable_fill(GIMP_DRAWABLE(layer), WHITE_FILL);
|
||||
}
|
||||
}
|
||||
gimage_enable_undo(bonobo_object_data->gimp_image);
|
||||
gimage_clean_all(bonobo_object_data->gimp_image);
|
||||
|
||||
return (GnomeObject *) bonobo_object;
|
||||
|
||||
out:
|
||||
|
@ -114,14 +154,14 @@ gimp_view_factory (GnomeEmbeddable *bonobo_object,
|
|||
|
||||
view_data = g_new0 (bonobo_view_t, 1);
|
||||
view_data->parent = bonobo_object_data;
|
||||
view_data->gdisplay = gdisplay_new (bonobo_object_data->gimp_image, 0x0101);
|
||||
view_data->gdisplay = gdisplay_new_with_info (bonobo_object_data->gimp_image, 0x0101, TRUE);
|
||||
|
||||
view = gnome_view_new(view_data->gdisplay->shell);
|
||||
gtk_signal_connect (GTK_OBJECT (view), "destroy",
|
||||
GTK_SIGNAL_FUNC(gimp_view_destroy), view_data);
|
||||
|
||||
bonobo_object_data->views = g_list_prepend (bonobo_object_data->views,
|
||||
view_data);
|
||||
view_data);
|
||||
|
||||
return view;
|
||||
}
|
||||
|
|
113
app/interface.c
113
app/interface.c
|
@ -642,6 +642,49 @@ toolbox_raise_callback (GtkWidget *widget,
|
|||
gdk_window_raise(toolbox_shell->window);
|
||||
}
|
||||
|
||||
static void
|
||||
do_gdisplay_resize_cursor_label (GtkWidget *widget, GDisplay *display)
|
||||
{
|
||||
gdisplay_resize_cursor_label (display);
|
||||
}
|
||||
|
||||
static void
|
||||
do_qmaskon_pixmap_creation (GtkWidget *widget, GDisplay *gdisp)
|
||||
{
|
||||
GdkPixmap *pxmp;
|
||||
GdkBitmap *mask;
|
||||
GtkStyle *style;
|
||||
GtkWidget *pixmap;
|
||||
|
||||
style = gtk_widget_get_style(gdisp->shell);
|
||||
|
||||
pxmp = gdk_pixmap_create_from_xpm_d(gdisp->shell->window, &mask,
|
||||
&style->bg[GTK_STATE_NORMAL],
|
||||
qmasksel_xpm);
|
||||
|
||||
pixmap = gtk_pixmap_new (pxmp, mask);
|
||||
gtk_container_add (GTK_CONTAINER (gdisp->qmaskon), pixmap);
|
||||
gtk_widget_show(pixmap);
|
||||
}
|
||||
|
||||
static void
|
||||
do_qmaskoff_pixmap_creation (GtkWidget *widget, GDisplay *gdisp)
|
||||
{
|
||||
GdkPixmap *pxmp;
|
||||
GdkBitmap *mask;
|
||||
GtkStyle *style;
|
||||
GtkWidget *pixmap;
|
||||
|
||||
style = gtk_widget_get_style(gdisp->shell);
|
||||
|
||||
pxmp = gdk_pixmap_create_from_xpm_d(gdisp->shell->window, &mask,
|
||||
&style->bg[GTK_STATE_NORMAL],
|
||||
qmasknosel_xpm);
|
||||
pixmap = gtk_pixmap_new (pxmp, mask);
|
||||
gtk_container_add (GTK_CONTAINER (gdisp->qmaskoff), pixmap);
|
||||
gtk_widget_show(pixmap);
|
||||
}
|
||||
|
||||
void
|
||||
create_display_shell (GDisplay* gdisp,
|
||||
int width,
|
||||
|
@ -658,7 +701,6 @@ create_display_shell (GDisplay* gdisp,
|
|||
GtkWidget *table_lower;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *arrow;
|
||||
GtkWidget *pixmap;
|
||||
|
||||
GSList *group = NULL;
|
||||
|
||||
|
@ -699,16 +741,26 @@ create_display_shell (GDisplay* gdisp,
|
|||
gdisp->vsbdata = GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, height, 1, 1, height));
|
||||
|
||||
/* The toplevel shell */
|
||||
gdisp->shell = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_widget_ref (gdisp->shell);
|
||||
gtk_window_set_title (GTK_WINDOW (gdisp->shell), title);
|
||||
gtk_window_set_wmclass (GTK_WINDOW (gdisp->shell), "image_window", "Gimp");
|
||||
gtk_window_set_policy (GTK_WINDOW (gdisp->shell), TRUE, TRUE, TRUE);
|
||||
if(gdisp->is_embeddable) {
|
||||
gdisp->shell = gtk_vbox_new(FALSE, 0);
|
||||
} else {
|
||||
gdisp->shell = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_title (GTK_WINDOW (gdisp->shell), title);
|
||||
gtk_window_set_wmclass (GTK_WINDOW (gdisp->shell), "image_window", "Gimp");
|
||||
gtk_window_set_policy (GTK_WINDOW (gdisp->shell), TRUE, TRUE, TRUE);
|
||||
gtk_signal_connect (GTK_OBJECT (gdisp->shell), "delete_event",
|
||||
GTK_SIGNAL_FUNC (gdisplay_delete),
|
||||
gdisp);
|
||||
}
|
||||
|
||||
gtk_widget_set_events (gdisp->shell,
|
||||
GDK_POINTER_MOTION_MASK
|
||||
| GDK_POINTER_MOTION_HINT_MASK
|
||||
| GDK_BUTTON_PRESS_MASK
|
||||
| GDK_KEY_PRESS_MASK
|
||||
| GDK_KEY_RELEASE_MASK);
|
||||
gtk_object_set_user_data (GTK_OBJECT (gdisp->shell), (gpointer) gdisp);
|
||||
gtk_widget_set_events (gdisp->shell, GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK);
|
||||
gtk_signal_connect (GTK_OBJECT (gdisp->shell), "delete_event",
|
||||
GTK_SIGNAL_FUNC (gdisplay_delete),
|
||||
gdisp);
|
||||
gtk_widget_ref (gdisp->shell);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (gdisp->shell), "destroy",
|
||||
(GtkSignalFunc) gdisplay_destroy,
|
||||
|
@ -804,32 +856,12 @@ create_display_shell (GDisplay* gdisp,
|
|||
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gdisp->qmaskoff), TRUE);
|
||||
gtk_widget_set_usize(GTK_WIDGET(gdisp->qmaskon), 15, 15);
|
||||
gtk_widget_set_usize(GTK_WIDGET(gdisp->qmaskoff), 15, 15);
|
||||
/* Draw pixmaps - note: you must realize the parent prior to doing the
|
||||
rest! */
|
||||
{
|
||||
GdkPixmap *pxmp;
|
||||
GdkBitmap *mask;
|
||||
GtkStyle *style;
|
||||
|
||||
style = gtk_widget_get_style(gdisp->shell);
|
||||
gtk_widget_realize(gdisp->shell);
|
||||
|
||||
pxmp = gdk_pixmap_create_from_xpm_d(gdisp->shell->window, &mask,
|
||||
&style->bg[GTK_STATE_NORMAL],
|
||||
qmasksel_xpm);
|
||||
gtk_signal_connect (GTK_OBJECT(gdisp->qmaskon), "realize",
|
||||
GTK_SIGNAL_FUNC(do_qmaskon_pixmap_creation), gdisp);
|
||||
gtk_signal_connect (GTK_OBJECT(gdisp->qmaskoff), "realize",
|
||||
GTK_SIGNAL_FUNC(do_qmaskoff_pixmap_creation), gdisp);
|
||||
|
||||
pixmap = gtk_pixmap_new (pxmp, mask);
|
||||
gtk_container_add (GTK_CONTAINER (gdisp->qmaskon), pixmap);
|
||||
gtk_widget_show(pixmap);
|
||||
|
||||
pxmp = gdk_pixmap_create_from_xpm_d(gdisp->shell->window, &mask,
|
||||
&style->bg[GTK_STATE_NORMAL],
|
||||
qmasknosel_xpm);
|
||||
pixmap = gtk_pixmap_new (pxmp, mask);
|
||||
gtk_container_add (GTK_CONTAINER (gdisp->qmaskoff), pixmap);
|
||||
gtk_widget_show(pixmap);
|
||||
}
|
||||
|
||||
gdisp->canvas = gtk_drawing_area_new ();
|
||||
gtk_drawing_area_size (GTK_DRAWING_AREA (gdisp->canvas), n_width, n_height);
|
||||
gtk_widget_set_events (gdisp->canvas, CANVAS_EVENT_MASK);
|
||||
|
@ -892,8 +924,8 @@ create_display_shell (GDisplay* gdisp,
|
|||
|
||||
/* we need to realize the cursor_label widget here, so the size gets
|
||||
computed correctly */
|
||||
gtk_widget_realize (gdisp->cursor_label);
|
||||
gdisplay_resize_cursor_label (gdisp);
|
||||
gtk_signal_connect (GTK_OBJECT(gdisp->cursor_label), "realize",
|
||||
GTK_SIGNAL_FUNC(do_gdisplay_resize_cursor_label), gdisp);
|
||||
|
||||
gdisp->statusbar = gtk_statusbar_new ();
|
||||
gtk_widget_set_usize (gdisp->statusbar, 1, -1);
|
||||
|
@ -918,7 +950,10 @@ create_display_shell (GDisplay* gdisp,
|
|||
gdisp->popup = image_popup_menu;
|
||||
|
||||
/* the accelerator table for images */
|
||||
gtk_window_add_accel_group (GTK_WINDOW (gdisp->shell), image_accel_group);
|
||||
if( !gdisp->is_embeddable)
|
||||
gtk_window_add_accel_group (GTK_WINDOW (gdisp->shell), image_accel_group);
|
||||
else
|
||||
/* XXX FIXME: Dunno how to handle accel groups here */;
|
||||
|
||||
gtk_widget_show (arrow);
|
||||
gtk_widget_show (gdisp->qmaskon);
|
||||
|
@ -952,11 +987,15 @@ create_display_shell (GDisplay* gdisp,
|
|||
gtk_widget_show (vbox);
|
||||
|
||||
gtk_widget_show (gdisp->shell);
|
||||
#if 0
|
||||
#ifdef __GNUC__
|
||||
#warning DODGY?
|
||||
#endif /*__GNUC__ */
|
||||
|
||||
gtk_widget_realize (gdisp->canvas);
|
||||
|
||||
gdk_window_set_back_pixmap(gdisp->canvas->window, NULL, 0);
|
||||
#endif
|
||||
|
||||
/* set the focus to the canvas area */
|
||||
gtk_widget_grab_focus (gdisp->canvas);
|
||||
|
|
Loading…
Reference in New Issue