1999-08-16 18:51:52 +00:00
|
|
|
<!-- ##### SECTION Title ##### -->
|
|
|
|
GtkDrawingArea
|
|
|
|
|
|
|
|
<!-- ##### SECTION Short_Description ##### -->
|
|
|
|
a widget for custom user interface elements.
|
|
|
|
|
|
|
|
<!-- ##### SECTION Long_Description ##### -->
|
|
|
|
<para>
|
2002-01-01 23:51:00 +00:00
|
|
|
|
|
|
|
The #GtkDrawingArea widget is used for creating custom user interface
|
|
|
|
elements. It's essentially a blank widget; you can draw on
|
|
|
|
<literal>widget->window</literal>. After creating a drawing area,
|
|
|
|
the application may want to connect to:
|
|
|
|
|
1999-08-16 18:51:52 +00:00
|
|
|
<itemizedlist>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
Mouse and button press signals to respond to input from
|
2002-01-04 03:34:12 +00:00
|
|
|
the user. (Use gtk_widget_add_events() to enable events
|
|
|
|
you wish to receive.)
|
1999-08-16 18:51:52 +00:00
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
The "realize" signal to take any necessary actions
|
2002-01-01 23:51:00 +00:00
|
|
|
when the widget is instantiated on a particular display.
|
|
|
|
(Create GDK resources in response to this signal.)
|
1999-08-16 18:51:52 +00:00
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
2002-01-01 23:51:00 +00:00
|
|
|
The "configure_event" signal to take any necessary actions
|
1999-08-16 18:51:52 +00:00
|
|
|
when the widget changes size.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
The "expose_event" signal to handle redrawing the
|
|
|
|
contents of the widget.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</itemizedlist>
|
|
|
|
</para>
|
|
|
|
<para>
|
|
|
|
The following code portion demonstrates using a drawing
|
2002-01-01 23:51:00 +00:00
|
|
|
area to display a circle in the normal widget foreground
|
|
|
|
color.
|
|
|
|
Note that GDK automatically clears the exposed area
|
|
|
|
to the background color before sending the expose event, and
|
|
|
|
that drawing is implicitly clipped to the exposed area.
|
1999-08-16 18:51:52 +00:00
|
|
|
</para>
|
Markup fixes.
* gtk/gtkdialog.c, gtk/gtkrc.c, gtk/gtkwidget.c: Markup fixes.
* gdk-pixbuf-io.c: Markup fixes.
* gdk-pixbuf/tmpl/scaling.sgml, gdk/tmpl/fonts.sgml,
gdk/tmpl/general.sgml, gdk/tmpl/rgb.sgml, gdk/tmpl/visuals.sgml,
gdk/tmpl/windows.sgml, gtk/gtk-docs.sgml, gtk/tmpl/gtkaccellabel.sgml,
gtk/tmpl/gtkcombo.sgml, gtk/tmpl/gtkdialog.sgml,
gtk/tmpl/gtkdrawingarea.sgml, gtk/tmpl/gtkeditable.sgml,
gtk/tmpl/gtkfilesel.sgml, gtk/tmpl/gtkfontseldlg.sgml,
gtk/tmpl/gtkimage.sgml, gtk/tmpl/gtkmain.sgml, gtk/tmpl/gtkmenu.sgml,
gtk/tmpl/gtkmessagedialog.sgml, gtk/tmpl/gtkobject.sgml,
gtk/tmpl/gtkpaned.sgml, gtk/tmpl/gtkradiobutton.sgml,
gtk/tmpl/gtkrc.sgml, gtk/tmpl/gtkscale.sgml, gtk/tmpl/gtksignal.sgml,
gtk/tmpl/gtksocket.sgml, gtk/tmpl/gtkspinbutton.sgml,
gtk/tmpl/gtktogglebutton.sgml, gtk/tmpl/gtksignal.sgml,
gtk/tmpl/gtktooltips.sgml, gtk/tmpl/gtkwindow.sgml,
gdk/tmpl/regions.sgml, gtk/tmpl/gtkfontsel.sgml,
gtk/tmpl/gtkpixmap.sgml, gtk/tmpl/gtkprogress.sgml,
gtk/tmpl/gtkselection.sgml, gtk/tmpl/gtktable.sgml,
gtk/tmpl/gtktipsquery.sgml: Markup fixes (mainly examples).
2001-12-13 19:51:24 +00:00
|
|
|
<example>
|
|
|
|
<title>Simple <structname>GtkDrawingArea</structname> usage.</title>
|
1999-08-16 18:51:52 +00:00
|
|
|
<programlisting>
|
|
|
|
gboolean
|
2002-04-23 22:22:44 +00:00
|
|
|
expose_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data)
|
1999-08-16 18:51:52 +00:00
|
|
|
{
|
|
|
|
gdk_draw_arc (widget->window,
|
2002-01-01 23:51:00 +00:00
|
|
|
widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
|
1999-08-16 18:51:52 +00:00
|
|
|
TRUE,
|
1999-08-17 09:39:58 +00:00
|
|
|
0, 0, widget->allocation.width, widget->allocation.height,
|
1999-08-16 18:51:52 +00:00
|
|
|
0, 64 * 360);
|
2002-01-01 23:51:00 +00:00
|
|
|
|
1999-08-16 18:51:52 +00:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
[...]
|
2002-04-18 22:04:46 +00:00
|
|
|
GtkWidget *drawing_area = gtk_drawing_area_new (<!-- -->);
|
2002-01-01 23:51:00 +00:00
|
|
|
gtk_widget_set_size_request (drawing_area, 100, 100);
|
|
|
|
g_signal_connect (G_OBJECT (drawing_area), "expose_event",
|
|
|
|
G_CALLBACK (expose_event_callback), NULL);
|
1999-08-16 18:51:52 +00:00
|
|
|
</programlisting>
|
Markup fixes.
* gtk/gtkdialog.c, gtk/gtkrc.c, gtk/gtkwidget.c: Markup fixes.
* gdk-pixbuf-io.c: Markup fixes.
* gdk-pixbuf/tmpl/scaling.sgml, gdk/tmpl/fonts.sgml,
gdk/tmpl/general.sgml, gdk/tmpl/rgb.sgml, gdk/tmpl/visuals.sgml,
gdk/tmpl/windows.sgml, gtk/gtk-docs.sgml, gtk/tmpl/gtkaccellabel.sgml,
gtk/tmpl/gtkcombo.sgml, gtk/tmpl/gtkdialog.sgml,
gtk/tmpl/gtkdrawingarea.sgml, gtk/tmpl/gtkeditable.sgml,
gtk/tmpl/gtkfilesel.sgml, gtk/tmpl/gtkfontseldlg.sgml,
gtk/tmpl/gtkimage.sgml, gtk/tmpl/gtkmain.sgml, gtk/tmpl/gtkmenu.sgml,
gtk/tmpl/gtkmessagedialog.sgml, gtk/tmpl/gtkobject.sgml,
gtk/tmpl/gtkpaned.sgml, gtk/tmpl/gtkradiobutton.sgml,
gtk/tmpl/gtkrc.sgml, gtk/tmpl/gtkscale.sgml, gtk/tmpl/gtksignal.sgml,
gtk/tmpl/gtksocket.sgml, gtk/tmpl/gtkspinbutton.sgml,
gtk/tmpl/gtktogglebutton.sgml, gtk/tmpl/gtksignal.sgml,
gtk/tmpl/gtktooltips.sgml, gtk/tmpl/gtkwindow.sgml,
gdk/tmpl/regions.sgml, gtk/tmpl/gtkfontsel.sgml,
gtk/tmpl/gtkpixmap.sgml, gtk/tmpl/gtkprogress.sgml,
gtk/tmpl/gtkselection.sgml, gtk/tmpl/gtktable.sgml,
gtk/tmpl/gtktipsquery.sgml: Markup fixes (mainly examples).
2001-12-13 19:51:24 +00:00
|
|
|
</example>
|
1999-08-16 18:51:52 +00:00
|
|
|
|
2002-01-01 23:51:00 +00:00
|
|
|
<para>
|
|
|
|
Expose events are normally delivered when a drawing area first comes
|
|
|
|
onscreen, or when it's covered by another window and then uncovered
|
|
|
|
(exposed). You can also force an expose event by adding to the "damage
|
|
|
|
region" of the drawing area's window; gtk_widget_queue_draw_area() and
|
|
|
|
gdk_window_invalidate_rect() are equally good ways to do this. You'll
|
|
|
|
then get an expose event for the invalid region.
|
|
|
|
</para>
|
|
|
|
|
2002-01-19 18:51:48 +00:00
|
|
|
<para>
|
|
|
|
The available routines for drawing are documented on the <link
|
|
|
|
linkend="gdk-Drawing-Primitives">GDK Drawing Primitives</link> page.
|
|
|
|
See also gdk_pixbuf_render_to_drawable() for drawing a #GdkPixbuf.
|
|
|
|
</para>
|
|
|
|
|
2002-01-04 03:34:12 +00:00
|
|
|
<para>
|
|
|
|
To receive mouse events on a drawing area, you will need to enable
|
2002-01-19 18:51:48 +00:00
|
|
|
them with gtk_widget_add_events(). To receive keyboard events, you
|
|
|
|
will need to set the #GTK_CAN_FOCUS flag on the drawing area, and
|
2002-01-04 03:34:12 +00:00
|
|
|
should probably draw some user-visible indication that the drawing
|
2002-01-19 18:51:48 +00:00
|
|
|
area is focused. Use the GTK_HAS_FOCUS() macro in your expose event
|
|
|
|
handler to decide whether to draw the focus indicator. See
|
|
|
|
gtk_paint_focus() for one way to draw focus.
|
2002-01-04 03:34:12 +00:00
|
|
|
</para>
|
|
|
|
|
1999-08-16 18:51:52 +00:00
|
|
|
<!-- ##### SECTION See_Also ##### -->
|
|
|
|
<para>
|
2002-01-19 18:51:48 +00:00
|
|
|
Sometimes #GtkImage is a useful alternative to a drawing area.
|
|
|
|
You can put a #GdkPixmap in the #GtkImage and draw to the #GdkPixmap,
|
|
|
|
calling gtk_widget_queue_draw() on the #GtkImage when you want to
|
|
|
|
refresh to the screen.
|
1999-08-16 18:51:52 +00:00
|
|
|
</para>
|
|
|
|
|
|
|
|
<!-- ##### STRUCT GtkDrawingArea ##### -->
|
|
|
|
<para>
|
Markup fixes.
* gtk/gtkdialog.c, gtk/gtkrc.c, gtk/gtkwidget.c: Markup fixes.
* gdk-pixbuf-io.c: Markup fixes.
* gdk-pixbuf/tmpl/scaling.sgml, gdk/tmpl/fonts.sgml,
gdk/tmpl/general.sgml, gdk/tmpl/rgb.sgml, gdk/tmpl/visuals.sgml,
gdk/tmpl/windows.sgml, gtk/gtk-docs.sgml, gtk/tmpl/gtkaccellabel.sgml,
gtk/tmpl/gtkcombo.sgml, gtk/tmpl/gtkdialog.sgml,
gtk/tmpl/gtkdrawingarea.sgml, gtk/tmpl/gtkeditable.sgml,
gtk/tmpl/gtkfilesel.sgml, gtk/tmpl/gtkfontseldlg.sgml,
gtk/tmpl/gtkimage.sgml, gtk/tmpl/gtkmain.sgml, gtk/tmpl/gtkmenu.sgml,
gtk/tmpl/gtkmessagedialog.sgml, gtk/tmpl/gtkobject.sgml,
gtk/tmpl/gtkpaned.sgml, gtk/tmpl/gtkradiobutton.sgml,
gtk/tmpl/gtkrc.sgml, gtk/tmpl/gtkscale.sgml, gtk/tmpl/gtksignal.sgml,
gtk/tmpl/gtksocket.sgml, gtk/tmpl/gtkspinbutton.sgml,
gtk/tmpl/gtktogglebutton.sgml, gtk/tmpl/gtksignal.sgml,
gtk/tmpl/gtktooltips.sgml, gtk/tmpl/gtkwindow.sgml,
gdk/tmpl/regions.sgml, gtk/tmpl/gtkfontsel.sgml,
gtk/tmpl/gtkpixmap.sgml, gtk/tmpl/gtkprogress.sgml,
gtk/tmpl/gtkselection.sgml, gtk/tmpl/gtktable.sgml,
gtk/tmpl/gtktipsquery.sgml: Markup fixes (mainly examples).
2001-12-13 19:51:24 +00:00
|
|
|
The #GtkDrawingArea struct contains private data only, and
|
1999-08-16 18:51:52 +00:00
|
|
|
should be accessed using the functions below.
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- ##### FUNCTION gtk_drawing_area_new ##### -->
|
|
|
|
<para>
|
Markup fixes.
* gtk/gtkdialog.c, gtk/gtkrc.c, gtk/gtkwidget.c: Markup fixes.
* gdk-pixbuf-io.c: Markup fixes.
* gdk-pixbuf/tmpl/scaling.sgml, gdk/tmpl/fonts.sgml,
gdk/tmpl/general.sgml, gdk/tmpl/rgb.sgml, gdk/tmpl/visuals.sgml,
gdk/tmpl/windows.sgml, gtk/gtk-docs.sgml, gtk/tmpl/gtkaccellabel.sgml,
gtk/tmpl/gtkcombo.sgml, gtk/tmpl/gtkdialog.sgml,
gtk/tmpl/gtkdrawingarea.sgml, gtk/tmpl/gtkeditable.sgml,
gtk/tmpl/gtkfilesel.sgml, gtk/tmpl/gtkfontseldlg.sgml,
gtk/tmpl/gtkimage.sgml, gtk/tmpl/gtkmain.sgml, gtk/tmpl/gtkmenu.sgml,
gtk/tmpl/gtkmessagedialog.sgml, gtk/tmpl/gtkobject.sgml,
gtk/tmpl/gtkpaned.sgml, gtk/tmpl/gtkradiobutton.sgml,
gtk/tmpl/gtkrc.sgml, gtk/tmpl/gtkscale.sgml, gtk/tmpl/gtksignal.sgml,
gtk/tmpl/gtksocket.sgml, gtk/tmpl/gtkspinbutton.sgml,
gtk/tmpl/gtktogglebutton.sgml, gtk/tmpl/gtksignal.sgml,
gtk/tmpl/gtktooltips.sgml, gtk/tmpl/gtkwindow.sgml,
gdk/tmpl/regions.sgml, gtk/tmpl/gtkfontsel.sgml,
gtk/tmpl/gtkpixmap.sgml, gtk/tmpl/gtkprogress.sgml,
gtk/tmpl/gtkselection.sgml, gtk/tmpl/gtktable.sgml,
gtk/tmpl/gtktipsquery.sgml: Markup fixes (mainly examples).
2001-12-13 19:51:24 +00:00
|
|
|
Creates a new drawing area.
|
1999-08-16 18:51:52 +00:00
|
|
|
</para>
|
|
|
|
|
2001-05-11 17:13:44 +00:00
|
|
|
@Returns: a new #GtkDrawingArea
|
1999-08-16 18:51:52 +00:00
|
|
|
|
|
|
|
|
|
|
|
<!-- ##### FUNCTION gtk_drawing_area_size ##### -->
|
|
|
|
<para>
|
2002-01-19 18:51:48 +00:00
|
|
|
(Use gtk_widget_set_size_request() instead.)
|
Markup fixes.
* gtk/gtkdialog.c, gtk/gtkrc.c, gtk/gtkwidget.c: Markup fixes.
* gdk-pixbuf-io.c: Markup fixes.
* gdk-pixbuf/tmpl/scaling.sgml, gdk/tmpl/fonts.sgml,
gdk/tmpl/general.sgml, gdk/tmpl/rgb.sgml, gdk/tmpl/visuals.sgml,
gdk/tmpl/windows.sgml, gtk/gtk-docs.sgml, gtk/tmpl/gtkaccellabel.sgml,
gtk/tmpl/gtkcombo.sgml, gtk/tmpl/gtkdialog.sgml,
gtk/tmpl/gtkdrawingarea.sgml, gtk/tmpl/gtkeditable.sgml,
gtk/tmpl/gtkfilesel.sgml, gtk/tmpl/gtkfontseldlg.sgml,
gtk/tmpl/gtkimage.sgml, gtk/tmpl/gtkmain.sgml, gtk/tmpl/gtkmenu.sgml,
gtk/tmpl/gtkmessagedialog.sgml, gtk/tmpl/gtkobject.sgml,
gtk/tmpl/gtkpaned.sgml, gtk/tmpl/gtkradiobutton.sgml,
gtk/tmpl/gtkrc.sgml, gtk/tmpl/gtkscale.sgml, gtk/tmpl/gtksignal.sgml,
gtk/tmpl/gtksocket.sgml, gtk/tmpl/gtkspinbutton.sgml,
gtk/tmpl/gtktogglebutton.sgml, gtk/tmpl/gtksignal.sgml,
gtk/tmpl/gtktooltips.sgml, gtk/tmpl/gtkwindow.sgml,
gdk/tmpl/regions.sgml, gtk/tmpl/gtkfontsel.sgml,
gtk/tmpl/gtkpixmap.sgml, gtk/tmpl/gtkprogress.sgml,
gtk/tmpl/gtkselection.sgml, gtk/tmpl/gtktable.sgml,
gtk/tmpl/gtktipsquery.sgml: Markup fixes (mainly examples).
2001-12-13 19:51:24 +00:00
|
|
|
Sets the size that the drawing area will request
|
1999-08-16 18:51:52 +00:00
|
|
|
in response to a "size_request" signal. The
|
|
|
|
drawing area may actually be allocated a size
|
|
|
|
larger than this depending on how it is packed
|
|
|
|
within the enclosing containers.
|
|
|
|
</para>
|
|
|
|
|
|
|
|
@darea: a #GtkDrawingArea.
|
|
|
|
@width: the width to request.
|
|
|
|
@height: the height to request.
|
|
|
|
|
|
|
|
|