summaryrefslogtreecommitdiff
path: root/docs/reference/gtk/tmpl/gtkdrawingarea.sgml
blob: bafb109ca705c25d3f93d74afa8c0be02e1705fc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<!-- ##### SECTION Title ##### -->
GtkDrawingArea

<!-- ##### SECTION Short_Description ##### -->
a widget for custom user interface elements.

<!-- ##### SECTION Long_Description ##### -->
<para>
The #GtkDrawingArea widget is used for creating custom
user interface elements. After creating a drawing
area, the application may want to connect to:
<itemizedlist>
  <listitem>
    <para>
    Mouse and button press signals to respond to input from
    the user.
    </para>
  </listitem>
  <listitem>
    <para>
    The "realize" signal to take any necessary actions
    when the widget
    </para>
  </listitem>
  <listitem>
    <para>
    The "size_allocate" signal to take any necessary actions
    when the widget changes size.
    </para>
  </listitem>
  <listitem>
    <para>
    The "expose_event" signal to handle redrawing the
    contents of the widget.
    </para>
  </listitem>
</itemizedlist>
As a convenience, the #GtkDrawingArea widget synthesizes
a "configure_event" when the widget is realized
and any time the size of a widget changes when it
is realized. It often suffices to connect to this
signal instead of "realize" and "size_allocate".
</para>
<para>
The following code portion demonstrates using a drawing
area to implement a widget that draws a circle.
As this example demonstrates, an expose handler should
draw only the pixels within the requested area and
should draw or clear all these pixels.
</para>
<example>
<title>Simple <structname>GtkDrawingArea</structname> usage.</title>
<programlisting>
gboolean
expose_event (GdkWidget *widget, GdkEventExpose *event, gpointer data)
{
  gdk_window_clear_area (widget->window,
                         event->area.x, event->area.y,
                         event->area.width, event->area.height);
  gdk_gc_set_clip_rectangle (widget->style->fg_gc[widget->state],
                             &amp;event->area);
  gdk_draw_arc (widget->window,
                widget->style->fg_gc[widget->state],
                TRUE,
                0, 0, widget->allocation.width, widget->allocation.height,
                0, 64 * 360);
  gdk_gc_set_clip_rectangle (widget->style->fg_gc[widget->state],
                             NULL);

  return TRUE;
}
[...]
  GtkWidget *drawing_area = gtk_drawing_area_new (<!>);
  gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area),
                         100, 100);
  gtk_signal_connect (GTK_OBJECT (drawing_area), 
</programlisting>
</example>

<!-- ##### SECTION See_Also ##### -->
<para>

</para>

<!-- ##### STRUCT GtkDrawingArea ##### -->
<para>
The #GtkDrawingArea struct contains private data only, and
should be accessed using the functions below.
</para>


<!-- ##### FUNCTION gtk_drawing_area_new ##### -->
<para>
Creates a new drawing area.
</para>

@Returns: a new #GtkDrawingArea


<!-- ##### FUNCTION gtk_drawing_area_size ##### -->
<para>
Sets the size that the drawing area will request
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.