+Thu May 17 16:20:04 2001 Jonathan Blandford <jrb@redhat.com>
+
+ * demos/gtk-demo/main.c (fontify): It's the worlds ugliest
+ highlighting code!!!! The result is okay so long as you don't try
+ to stress it. It also highlights a bug in the TextView so it's in
+ an unproportional font right now until it's fixed.
+
+ *demos/gtk-demo/*.c: Clean up code a bit to make it
+ ugly-parser(TM) friendly. (-:
+
2001-05-17 Joe Shaw <joe@ximian.com>
* gtk/gtktextdisplay.c (gtk_text_layout_draw): Remove the assertions
+Thu May 17 16:20:04 2001 Jonathan Blandford <jrb@redhat.com>
+
+ * demos/gtk-demo/main.c (fontify): It's the worlds ugliest
+ highlighting code!!!! The result is okay so long as you don't try
+ to stress it. It also highlights a bug in the TextView so it's in
+ an unproportional font right now until it's fixed.
+
+ *demos/gtk-demo/*.c: Clean up code a bit to make it
+ ugly-parser(TM) friendly. (-:
+
2001-05-17 Joe Shaw <joe@ximian.com>
* gtk/gtktextdisplay.c (gtk_text_layout_draw): Remove the assertions
+Thu May 17 16:20:04 2001 Jonathan Blandford <jrb@redhat.com>
+
+ * demos/gtk-demo/main.c (fontify): It's the worlds ugliest
+ highlighting code!!!! The result is okay so long as you don't try
+ to stress it. It also highlights a bug in the TextView so it's in
+ an unproportional font right now until it's fixed.
+
+ *demos/gtk-demo/*.c: Clean up code a bit to make it
+ ugly-parser(TM) friendly. (-:
+
2001-05-17 Joe Shaw <joe@ximian.com>
* gtk/gtktextdisplay.c (gtk_text_layout_draw): Remove the assertions
+Thu May 17 16:20:04 2001 Jonathan Blandford <jrb@redhat.com>
+
+ * demos/gtk-demo/main.c (fontify): It's the worlds ugliest
+ highlighting code!!!! The result is okay so long as you don't try
+ to stress it. It also highlights a bug in the TextView so it's in
+ an unproportional font right now until it's fixed.
+
+ *demos/gtk-demo/*.c: Clean up code a bit to make it
+ ugly-parser(TM) friendly. (-:
+
2001-05-17 Joe Shaw <joe@ximian.com>
* gtk/gtktextdisplay.c (gtk_text_layout_draw): Remove the assertions
+Thu May 17 16:20:04 2001 Jonathan Blandford <jrb@redhat.com>
+
+ * demos/gtk-demo/main.c (fontify): It's the worlds ugliest
+ highlighting code!!!! The result is okay so long as you don't try
+ to stress it. It also highlights a bug in the TextView so it's in
+ an unproportional font right now until it's fixed.
+
+ *demos/gtk-demo/*.c: Clean up code a bit to make it
+ ugly-parser(TM) friendly. (-:
+
2001-05-17 Joe Shaw <joe@ximian.com>
* gtk/gtktextdisplay.c (gtk_text_layout_draw): Remove the assertions
+Thu May 17 16:20:04 2001 Jonathan Blandford <jrb@redhat.com>
+
+ * demos/gtk-demo/main.c (fontify): It's the worlds ugliest
+ highlighting code!!!! The result is okay so long as you don't try
+ to stress it. It also highlights a bug in the TextView so it's in
+ an unproportional font right now until it's fixed.
+
+ *demos/gtk-demo/*.c: Clean up code a bit to make it
+ ugly-parser(TM) friendly. (-:
+
2001-05-17 Joe Shaw <joe@ximian.com>
* gtk/gtktextdisplay.c (gtk_text_layout_draw): Remove the assertions
+Thu May 17 16:20:04 2001 Jonathan Blandford <jrb@redhat.com>
+
+ * demos/gtk-demo/main.c (fontify): It's the worlds ugliest
+ highlighting code!!!! The result is okay so long as you don't try
+ to stress it. It also highlights a bug in the TextView so it's in
+ an unproportional font right now until it's fixed.
+
+ *demos/gtk-demo/*.c: Clean up code a bit to make it
+ ugly-parser(TM) friendly. (-:
+
2001-05-17 Joe Shaw <joe@ximian.com>
* gtk/gtktextdisplay.c (gtk_text_layout_draw): Remove the assertions
static GtkWidget *
create_bbox (gint horizontal,
- char* title,
+ char *title,
gint spacing,
gint layout)
{
GtkWidget *
do_button_box (void)
{
- static GtkWidget* window = NULL;
+ static GtkWidget *window = NULL;
GtkWidget *main_vbox;
GtkWidget *vbox;
GtkWidget *hbox;
gtk_container_add (GTK_CONTAINER (frame_horz), vbox);
gtk_box_pack_start (GTK_BOX (vbox),
- create_bbox (TRUE, "Spread", 40, GTK_BUTTONBOX_SPREAD),
+ create_bbox (TRUE, "Spread", 40, GTK_BUTTONBOX_SPREAD),
TRUE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (vbox),
- create_bbox (TRUE, "Edge", 40, GTK_BUTTONBOX_EDGE),
+ create_bbox (TRUE, "Edge", 40, GTK_BUTTONBOX_EDGE),
TRUE, TRUE, 5);
gtk_box_pack_start (GTK_BOX (vbox),
- create_bbox (TRUE, "Start", 40, GTK_BUTTONBOX_START),
+ create_bbox (TRUE, "Start", 40, GTK_BUTTONBOX_START),
TRUE, TRUE, 5);
gtk_box_pack_start (GTK_BOX (vbox),
- create_bbox (TRUE, "End", 40, GTK_BUTTONBOX_END),
+ create_bbox (TRUE, "End", 40, GTK_BUTTONBOX_END),
TRUE, TRUE, 5);
frame_vert = gtk_frame_new ("Vertical Button Boxes");
gtk_container_add (GTK_CONTAINER (frame_vert), hbox);
gtk_box_pack_start (GTK_BOX (hbox),
- create_bbox (FALSE, "Spread", 30, GTK_BUTTONBOX_SPREAD),
+ create_bbox (FALSE, "Spread", 30, GTK_BUTTONBOX_SPREAD),
TRUE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (hbox),
- create_bbox (FALSE, "Edge", 30, GTK_BUTTONBOX_EDGE),
+ create_bbox (FALSE, "Edge", 30, GTK_BUTTONBOX_EDGE),
TRUE, TRUE, 5);
gtk_box_pack_start (GTK_BOX (hbox),
- create_bbox (FALSE, "Start", 30, GTK_BUTTONBOX_START),
+ create_bbox (FALSE, "Start", 30, GTK_BUTTONBOX_START),
TRUE, TRUE, 5);
gtk_box_pack_start (GTK_BOX (hbox),
- create_bbox (FALSE, "End", 30, GTK_BUTTONBOX_END),
+ create_bbox (FALSE, "End", 30, GTK_BUTTONBOX_END),
TRUE, TRUE, 5);
}
gtk_widget_show_all (window);
}
else
- {
+ {
gtk_widget_destroy (window);
window = NULL;
}
return window;
}
-
static void
change_color_callback (GtkWidget *button,
- gpointer data)
+ gpointer data)
{
GtkWidget *dialog;
GtkColorSelection *colorsel;
if (response == GTK_RESPONSE_OK)
{
gtk_color_selection_get_current_color (colorsel,
- &color);
+ &color);
gtk_widget_modify_bg (da, GTK_STATE_NORMAL, &color);
}
gtk_box_pack_start (GTK_BOX (vbox), alignment, FALSE, FALSE, 0);
gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (change_color_callback),
- NULL);
+ GTK_SIGNAL_FUNC (change_color_callback),
+ NULL);
}
if (!GTK_WIDGET_VISIBLE (window))
static GtkWidget *entry2 = NULL;
static void
-message_dialog_clicked (GtkButton *button, gpointer user_data)
+message_dialog_clicked (GtkButton *button,
+ gpointer user_data)
{
GtkWidget *dialog;
static gint i = 1;
}
static void
-interactive_dialog_clicked (GtkButton *button, gpointer user_data)
+interactive_dialog_clicked (GtkButton *button,
+ gpointer user_data)
{
GtkWidget *dialog;
GtkWidget *hbox;
gtk_box_pack_start (GTK_BOX (hbox), table, TRUE, TRUE, 0);
label = gtk_label_new_with_mnemonic ("_Entry 1");
gtk_table_attach_defaults (GTK_TABLE (table),
- label,
+ label,
0, 1, 0, 1);
local_entry1 = gtk_entry_new ();
gtk_entry_set_text (GTK_ENTRY (local_entry1), gtk_entry_get_text (GTK_ENTRY (entry1)));
label = gtk_label_new_with_mnemonic ("E_ntry 2");
gtk_table_attach_defaults (GTK_TABLE (table),
- label,
+ label,
0, 1, 1, 2);
local_entry2 = gtk_entry_new ();
label = gtk_label_new_with_mnemonic ("_Entry 1");
gtk_table_attach_defaults (GTK_TABLE (table),
- label,
- 0, 1, 0, 1);
+ label,
+ 0, 1, 0, 1);
entry1 = gtk_entry_new ();
gtk_table_attach_defaults (GTK_TABLE (table), entry1, 1, 2, 0, 1);
label = gtk_label_new_with_mnemonic ("E_ntry 2");
gtk_table_attach_defaults (GTK_TABLE (table),
- label,
- 0, 1, 1, 2);
+ label,
+ 0, 1, 1, 2);
entry2 = gtk_entry_new ();
gtk_table_attach_defaults (GTK_TABLE (table), entry2, 1, 2, 1, 2);
gtk_widget_show_all (window);
}
else
- {
+ {
gtk_widget_destroy (window);
window = NULL;
}
/* Create a new pixmap of the appropriate size to store our scribbles */
static gboolean
-scribble_configure_event (GtkWidget *widget,
- GdkEventConfigure *event,
- gpointer data)
+scribble_configure_event (GtkWidget *widget,
+ GdkEventConfigure *event,
+ gpointer data)
{
if (pixmap)
g_object_unref (G_OBJECT (pixmap));
pixmap = gdk_pixmap_new (widget->window,
- widget->allocation.width,
- widget->allocation.height,
- -1);
+ widget->allocation.width,
+ widget->allocation.height,
+ -1);
/* Initialize the pixmap to white */
gdk_draw_rectangle (pixmap,
/* Redraw the screen from the pixmap */
static gboolean
scribble_expose_event (GtkWidget *widget,
- GdkEventExpose *event,
- gpointer data)
+ GdkEventExpose *event,
+ gpointer data)
{
/* We use the "foreground GC" for the widget since it already exists,
* but honestly any GC would work. The only thing to worry about
*/
gdk_draw_drawable (widget->window,
- widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
- pixmap,
- /* Only copy the area that was exposed. */
- event->area.x, event->area.y,
- event->area.x, event->area.y,
- event->area.width, event->area.height);
+ widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
+ pixmap,
+ /* Only copy the area that was exposed. */
+ event->area.x, event->area.y,
+ event->area.x, event->area.y,
+ event->area.width, event->area.height);
return FALSE;
}
/* Draw a rectangle on the screen */
static void
draw_brush (GtkWidget *widget,
- gdouble x,
- gdouble y)
+ gdouble x,
+ gdouble y)
{
GdkRectangle update_rect;
/* Now invalidate the affected region of the drawing area. */
gdk_window_invalidate_rect (widget->window,
- &update_rect,
- FALSE);
+ &update_rect,
+ FALSE);
}
static gboolean
-scribble_button_press_event (GtkWidget *widget,
- GdkEventButton *event,
- gpointer data)
+scribble_button_press_event (GtkWidget *widget,
+ GdkEventButton *event,
+ gpointer data)
{
if (pixmap == NULL)
return FALSE; /* paranoia check, in case we haven't gotten a configure event */
}
static gboolean
-scribble_motion_notify_event (GtkWidget *widget,
- GdkEventMotion *event,
- gpointer data)
+scribble_motion_notify_event (GtkWidget *widget,
+ GdkEventMotion *event,
+ gpointer data)
{
int x, y;
GdkModifierType state;
static gboolean
-checkerboard_expose (GtkWidget *da,
- GdkEventExpose *event,
- gpointer data)
+checkerboard_expose (GtkWidget *da,
+ GdkEventExpose *event,
+ gpointer data)
{
gint i, j, xcount, ycount;
GdkGC *gc1, *gc2;
j = SPACING;
ycount = xcount % 2; /* start with even/odd depending on row */
while (j < da->allocation.height)
- {
- GdkGC *gc;
-
- if (ycount % 2)
- gc = gc1;
- else
- gc = gc2;
-
- /* If we're outside event->area, this will do nothing.
- * It might be mildly more efficient if we handled
- * the clipping ourselves, but again we're feeling lazy.
- */
- gdk_draw_rectangle (da->window,
- gc,
- TRUE,
- i, j,
- CHECK_SIZE,
- CHECK_SIZE);
-
- j += CHECK_SIZE + SPACING;
- ++ycount;
- }
+ {
+ GdkGC *gc;
+
+ if (ycount % 2)
+ gc = gc1;
+ else
+ gc = gc2;
+
+ /* If we're outside event->area, this will do nothing.
+ * It might be mildly more efficient if we handled
+ * the clipping ourselves, but again we're feeling lazy.
+ */
+ gdk_draw_rectangle (da->window,
+ gc,
+ TRUE,
+ i, j,
+ CHECK_SIZE,
+ CHECK_SIZE);
+
+ j += CHECK_SIZE + SPACING;
+ ++ycount;
+ }
i += CHECK_SIZE + SPACING;
++xcount;
label = gtk_label_new (NULL);
gtk_label_set_markup (GTK_LABEL (label),
- "<u>Checkerboard pattern</u>");
+ "<u>Checkerboard pattern</u>");
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
frame = gtk_frame_new (NULL);
gtk_container_add (GTK_CONTAINER (frame), da);
gtk_signal_connect (GTK_OBJECT (da),
- "expose_event",
- GTK_SIGNAL_FUNC (checkerboard_expose),
- NULL);
+ "expose_event",
+ GTK_SIGNAL_FUNC (checkerboard_expose),
+ NULL);
/*
* Create the scribble area
label = gtk_label_new (NULL);
gtk_label_set_markup (GTK_LABEL (label),
- "<u>Scribble area</u>");
+ "<u>Scribble area</u>");
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
frame = gtk_frame_new (NULL);
/* Signals used to handle backing pixmap */
gtk_signal_connect (GTK_OBJECT (da), "expose_event",
- GTK_SIGNAL_FUNC (scribble_expose_event), NULL);
+ GTK_SIGNAL_FUNC (scribble_expose_event), NULL);
gtk_signal_connect (GTK_OBJECT (da),"configure_event",
- GTK_SIGNAL_FUNC (scribble_configure_event), NULL);
+ GTK_SIGNAL_FUNC (scribble_configure_event), NULL);
/* Event signals */
gtk_signal_connect (GTK_OBJECT (da), "motion_notify_event",
- GTK_SIGNAL_FUNC (scribble_motion_notify_event), NULL);
+ GTK_SIGNAL_FUNC (scribble_motion_notify_event), NULL);
gtk_signal_connect (GTK_OBJECT (da), "button_press_event",
- GTK_SIGNAL_FUNC (scribble_button_press_event), NULL);
+ GTK_SIGNAL_FUNC (scribble_button_press_event), NULL);
/* Ask to receive events the drawing area doesn't normally
* subscribe to
*/
gtk_widget_set_events (da, gtk_widget_get_events (da)
- | GDK_LEAVE_NOTIFY_MASK
- | GDK_BUTTON_PRESS_MASK
- | GDK_POINTER_MOTION_MASK
- | GDK_POINTER_MOTION_HINT_MASK);
+ | GDK_LEAVE_NOTIFY_MASK
+ | GDK_BUTTON_PRESS_MASK
+ | GDK_POINTER_MOTION_MASK
+ | GDK_POINTER_MOTION_HINT_MASK);
}
static FILE* image_stream = NULL;
static void
-progressive_prepared_callback (GdkPixbufLoader* loader, gpointer data)
+progressive_prepared_callback (GdkPixbufLoader *loader,
+ gpointer data)
{
- GdkPixbuf* pixbuf;
- GtkWidget* image;
+ GdkPixbuf *pixbuf;
+ GtkWidget *image;
image = GTK_WIDGET (data);
gtk_image_set_from_pixbuf (GTK_IMAGE (image), pixbuf);
}
-static void
-progressive_updated_callback (GdkPixbufLoader* loader,
- gint x, gint y, gint width, gint height,
- gpointer data)
+static void progressive_updated_callback (GdkPixbufLoader *loader,
+ gint x,
+ gint y,
+ gint width,
+ gint height,
+ gpointer data)
{
- GtkWidget* image;
+ GtkWidget *image;
image = GTK_WIDGET (data);
bytes_read = fread (buf, 1, 256, image_stream);
if (ferror (image_stream))
- {
- GtkWidget *dialog;
-
- dialog = gtk_message_dialog_new (GTK_WINDOW (window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_CLOSE,
- "Failure reading image file 'alphatest.png': %s",
- g_strerror (errno));
-
- gtk_signal_connect (GTK_OBJECT (dialog),
- "response",
- GTK_SIGNAL_FUNC (gtk_widget_destroy),
- NULL);
-
- fclose (image_stream);
- image_stream = NULL;
-
- gtk_widget_show (dialog);
-
- load_timeout = 0;
-
- return FALSE; /* uninstall the timeout */
- }
+ {
+ GtkWidget *dialog;
+
+ dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ "Failure reading image file 'alphatest.png': %s",
+ g_strerror (errno));
+
+ gtk_signal_connect (GTK_OBJECT (dialog),
+ "response",
+ GTK_SIGNAL_FUNC (gtk_widget_destroy),
+ NULL);
+
+ fclose (image_stream);
+ image_stream = NULL;
+
+ gtk_widget_show (dialog);
+
+ load_timeout = 0;
+
+ return FALSE; /* uninstall the timeout */
+ }
if (!gdk_pixbuf_loader_write (pixbuf_loader,
- buf, bytes_read,
- &error))
- {
- GtkWidget *dialog;
-
- dialog = gtk_message_dialog_new (GTK_WINDOW (window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_CLOSE,
- "Failed to load image: %s",
- error->message);
-
- g_error_free (error);
-
- gtk_signal_connect (GTK_OBJECT (dialog),
- "response",
- GTK_SIGNAL_FUNC (gtk_widget_destroy),
- NULL);
-
- fclose (image_stream);
- image_stream = NULL;
-
- gtk_widget_show (dialog);
-
- load_timeout = 0;
-
- return FALSE; /* uninstall the timeout */
- }
+ buf, bytes_read,
+ &error))
+ {
+ GtkWidget *dialog;
+
+ dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ "Failed to load image: %s",
+ error->message);
+
+ g_error_free (error);
+
+ gtk_signal_connect (GTK_OBJECT (dialog),
+ "response",
+ GTK_SIGNAL_FUNC (gtk_widget_destroy),
+ NULL);
+
+ fclose (image_stream);
+ image_stream = NULL;
+
+ gtk_widget_show (dialog);
+
+ load_timeout = 0;
+
+ return FALSE; /* uninstall the timeout */
+ }
if (feof (image_stream))
- {
- fclose (image_stream);
- image_stream = NULL;
-
- /* Errors can happen on close, e.g. if the image
- * file was truncated we'll know on close that
- * it was incomplete.
- */
- error = NULL;
- if (!gdk_pixbuf_loader_close (pixbuf_loader,
- &error))
- {
- GtkWidget *dialog;
-
- dialog = gtk_message_dialog_new (GTK_WINDOW (window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_CLOSE,
- "Failed to load image: %s",
- error->message);
-
- g_error_free (error);
-
- gtk_signal_connect (GTK_OBJECT (dialog),
- "response",
- GTK_SIGNAL_FUNC (gtk_widget_destroy),
- NULL);
-
- gtk_widget_show (dialog);
-
- g_object_unref (G_OBJECT (pixbuf_loader));
- pixbuf_loader = NULL;
-
- load_timeout = 0;
-
- return FALSE; /* uninstall the timeout */
- }
-
- g_object_unref (G_OBJECT (pixbuf_loader));
- pixbuf_loader = NULL;
- }
+ {
+ fclose (image_stream);
+ image_stream = NULL;
+
+ /* Errors can happen on close, e.g. if the image
+ * file was truncated we'll know on close that
+ * it was incomplete.
+ */
+ error = NULL;
+ if (!gdk_pixbuf_loader_close (pixbuf_loader,
+ &error))
+ {
+ GtkWidget *dialog;
+
+ dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ "Failed to load image: %s",
+ error->message);
+
+ g_error_free (error);
+
+ gtk_signal_connect (GTK_OBJECT (dialog),
+ "response",
+ GTK_SIGNAL_FUNC (gtk_widget_destroy),
+ NULL);
+
+ gtk_widget_show (dialog);
+
+ g_object_unref (G_OBJECT (pixbuf_loader));
+ pixbuf_loader = NULL;
+
+ load_timeout = 0;
+
+ return FALSE; /* uninstall the timeout */
+ }
+
+ g_object_unref (G_OBJECT (pixbuf_loader));
+ pixbuf_loader = NULL;
+ }
}
else
{
const gchar *filename;
if (g_file_test ("./alphatest.png", G_FILE_TEST_EXISTS))
- filename = "./alphatest.png";
+ filename = "./alphatest.png";
else
- filename = DEMOCODEDIR"/alphatest.png";
+ filename = DEMOCODEDIR"/alphatest.png";
image_stream = fopen (filename, "r");
if (image_stream == NULL)
- {
- GtkWidget *dialog;
-
- dialog = gtk_message_dialog_new (GTK_WINDOW (window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_CLOSE,
- "Unable to open image file 'alphatest.png': %s",
- g_strerror (errno));
-
- gtk_signal_connect (GTK_OBJECT (dialog),
- "response",
- GTK_SIGNAL_FUNC (gtk_widget_destroy),
- NULL);
-
- gtk_widget_show (dialog);
-
- load_timeout = 0;
-
- return FALSE; /* uninstall the timeout */
- }
+ {
+ GtkWidget *dialog;
+
+ dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ "Unable to open image file 'alphatest.png': %s",
+ g_strerror (errno));
+
+ gtk_signal_connect (GTK_OBJECT (dialog),
+ "response",
+ GTK_SIGNAL_FUNC (gtk_widget_destroy),
+ NULL);
+
+ gtk_widget_show (dialog);
+
+ load_timeout = 0;
+
+ return FALSE; /* uninstall the timeout */
+ }
if (pixbuf_loader)
- {
- gdk_pixbuf_loader_close (pixbuf_loader, NULL);
- g_object_unref (G_OBJECT (pixbuf_loader));
- pixbuf_loader = NULL;
- }
+ {
+ gdk_pixbuf_loader_close (pixbuf_loader, NULL);
+ g_object_unref (G_OBJECT (pixbuf_loader));
+ pixbuf_loader = NULL;
+ }
pixbuf_loader = gdk_pixbuf_loader_new ();
g_signal_connect_data (G_OBJECT (pixbuf_loader),
- "area_prepared",
- G_CALLBACK (progressive_prepared_callback),
- image,
- NULL, FALSE, FALSE);
+ "area_prepared",
+ G_CALLBACK (progressive_prepared_callback),
+ image,
+ NULL, FALSE, FALSE);
g_signal_connect_data (G_OBJECT (pixbuf_loader),
- "area_updated",
- G_CALLBACK (progressive_updated_callback),
- image,
- NULL, FALSE, FALSE);
+ "area_updated",
+ G_CALLBACK (progressive_updated_callback),
+ image,
+ NULL, FALSE, FALSE);
}
/* leave timeout installed */
* pauses in the reading process.
*/
load_timeout = g_timeout_add (150,
- progressive_timeout,
- image);
+ progressive_timeout,
+ image);
}
static void
cleanup_callback (GtkObject *object,
- gpointer data)
+ gpointer data)
{
if (load_timeout)
{
label = gtk_label_new (NULL);
gtk_label_set_markup (GTK_LABEL (label),
- "<u>Image loaded from a file</u>");
+ "<u>Image loaded from a file</u>");
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
frame = gtk_frame_new (NULL);
* so you can run gtk-demo without installing GTK
*/
if (g_file_test ("./gtk-logo-rgb.gif", G_FILE_TEST_EXISTS))
- {
- /* This code shows off error handling. You can just use
- * gtk_image_new_from_file() instead if you don't want to report
- * errors to the user. If the file doesn't load when using
- * gtk_image_new_from_file(), a "missing image" icon will
- * be displayed instead.
- */
- GdkPixbuf *pixbuf;
- GError *error = NULL;
-
- pixbuf = gdk_pixbuf_new_from_file ("./gtk-logo-rgb.gif",
- &error);
- if (error)
- {
- GtkWidget *dialog;
-
- dialog = gtk_message_dialog_new (GTK_WINDOW (window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_CLOSE,
- "Unable to open image file 'gtk-logo-rgb.gif': %s",
- error->message);
- g_error_free (error);
-
- gtk_signal_connect (GTK_OBJECT (dialog),
- "response",
- GTK_SIGNAL_FUNC (gtk_widget_destroy),
- NULL);
-
- gtk_widget_show (dialog);
- }
-
- image = gtk_image_new_from_pixbuf (pixbuf);
- }
+ {
+ /* This code shows off error handling. You can just use
+ * gtk_image_new_from_file() instead if you don't want to report
+ * errors to the user. If the file doesn't load when using
+ * gtk_image_new_from_file(), a "missing image" icon will
+ * be displayed instead.
+ */
+ GdkPixbuf *pixbuf;
+ GError *error = NULL;
+
+ pixbuf = gdk_pixbuf_new_from_file ("./gtk-logo-rgb.gif",
+ &error);
+ if (error)
+ {
+ GtkWidget *dialog;
+
+ dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ "Unable to open image file 'gtk-logo-rgb.gif': %s",
+ error->message);
+ g_error_free (error);
+
+ gtk_signal_connect (GTK_OBJECT (dialog),
+ "response",
+ GTK_SIGNAL_FUNC (gtk_widget_destroy),
+ NULL);
+
+ gtk_widget_show (dialog);
+ }
+
+ image = gtk_image_new_from_pixbuf (pixbuf);
+ }
else
- {
- /* This is the simpler code, with no error handling.
- * Here we're loading the installed gtk-logo-rgb.gif instead
- * of the one in the current directory.
- */
- image = gtk_image_new_from_file (DEMOCODEDIR"/gtk-logo-rgb.gif");
- }
+ {
+ /* This is the simpler code, with no error handling.
+ * Here we're loading the installed gtk-logo-rgb.gif instead
+ * of the one in the current directory.
+ */
+ image = gtk_image_new_from_file (DEMOCODEDIR"/gtk-logo-rgb.gif");
+ }
gtk_container_add (GTK_CONTAINER (frame), image);
label = gtk_label_new (NULL);
gtk_label_set_markup (GTK_LABEL (label),
- "<u>Animation loaded from a file</u>");
+ "<u>Animation loaded from a file</u>");
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
frame = gtk_frame_new (NULL);
* so you can run gtk-demo without installing GTK
*/
if (g_file_test ("./floppybuddy.gif", G_FILE_TEST_EXISTS))
- image = gtk_image_new_from_file ("./floppybuddy.gif");
+ image = gtk_image_new_from_file ("./floppybuddy.gif");
else
- image = gtk_image_new_from_file (DEMOCODEDIR"/floppybuddy.gif");
+ image = gtk_image_new_from_file (DEMOCODEDIR"/floppybuddy.gif");
gtk_container_add (GTK_CONTAINER (frame), image);
label = gtk_label_new (NULL);
gtk_label_set_markup (GTK_LABEL (label),
- "<u>Progressive image loading</u>");
+ "<u>Progressive image loading</u>");
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
frame = gtk_frame_new (NULL);
#include <gtk/gtk.h>
static void
-gtk_ifactory_cb (gpointer callback_data,
- guint callback_action,
- GtkWidget *widget)
+gtk_ifactory_cb (gpointer callback_data,
+ guint callback_action,
+ GtkWidget *widget)
{
- g_message ("ItemFactory: activated \"%s\"", gtk_item_factory_path_from_widget (widget));
+ g_message ("ItemFactory: activated \"%s\"",
+ gtk_item_factory_path_from_widget (widget));
}
static GtkItemFactoryEntry menu_items[] =
{
- { "/_File", NULL, 0, 0, "<Branch>" },
- { "/File/tearoff1", NULL, gtk_ifactory_cb, 0, "<Tearoff>" },
- { "/File/_New", "<control>N", gtk_ifactory_cb, 0 },
- { "/File/_Open", "<control>O", gtk_ifactory_cb, 0 },
- { "/File/_Save", "<control>S", gtk_ifactory_cb, 0 },
- { "/File/Save _As...", NULL, gtk_ifactory_cb, 0 },
- { "/File/sep1", NULL, gtk_ifactory_cb, 0, "<Separator>" },
- { "/File/_Quit", "<control>Q", gtk_ifactory_cb, 0 },
-
- { "/_Preferences", NULL, 0, 0, "<Branch>" },
- { "/_Preferences/_Color", NULL, 0, 0, "<Branch>" },
- { "/_Preferences/Color/_Red", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
- { "/_Preferences/Color/_Green", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
- { "/_Preferences/Color/_Blue", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
- { "/_Preferences/_Shape", NULL, 0, 0, "<Branch>" },
- { "/_Preferences/Shape/_Square", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
- { "/_Preferences/Shape/_Rectangle", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Square" },
- { "/_Preferences/Shape/_Oval", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Rectangle" },
-
- { "/_Help", NULL, 0, 0, "<LastBranch>" },
- { "/Help/_About", NULL, gtk_ifactory_cb, 0 },
+ { "/_File", NULL, 0, 0, "<Branch>" },
+ { "/File/tearoff1", NULL, gtk_ifactory_cb, 0, "<Tearoff>" },
+ { "/File/_New", "<control>N", gtk_ifactory_cb, 0 },
+ { "/File/_Open", "<control>O", gtk_ifactory_cb, 0 },
+ { "/File/_Save", "<control>S", gtk_ifactory_cb, 0 },
+ { "/File/Save _As...", NULL, gtk_ifactory_cb, 0 },
+ { "/File/sep1", NULL, gtk_ifactory_cb, 0, "<Separator>" },
+ { "/File/_Quit", "<control>Q", gtk_ifactory_cb, 0 },
+
+ { "/_Preferences", NULL, 0, 0, "<Branch>" },
+ { "/_Preferences/_Color", NULL, 0, 0, "<Branch>" },
+ { "/_Preferences/Color/_Red", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
+ { "/_Preferences/Color/_Green", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
+ { "/_Preferences/Color/_Blue", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
+ { "/_Preferences/_Shape", NULL, 0, 0, "<Branch>" },
+ { "/_Preferences/Shape/_Square", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
+ { "/_Preferences/Shape/_Rectangle", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Square" },
+ { "/_Preferences/Shape/_Oval", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Rectangle" },
+
+ { "/_Help", NULL, 0, 0, "<LastBranch>" },
+ { "/Help/_About", NULL, gtk_ifactory_cb, 0 },
};
static int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
/* preselect /Preferences/Shape/Oval over the other radios
*/
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gtk_item_factory_get_item (item_factory,
- "/Preferences/Shape/Oval")),
- TRUE);
+ gtk_check_menu_item_set_active
+ (GTK_CHECK_MENU_ITEM (gtk_item_factory_get_item (item_factory,
+ "/Preferences/Shape/Oval")),
+ TRUE);
box1 = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (window), box1);
return n_read > 0;
}
+
+/* Stupid syntax highlighting.
+ *
+ * No regex was used in the making of this highlighting.
+ * It should only work for simple cases. This is good, as
+ * that's all we should have in the demos.
+ */
+/* This code should not be used elsewhere, except perhaps as an example of how
+ * to iterate through a text buffer.
+ */
+enum {
+ STATE_NORMAL,
+ STATE_IN_COMMENT,
+};
+
+static gchar *tokens[] =
+{
+ "/*",
+ "\"",
+ NULL
+};
+
+static gchar *types[] =
+{
+ "static",
+ "const ",
+ "void",
+ "gint",
+ "int ",
+ "char ",
+ "gchar ",
+ "gfloat",
+ "float",
+ "gint8",
+ "gint16",
+ "gint32",
+ "guint",
+ "guint8",
+ "guint16",
+ "guint32",
+ "guchar",
+ "glong",
+ "gboolean" ,
+ "gshort",
+ "gushort",
+ "gulong",
+ "gdouble",
+ "gldouble",
+ "gpointer",
+ "NULL",
+ "GList",
+ "GSList",
+ "FALSE",
+ "TRUE",
+ "FILE ",
+ "GtkObject ",
+ "GtkColorSelection ",
+ "GtkWidget ",
+ "GtkButton ",
+ "GdkColor ",
+ "GdkRectangle ",
+ "GdkEventExpose ",
+ "GdkGC ",
+ "GdkPixbufLoader ",
+ "GdkPixbuf ",
+ "GError",
+ "size_t",
+ NULL
+};
+
+static gchar *control[] =
+{
+ " if ",
+ " while ",
+ " else",
+ " do ",
+ " for ",
+ "?",
+ ":",
+ "return ",
+ "goto ",
+ NULL
+};
+void
+parse_chars (gchar *text,
+ gchar **end_ptr,
+ gint *state,
+ gchar **tag,
+ gboolean start)
+{
+ gint i;
+ gchar *next_token;
+
+ /* Handle comments first */
+ if (*state == STATE_IN_COMMENT)
+ {
+ *end_ptr = strstr (text, "*/");
+ if (*end_ptr)
+ {
+ *end_ptr += 2;
+ *state = STATE_NORMAL;
+ *tag = "comment";
+ }
+ return;
+ }
+
+ *tag = NULL;
+ *end_ptr = NULL;
+
+ /* check for comment */
+ if (!strncmp (text, "/*", 2))
+ {
+ *end_ptr = strstr (text, "*/");
+ if (*end_ptr)
+ *end_ptr += 2;
+ else
+ *state = STATE_IN_COMMENT;
+ *tag = "comment";
+ return;
+ }
+
+ /* check for preprocessor defines */
+ if (*text == '#' && start)
+ {
+ *end_ptr = NULL;
+ *tag = "preprocessor";
+ return;
+ }
+
+ /* functions */
+ if (start && * text != '\t' && *text != ' ' && *text != '{' && *text != '}')
+ {
+ if (strstr (text, "("))
+ {
+ *end_ptr = strstr (text, "(");
+ *tag = "function";
+ return;
+ }
+ }
+ /* check for types */
+ for (i = 0; types[i] != NULL; i++)
+ if (!strncmp (text, types[i], strlen (types[i])))
+ {
+ *end_ptr = text + strlen (types[i]);
+ *tag = "type";
+ return;
+ }
+
+ /* check for control */
+ for (i = 0; control[i] != NULL; i++)
+ if (!strncmp (text, control[i], strlen (control[i])))
+ {
+ *end_ptr = text + strlen (control[i]);
+ *tag = "control";
+ return;
+ }
+
+ /* check for string */
+ if (text[0] == '"')
+ {
+ gint maybe_escape = FALSE;
+
+ *end_ptr = text + 1;
+ *tag = "string";
+ while (**end_ptr != '\000')
+ {
+ if (**end_ptr == '\"' && !maybe_escape)
+ {
+ *end_ptr += 1;
+ return;
+ }
+ if (**end_ptr == '\\')
+ maybe_escape = TRUE;
+ else
+ maybe_escape = FALSE;
+ *end_ptr += 1;
+ }
+ return;
+ }
+
+ /* not at the start of a tag. Find the next one. */
+ for (i = 0; tokens[i] != NULL; i++)
+ {
+ next_token = strstr (text, tokens[i]);
+ if (next_token)
+ {
+ if (*end_ptr)
+ *end_ptr = (*end_ptr<next_token)?*end_ptr:next_token;
+ else
+ *end_ptr = next_token;
+ }
+ }
+
+ for (i = 0; types[i] != NULL; i++)
+ {
+ next_token = strstr (text, types[i]);
+ if (next_token)
+ {
+ if (*end_ptr)
+ *end_ptr = (*end_ptr<next_token)?*end_ptr:next_token;
+ else
+ *end_ptr = next_token;
+ }
+ }
+
+ for (i = 0; control[i] != NULL; i++)
+ {
+ next_token = strstr (text, control[i]);
+ if (next_token)
+ {
+ if (*end_ptr)
+ *end_ptr = (*end_ptr<next_token)?*end_ptr:next_token;
+ else
+ *end_ptr = next_token;
+ }
+ }
+}
+
+/* While not as cool as c-mode, this will do as a quick attempt at highlighting */
+static void
+fontify ()
+{
+ GtkTextIter start_iter, next_iter, tmp_iter;
+ gint state;
+ gchar *text;
+ gchar *start_ptr, *end_ptr;
+ gchar *tag;
+
+ state = STATE_NORMAL;
+
+ gtk_text_buffer_get_iter_at_offset (source_buffer, &start_iter, 0);
+
+ next_iter = start_iter;
+ while (gtk_text_iter_forward_line (&next_iter))
+ {
+ gboolean start = TRUE;
+ start_ptr = text = gtk_text_iter_get_text (&start_iter, &next_iter);
+
+ do
+ {
+ parse_chars (start_ptr, &end_ptr, &state, &tag, start);
+
+ start = FALSE;
+ if (end_ptr)
+ {
+ tmp_iter = start_iter;
+ gtk_text_iter_forward_chars (&tmp_iter, end_ptr - start_ptr);
+ }
+ else
+ {
+ tmp_iter = next_iter;
+ }
+ if (tag)
+ gtk_text_buffer_apply_tag_by_name (info_buffer, tag, &start_iter, &tmp_iter);
+
+ start_iter = tmp_iter;
+ start_ptr = end_ptr;
+ }
+ while (end_ptr);
+
+ g_free (text);
+ start_iter = next_iter;
+ }
+}
+
void
load_file (const gchar *filename)
{
}
}
- gtk_text_buffer_get_bounds (source_buffer, &start, &end);
- gtk_text_buffer_apply_tag_by_name (info_buffer, "source", &start, &end);
+ fontify ();
g_string_free (buffer, TRUE);
}
if (is_source)
{
- font_desc = pango_font_description_from_string ("Courier 10");
+ font_desc = pango_font_description_from_string ("Courier 14");
gtk_widget_modify_font (text_view, font_desc);
pango_font_description_free (font_desc);
"font", "Sans 18",
NULL);
- tag = gtk_text_buffer_create_tag (info_buffer, "source",
- "font", "Courier 10",
- "pixels_above_lines", 0,
- "pixels_below_lines", 0,
+ tag = gtk_text_buffer_create_tag (info_buffer, "comment",
+ "foreground", "blue",
+ NULL);
+ tag = gtk_text_buffer_create_tag (info_buffer, "type",
+ "foreground", "red",
+ NULL);
+ tag = gtk_text_buffer_create_tag (info_buffer, "string",
+ "foreground", "SpringGreen3",
+ "weight", PANGO_WEIGHT_BOLD,
+ NULL);
+ tag = gtk_text_buffer_create_tag (info_buffer, "control",
+ "foreground", "purple",
+ NULL);
+ tag = gtk_text_buffer_create_tag (info_buffer, "preprocessor",
+ "style", PANGO_STYLE_OBLIQUE,
+ "foreground", "burlywood4",
+ NULL);
+ tag = gtk_text_buffer_create_tag (info_buffer, "function",
+ "weight", PANGO_WEIGHT_BOLD,
+ "foreground", "DarkGoldenrod4",
NULL);
gtk_window_set_default_size (GTK_WINDOW (window), 600, 400);
*
*/
-#include <stdio.h>
-
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
-static GtkWidget*
-create_menu (gint depth, gboolean tearoff)
+#include <stdio.h>
+
+static GtkWidget *
+create_menu (gint depth,
+ gboolean tearoff)
{
GtkWidget *menu;
GtkWidget *menuitem;
return window;
}
-
#include <gtk/gtk.h>
void
-toggle_resize (GtkWidget *widget, GtkWidget *child)
+toggle_resize (GtkWidget *widget,
+ GtkWidget *child)
{
GtkPaned *paned = GTK_PANED (child->parent);
gboolean is_child1 = (child == paned->child1);
}
void
-toggle_shrink (GtkWidget *widget, GtkWidget *child)
+toggle_shrink (GtkWidget *widget,
+ GtkWidget *child)
{
GtkPaned *paned = GTK_PANED (child->parent);
gboolean is_child1 = (child == paned->child1);
}
GtkWidget *
-create_pane_options (GtkPaned *paned,
+create_pane_options (GtkPaned *paned,
const gchar *frame_label,
const gchar *label1,
const gchar *label2)
* off how to use GtkDrawingArea to do a simple animation.
*
* Look at the Image demo for additional pixbuf usage examples.
- *
+ *
*/
#include <config.h>
#include <gtk/gtk.h>
#include <math.h>
-\f
-
#define FRAME_DELAY 50
#define RELATIVE_BACKGROUND_NAME "background.jpg"
/* Background image */
static GdkPixbuf *background;
-static int back_width, back_height;
+static gint back_width, back_height;
/* Images */
static GdkPixbuf *images[N_IMAGES];
/* Widgets */
static GtkWidget *da;
-\f
-
/* Loads the images for the demo and returns whether the operation succeeded */
static gboolean
load_pixbufs (GError **error)
{
- int i;
- const char **image_names;
+ gint i;
+ const gchar **image_names;
if (background)
return TRUE; /* already loaded earlier */
-
+
background = gdk_pixbuf_new_from_file (RELATIVE_BACKGROUND_NAME, NULL);
if (!background)
if (!background)
return FALSE; /* note that "error" was filled in and returned */
-
+
back_width = gdk_pixbuf_get_width (background);
back_height = gdk_pixbuf_get_height (background);
image_names = relative_image_names;
else
image_names = installed_image_names;
-
+
for (i = 0; i < N_IMAGES; i++)
{
images[i] = gdk_pixbuf_new_from_file (image_names[i], error);
if (!images[i])
- return FALSE; /* Note that "error" was filled with a GError */
+ return FALSE; /* Note that "error" was filled with a GError */
}
return TRUE;
/* Expose callback for the drawing area */
static gint
-expose_cb (GtkWidget *widget, GdkEventExpose *event, gpointer data)
+expose_cb (GtkWidget *widget,
+ GdkEventExpose *event,
+ gpointer data)
{
guchar *pixels;
int rowstride;
rowstride = gdk_pixbuf_get_rowstride (frame);
pixels = gdk_pixbuf_get_pixels (frame) + rowstride * event->area.y + event->area.x * 3;
-
+
gdk_draw_rgb_image_dithalign (widget->window,
- widget->style->black_gc,
- event->area.x, event->area.y,
- event->area.width, event->area.height,
- GDK_RGB_DITHER_NORMAL,
- pixels, rowstride,
- event->area.x, event->area.y);
+ widget->style->black_gc,
+ event->area.x, event->area.y,
+ event->area.width, event->area.height,
+ GDK_RGB_DITHER_NORMAL,
+ pixels, rowstride,
+ event->area.x, event->area.y);
return TRUE;
}
double radius;
gdk_pixbuf_copy_area (background, 0, 0, back_width, back_height,
- frame, 0, 0);
+ frame, 0, 0);
f = (double) (frame_num % CYCLE_LEN) / CYCLE_LEN;
r2.height = back_height;
if (gdk_rectangle_intersect (&r1, &r2, &dest))
- gdk_pixbuf_composite (images[i],
- frame,
- dest.x, dest.y,
- dest.width, dest.height,
- xpos, ypos,
- k, k,
- GDK_INTERP_NEAREST,
- ((i & 1)
- ? MAX (127, fabs (255 * sin (f * 2.0 * M_PI)))
- : MAX (127, fabs (255 * cos (f * 2.0 * M_PI)))));
+ gdk_pixbuf_composite (images[i],
+ frame,
+ dest.x, dest.y,
+ dest.width, dest.height,
+ xpos, ypos,
+ k, k,
+ GDK_INTERP_NEAREST,
+ ((i & 1)
+ ? MAX (127, fabs (255 * sin (f * 2.0 * M_PI)))
+ : MAX (127, fabs (255 * cos (f * 2.0 * M_PI)))));
}
gtk_widget_queue_draw (da);
static void
cleanup_callback (GtkObject *object,
- gpointer data)
+ gpointer data)
{
g_source_remove (timeout_id);
timeout_id = 0;
{
GError *error;
-
+
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Pixbufs");
gtk_window_set_resizeable (GTK_WINDOW (window), FALSE);
-
+
gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroyed), &window);
gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (cleanup_callback), NULL);
-
+
error = NULL;
if (!load_pixbufs (&error))
- {
- GtkWidget *dialog;
-
- dialog = gtk_message_dialog_new (GTK_WINDOW (window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_CLOSE,
- "Failed to load an image: %s",
- error->message);
-
- g_error_free (error);
-
- gtk_signal_connect (GTK_OBJECT (dialog),
- "response",
- GTK_SIGNAL_FUNC (gtk_widget_destroy),
- NULL);
-
- gtk_widget_show (dialog);
- }
+ {
+ GtkWidget *dialog;
+
+ dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ "Failed to load an image: %s",
+ error->message);
+
+ g_error_free (error);
+
+ gtk_signal_connect (GTK_OBJECT (dialog),
+ "response",
+ GTK_SIGNAL_FUNC (gtk_widget_destroy),
+ NULL);
+
+ gtk_widget_show (dialog);
+ }
else
- {
- gtk_widget_set_usize (window, back_width, back_height);
-
- frame = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, back_width, back_height);
-
- da = gtk_drawing_area_new ();
-
- gtk_signal_connect (GTK_OBJECT (da), "expose_event",
- GTK_SIGNAL_FUNC (expose_cb), NULL);
-
- gtk_container_add (GTK_CONTAINER (window), da);
-
- timeout_id = gtk_timeout_add (FRAME_DELAY, timeout, NULL);
- }
+ {
+ gtk_widget_set_usize (window, back_width, back_height);
+
+ frame = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, back_width, back_height);
+
+ da = gtk_drawing_area_new ();
+
+ gtk_signal_connect (GTK_OBJECT (da), "expose_event",
+ GTK_SIGNAL_FUNC (expose_cb), NULL);
+
+ gtk_container_add (GTK_CONTAINER (window), da);
+
+ timeout_id = gtk_timeout_add (FRAME_DELAY, timeout, NULL);
+ }
}
-
+
if (!GTK_WIDGET_VISIBLE (window))
{
gtk_widget_show_all (window);
/* Don't copy this bad example; inline RGB data is always a better
* idea than inline XPMs.
*/
-static char *book_closed_xpm[] = {
+static char *book_closed_xpm[] = {
"16 16 6 1",
-" c None s None",
-". c black",
-"X c red",
-"o c yellow",
-"O c #808080",
-"# c white",
-" ",
-" .. ",
-" ..XX. ",
-" ..XXXXX. ",
-" ..XXXXXXXX. ",
-".ooXXXXXXXXX. ",
-"..ooXXXXXXXXX. ",
+" c None s None",
+". c black",
+"X c red",
+"o c yellow",
+"O c #808080",
+"# c white",
+" ",
+" .. ",
+" ..XX. ",
+" ..XXXXX. ",
+" ..XXXXXXXX. ",
+".ooXXXXXXXXX. ",
+"..ooXXXXXXXXX. ",
".X.ooXXXXXXXXX. ",
-".XX.ooXXXXXX.. ",
-" .XX.ooXXX..#O ",
+".XX.ooXXXXXX.. ",
+" .XX.ooXXX..#O ",
" .XX.oo..##OO. ",
-" .XX..##OO.. ",
-" .X.#OO.. ",
-" ..O.. ",
-" .. ",
-" "
+" .XX..##OO.. ",
+" .X.#OO.. ",
+" ..O.. ",
+" .. ",
+" "
};
* new copies of the same tags for every buffer.
*
* Tags are assigned default priorities in order of addition to the
- * tag table. That is, tags created later that affect the same text
+ * tag table. That is, tags created later that affect the same text
* property affected by an earlier tag will override the earlier
* tag. You can modify tag priorities with
* gtk_text_tag_set_priority().
*/
gtk_text_buffer_create_tag (buffer, "heading",
- "weight", PANGO_WEIGHT_BOLD,
- "size", 20 * PANGO_SCALE,
- NULL);
+ "weight", PANGO_WEIGHT_BOLD,
+ "size", 20 * PANGO_SCALE,
+ NULL);
gtk_text_buffer_create_tag (buffer, "italic",
- "style", PANGO_STYLE_ITALIC, NULL);
+ "style", PANGO_STYLE_ITALIC, NULL);
gtk_text_buffer_create_tag (buffer, "bold",
- "weight", PANGO_WEIGHT_BOLD, NULL);
+ "weight", PANGO_WEIGHT_BOLD, NULL);
gtk_text_buffer_create_tag (buffer, "big",
- /* points times the PANGO_SCALE factor */
- "size", 30 * PANGO_SCALE, NULL);
+ /* points times the PANGO_SCALE factor */
+ "size", 30 * PANGO_SCALE, NULL);
gtk_text_buffer_create_tag (buffer, "xx-small",
- "scale", PANGO_SCALE_XX_SMALL, NULL);
+ "scale", PANGO_SCALE_XX_SMALL, NULL);
gtk_text_buffer_create_tag (buffer, "x-large",
- "scale", PANGO_SCALE_X_LARGE, NULL);
+ "scale", PANGO_SCALE_X_LARGE, NULL);
gtk_text_buffer_create_tag (buffer, "monospace",
- "family", "monospace", NULL);
+ "family", "monospace", NULL);
gtk_text_buffer_create_tag (buffer, "blue_foreground",
- "foreground", "blue", NULL);
+ "foreground", "blue", NULL);
gtk_text_buffer_create_tag (buffer, "red_background",
- "background", "red", NULL);
+ "background", "red", NULL);
stipple = gdk_bitmap_create_from_data (NULL,
- gray50_bits, gray50_width,
- gray50_height);
+ gray50_bits, gray50_width,
+ gray50_height);
gtk_text_buffer_create_tag (buffer, "background_stipple",
- "background_stipple", stipple, NULL);
+ "background_stipple", stipple, NULL);
gtk_text_buffer_create_tag (buffer, "foreground_stipple",
- "foreground_stipple", stipple, NULL);
+ "foreground_stipple", stipple, NULL);
g_object_unref (G_OBJECT (stipple));
gtk_text_buffer_create_tag (buffer, "big_gap_before_line",
- "pixels_above_lines", 30, NULL);
+ "pixels_above_lines", 30, NULL);
gtk_text_buffer_create_tag (buffer, "big_gap_after_line",
- "pixels_below_lines", 30, NULL);
+ "pixels_below_lines", 30, NULL);
gtk_text_buffer_create_tag (buffer, "double_spaced_line",
- "pixels_inside_wrap", 10, NULL);
+ "pixels_inside_wrap", 10, NULL);
gtk_text_buffer_create_tag (buffer, "not_editable",
- "editable", FALSE, NULL);
+ "editable", FALSE, NULL);
gtk_text_buffer_create_tag (buffer, "word_wrap",
- "wrap_mode", GTK_WRAP_WORD, NULL);
+ "wrap_mode", GTK_WRAP_WORD, NULL);
gtk_text_buffer_create_tag (buffer, "char_wrap",
- "wrap_mode", GTK_WRAP_CHAR, NULL);
+ "wrap_mode", GTK_WRAP_CHAR, NULL);
gtk_text_buffer_create_tag (buffer, "no_wrap",
- "wrap_mode", GTK_WRAP_NONE, NULL);
+ "wrap_mode", GTK_WRAP_NONE, NULL);
gtk_text_buffer_create_tag (buffer, "center",
- "justification", GTK_JUSTIFY_CENTER, NULL);
+ "justification", GTK_JUSTIFY_CENTER, NULL);
gtk_text_buffer_create_tag (buffer, "right_justify",
- "justification", GTK_JUSTIFY_RIGHT, NULL);
+ "justification", GTK_JUSTIFY_RIGHT, NULL);
gtk_text_buffer_create_tag (buffer, "wide_margins",
- "left_margin", 50, "right_margin", 50,
- NULL);
+ "left_margin", 50, "right_margin", 50,
+ NULL);
gtk_text_buffer_create_tag (buffer, "strikethrough",
- "strikethrough", TRUE, NULL);
+ "strikethrough", TRUE, NULL);
gtk_text_buffer_create_tag (buffer, "underline",
- "underline", PANGO_UNDERLINE_SINGLE, NULL);
+ "underline", PANGO_UNDERLINE_SINGLE, NULL);
gtk_text_buffer_create_tag (buffer, "double_underline",
- "underline", PANGO_UNDERLINE_DOUBLE, NULL);
+ "underline", PANGO_UNDERLINE_DOUBLE, NULL);
gtk_text_buffer_create_tag (buffer, "superscript",
- "rise", 10 * PANGO_SCALE, /* 10 pixels */
- "size", 8 * PANGO_SCALE, /* 8 points */
- NULL);
+ "rise", 10 * PANGO_SCALE, /* 10 pixels */
+ "size", 8 * PANGO_SCALE, /* 8 points */
+ NULL);
gtk_text_buffer_create_tag (buffer, "subscript",
- "rise", -10 * PANGO_SCALE, /* 10 pixels */
- "size", 8 * PANGO_SCALE, /* 8 points */
- NULL);
+ "rise", -10 * PANGO_SCALE, /* 10 pixels */
+ "size", 8 * PANGO_SCALE, /* 8 points */
+ NULL);
gtk_text_buffer_create_tag (buffer, "rtl_quote",
- "wrap_mode", GTK_WRAP_WORD,
- "direction", GTK_TEXT_DIR_RTL,
- "indent", 30,
- "left_margin", 20,
- "right_margin", 20,
- NULL);
+ "wrap_mode", GTK_WRAP_WORD,
+ "direction", GTK_TEXT_DIR_RTL,
+ "indent", 30,
+ "left_margin", 20,
+ "right_margin", 20,
+ NULL);
}
static void
gtk_text_buffer_insert (buffer, &iter, "The text widget can display text with all kinds of nifty attributes. It also supports multiple views of the same buffer; this demo is showing the same buffer in two places.\n\n", -1);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "Font styles. ", -1,
- "heading", NULL);
+ "heading", NULL);
gtk_text_buffer_insert (buffer, &iter, "For example, you can have ", -1);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
- "italic", -1,
- "italic", NULL);
+ "italic", -1,
+ "italic", NULL);
gtk_text_buffer_insert (buffer, &iter, ", ", -1);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
- "bold", -1,
- "bold", NULL);
+ "bold", -1,
+ "bold", NULL);
gtk_text_buffer_insert (buffer, &iter, ", or ", -1);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
- "monospace (typewriter)", -1,
- "monospace", NULL);
+ "monospace (typewriter)", -1,
+ "monospace", NULL);
gtk_text_buffer_insert (buffer, &iter, ", or ", -1);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
- "big", -1,
- "big", NULL);
+ "big", -1,
+ "big", NULL);
gtk_text_buffer_insert (buffer, &iter, " text. ", -1);
gtk_text_buffer_insert (buffer, &iter, "It's best not to hardcode specific text sizes; you can use relative sizes as with CSS, such as ", -1);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
- "xx-small", -1,
- "xx-small", NULL);
+ "xx-small", -1,
+ "xx-small", NULL);
gtk_text_buffer_insert (buffer, &iter, " or ", -1);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
- "x-large", -1,
- "x-large", NULL);
+ "x-large", -1,
+ "x-large", NULL);
gtk_text_buffer_insert (buffer, &iter, " to ensure that your program properly adapts if the user changes the default font size.\n\n", -1);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "Colors. ", -1,
- "heading", NULL);
+ "heading", NULL);
gtk_text_buffer_insert (buffer, &iter, "Colors such as ", -1);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
- "a blue foreground", -1,
- "blue_foreground", NULL);
+ "a blue foreground", -1,
+ "blue_foreground", NULL);
gtk_text_buffer_insert (buffer, &iter, " or ", -1);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
- "a red background", -1,
- "red_background", NULL);
+ "a red background", -1,
+ "red_background", NULL);
gtk_text_buffer_insert (buffer, &iter, " or even ", -1);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
- "a stippled red background", -1,
- "red_background",
- "background_stipple",
- NULL);
+ "a stippled red background", -1,
+ "red_background",
+ "background_stipple",
+ NULL);
gtk_text_buffer_insert (buffer, &iter, " or ", -1);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
- "a stippled blue foreground on solid red background", -1,
- "blue_foreground",
- "red_background",
- "foreground_stipple",
- NULL);
+ "a stippled blue foreground on solid red background", -1,
+ "blue_foreground",
+ "red_background",
+ "foreground_stipple",
+ NULL);
gtk_text_buffer_insert (buffer, &iter, " (select that to read it) can be used.\n\n", -1);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "Underline, strikethrough, and rise. ", -1,
- "heading", NULL);
+ "heading", NULL);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
- "Strikethrough", -1,
- "strikethrough", NULL);
+ "Strikethrough", -1,
+ "strikethrough", NULL);
gtk_text_buffer_insert (buffer, &iter, ", ", -1);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
- "underline", -1,
- "underline", NULL);
+ "underline", -1,
+ "underline", NULL);
gtk_text_buffer_insert (buffer, &iter, ", ", -1);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
- "double underline", -1,
- "double_underline", NULL);
+ "double underline", -1,
+ "double_underline", NULL);
gtk_text_buffer_insert (buffer, &iter, ", ", -1);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
- "superscript", -1,
- "superscript", NULL);
+ "superscript", -1,
+ "superscript", NULL);
gtk_text_buffer_insert (buffer, &iter, ", and ", -1);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
- "subscript", -1,
- "subscript", NULL);
+ "subscript", -1,
+ "subscript", NULL);
gtk_text_buffer_insert (buffer, &iter, " are all supported.\n\n", -1);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "Images. ", -1,
- "heading", NULL);
+ "heading", NULL);
gtk_text_buffer_insert (buffer, &iter, "The buffer can have images in it: ", -1);
gtk_text_buffer_insert_pixbuf (buffer, &iter, pixbuf);
gtk_text_buffer_insert (buffer, &iter, " for example.\n\n", -1);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "Spacing. ", -1,
- "heading", NULL);
+ "heading", NULL);
gtk_text_buffer_insert (buffer, &iter, "You can adjust the amount of space before each line.\n", -1);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
- "This line has a whole lot of space before it.\n", -1,
- "big_gap_before_line", "wide_margins", NULL);
+ "This line has a whole lot of space before it.\n", -1,
+ "big_gap_before_line", "wide_margins", NULL);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
- "You can also adjust the amount of space after each line; this line has a whole lot of space after it.\n", -1,
- "big_gap_after_line", "wide_margins", NULL);
+ "You can also adjust the amount of space after each line; this line has a whole lot of space after it.\n", -1,
+ "big_gap_after_line", "wide_margins", NULL);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
- "You can also adjust the amount of space between wrapped lines; this line has extra space between each wrapped line in the same paragraph. To show off wrapping, some filler text: the quick brown fox jumped over the lazy dog. Blah blah blah blah blah blah blah blah blah.\n", -1,
- "double_spaced_line", "wide_margins", NULL);
+ "You can also adjust the amount of space between wrapped lines; this line has extra space between each wrapped line in the same paragraph. To show off wrapping, some filler text: the quick brown fox jumped over the lazy dog. Blah blah blah blah blah blah blah blah blah.\n", -1,
+ "double_spaced_line", "wide_margins", NULL);
gtk_text_buffer_insert (buffer, &iter, "Also note that those lines have extra-wide margins.\n\n", -1);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "Editability. ", -1,
- "heading", NULL);
+ "heading", NULL);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
- "This line is 'locked down' and can't be edited by the user - just try it! You can't delete this line.\n\n", -1,
- "not_editable", NULL);
+ "This line is 'locked down' and can't be edited by the user - just try it! You can't delete this line.\n\n", -1,
+ "not_editable", NULL);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "Wrapping. ", -1,
- "heading", NULL);
+ "heading", NULL);
gtk_text_buffer_insert (buffer, &iter,
- "This line (and most of the others in this buffer) is word-wrapped, using the proper Unicode algorithm. Word wrap should work in all scripts and languages that GTK+ supports. Let's make this a long paragraph to demonstrate: blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah\n\n", -1);
+ "This line (and most of the others in this buffer) is word-wrapped, using the proper Unicode algorithm. Word wrap should work in all scripts and languages that GTK+ supports. Let's make this a long paragraph to demonstrate: blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah\n\n", -1);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
- "This line has character-based wrapping, and can wrap between any two character glyphs. Let's make this a long paragraph to demonstrate: blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah\n\n", -1,
- "char_wrap", NULL);
+ "This line has character-based wrapping, and can wrap between any two character glyphs. Let's make this a long paragraph to demonstrate: blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah\n\n", -1,
+ "char_wrap", NULL);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
- "This line has all wrapping turned off, so it makes the horizontal scrollbar appear.\n\n\n", -1,
- "no_wrap", NULL);
+ "This line has all wrapping turned off, so it makes the horizontal scrollbar appear.\n\n\n", -1,
+ "no_wrap", NULL);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "Justification. ", -1,
- "heading", NULL);
+ "heading", NULL);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
- "\nThis line has center justification.\n", -1,
- "center", NULL);
+ "\nThis line has center justification.\n", -1,
+ "center", NULL);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
- "This line has right justification.\n", -1,
- "right_justify", NULL);
+ "This line has right justification.\n", -1,
+ "right_justify", NULL);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
- "\nThis line has big wide margins. Text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text.\n", -1,
- "wide_margins", NULL);
+ "\nThis line has big wide margins. Text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text.\n", -1,
+ "wide_margins", NULL);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "Internationalization. ", -1,
- "heading", NULL);
-
+ "heading", NULL);
+
gtk_text_buffer_insert (buffer, &iter,
- "You can put all sorts of Unicode text in the buffer.\n\nGerman (Deutsch Süd) Grüß Gott\nGreek (Ελληνικά) Γειά σας\nHebrew שלום\nJapanese (日本語)\n\nThe widget properly handles bidirectional text, word wrapping, DOS/UNIX/Unicode paragraph separators, grapheme boundaries, and so on using the Pango internationalization framework.\n", -1);
+ "You can put all sorts of Unicode text in the buffer.\n\nGerman (Deutsch Süd) Grüß Gott\nGreek (Ελληνικά) Γειά σας\nHebrew שלום\nJapanese (日本語)\n\nThe widget properly handles bidirectional text, word wrapping, DOS/UNIX/Unicode paragraph separators, grapheme boundaries, and so on using the Pango internationalization framework.\n", -1);
gtk_text_buffer_insert (buffer, &iter, "Here's a word-wrapped quote in a right-to-left language:\n", -1);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "وقد بدأ ثلاث من أكثر المؤسسات تقدما في شبكة اكسيون برامجها كمنظمات لا تسعى للربح، ثم تحولت في السنوات الخمس الماضية إلى مؤسسات مالية منظمة، وباتت جزءا من النظام المالي في بلدانها، ولكنها تتخصص في خدمة قطاع المشروعات الصغيرة. وأحد أكثر هذه المؤسسات نجاحا هو »بانكوسول« في بوليفيا.\n\n", -1,
- "rtl_quote", NULL);
+ "rtl_quote", NULL);
gtk_text_buffer_insert (buffer, &iter, "\n\nThis demo doesn't demonstrate all the GtkTextBuffer features; it leaves out, for example: invisible/hidden text (doesn't work in GTK 2, but planned), tab stops, application-drawn areas on the sides of the widget for displaying breakpoints and such...", -1);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size (GTK_WINDOW (window),
- 450, 450);
+ 450, 450);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC(gtk_widget_destroyed),
sw = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
gtk_paned_add1 (GTK_PANED (vpaned), sw);
gtk_container_add (GTK_CONTAINER (sw), view1);
sw = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
gtk_paned_add2 (GTK_PANED (vpaned), sw);
gtk_container_add (GTK_CONTAINER (sw), view2);