-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsec-DrawingMethods.html
More file actions
432 lines (427 loc) · 27.7 KB
/
Copy pathsec-DrawingMethods.html
File metadata and controls
432 lines (427 loc) · 27.7 KB
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>12.2. Les méthodes pour dessiner</title>
<link rel="stylesheet" href="pygtktutfr.css" type="text/css">
<meta name="generator" content="Bluefish 1.0.5">
<link rel="start" href="index.html" title="Tutoriel PyGTK 2.0">
<link rel="up" href="ch-DrawingArea.html" title="Chapitre 12. La zone de dessin (Drawing Area)">
<link rel="prev" href="ch-DrawingArea.html" title="Chapitre 12. La zone de dessin (Drawing Area)">
<link rel="next" href="ch-TextViewWidget.html" title="Chapitre 13. Le widget TextView">
<meta name="keywords" content="python,pygtk,tutoriel,traduction">
<link rel="home" href="index.html" title="Table des matières">
</head>
<body>
<div class="localisation">
Vous êtes à peu près ici :
<a href="../../index.html">Accueil</a> »
<a href="../pygtktut.php">tutoriel PyGTK</a> »
<a href="index.html">PyGTK : sommaire</a>
</div>
<!-- fin localisation -->
<div class="navheader">
<table width="100%" summary="Navigation header">
<tr><th colspan="3" align="center">12.2. Les méthodes pour dessiner</th></tr>
<tr>
<td width="20%" align="left">
<a accesskey="p" href="ch-DrawingArea.html">Préc.</a> </td>
<th width="60%" align="center">Chapitre 12. La zone de dessin (Drawing Area)</th>
<td width="20%" align="right"> <a accesskey="n" href="ch-TextViewWidget.html">Suiv.</a>
</td>
</tr>
</table>
<hr>
</div>
<div class="sect1" lang="fr">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="sec-DrawingMethods"></a>12.2. Les méthodes pour dessiner</h2></div></div></div>
<p>Il existe un ensemble de méthodes pour dessiner
sur le "canevas" d'une zone de dessin. Ces méthodes peuvent être
utilisées pour n'importe quelle sous-classe de
<code class="classname">gtk.gdk.Drawable</code> (soit un
<code class="classname">gtk.gdk.Window</code>, soit un
<code class="classname">gtk.gdk.Pixmap</code>). Les voici :</p>
<pre class="programlisting">
drawable.draw_point(<strong class="parameter"><code>gc</code></strong>, <strong class="parameter"><code>x</code></strong>, <strong class="parameter"><code>y</code></strong>) # dessiner un point
</pre>
<p>...où <em class="parameter"><code>gc</code></em> est le contexte graphique utilisé pour le dessin,</p>
<p><em class="parameter"><code>x</code></em> et <em class="parameter"><code>y</code></em>
sont les coordonnées du point.</p>
<pre class="programlisting">
drawable.draw_line(<strong class="parameter"><code>gc</code></strong>, <strong class="parameter"><code>x1</code></strong>, <strong class="parameter"><code>y1</code></strong>, <strong class="parameter"><code>x2</code></strong>, <strong class="parameter"><code>y2</code></strong>) # dessiner une ligne
</pre>
<p>... où <em class="parameter"><code>gc</code></em> est le contexte graphique.</p>
<p><em class="parameter"><code>x1</code></em> et <em class="parameter"><code>y1</code></em> sont
les coordonnées du point de départ, <em class="parameter"><code>x2</code></em> et
<em class="parameter"><code>y2</code></em> les coordonnées du point d'arrivée.</p>
<pre class="programlisting">
drawable.draw_rectangle(<strong class="parameter"><code>gc</code></strong>, <strong class="parameter"><code>filled</code></strong>, <strong class="parameter"><code>x</code></strong>, <strong class="parameter"><code>y</code></strong>, <strong class="parameter"><code>largeur</code></strong>, <strong class="parameter"><code>hauteur</code></strong>) # dessiner un rectangle
</pre>
<p>... où <em class="parameter"><code>gc</code></em> est le contexte graphique.</p>
<p><em class="parameter"><code>filled</code></em> est un booléen indiquant si le
rectangle doit être rempli avec la couleur de premier plan
(<code class="literal">TRUE</code>) ou non (<code class="literal">FALSE</code>).</p>
<p><em class="parameter"><code>x</code></em> et <em class="parameter"><code>y</code></em> sont les
coordonnées du coin haut gauche du rectangle.</p>
<p><em class="parameter"><code>largeur</code></em> et
<em class="parameter"><code>hauteur</code></em> indiquent la largeur et hauteur du
rectangle.</p>
<pre class="programlisting">
drawable.draw_arc(<strong class="parameter"><code>gc</code></strong>, <strong class="parameter"><code>filled</code></strong>, <strong class="parameter"><code>x</code></strong>, <strong class="parameter"><code>y</code></strong>, <strong class="parameter"><code>largeur</code></strong>, <strong class="parameter"><code>hauteur</code></strong>, <strong class="parameter"><code>angle1</code></strong>, <strong class="parameter"><code>angle2</code></strong>) # dessiner un arc de cercle
</pre>
<p>... où <em class="parameter"><code>gc</code></em> est le contexte graphique.</p>
<p><em class="parameter"><code>filled</code></em> est un booléen indiquant si le
rectangle doit être rempli avec la couleur de premier plan
(<code class="literal">TRUE</code>) ou non (<code class="literal">FALSE</code>).</p>
<p><em class="parameter"><code>x</code></em> et <em class="parameter"><code>y</code></em> sont les
coordonnées du coin haut gauche du rectangle inscrit. <em class="parameter"><code>largeur</code></em>
and <em class="parameter"><code>hauteur</code></em> indiquent la largeur et hauteur du
rectangle inscrit.</p>
<p><em class="parameter"><code>angle1</code></em> est l'angle de départ de l'arc, en partant
de la position 3 heures, dans le sens inverse des aiguilles d'une montre,
par pas de 1/64 degré.</p>
<p><em class="parameter"><code>angle2</code></em> est la fin de l'angle de l'arc, relatif
à <em class="parameter"><code>angle1</code></em>, par pas de 1/64 degré.</p>
<pre class="programlisting">
drawable.draw_polygon(<strong class="parameter"><code>gc</code></strong>, <strong class="parameter"><code>filled</code></strong>, <strong class="parameter"><code>points</code></strong>) # dessiner un polygone
</pre>
<p>... où <em class="parameter"><code>gc</code></em> est le contexte graphique.</p>
<p><em class="parameter"><code>filled</code></em> est un booléen indiquant si le
rectangle doit être rempli avec la couleur de premier plan
(<code class="literal">TRUE</code>) ou non (<code class="literal">FALSE</code>).
</p>
<p><em class="parameter"><code>points</code></em> est un tuple contenant une liste de paires
de coordonnées, par exemple [ (0,0), (2,5), (3,7), (4,11) ], désignant les
point devant être reliés pour dessiner un polygone.</p>
<pre class="programlisting">
drawable.draw_string(<strong class="parameter"><code>font</code></strong>, <strong class="parameter"><code>gc</code></strong>, <strong class="parameter"><code>x</code></strong>, <strong class="parameter"><code>y</code></strong>, <strong class="parameter"><code>string</code></strong>) # dessiner une chaîne de caractères
drawable.draw_text(<strong class="parameter"><code>font</code></strong>, <strong class="parameter"><code>gc</code></strong>, <strong class="parameter"><code>x</code></strong>, <strong class="parameter"><code>y</code></strong>, <strong class="parameter"><code>string</code></strong>) # dessiner un texte
</pre>
<p>... où <em class="parameter"><code>font</code></em> est le
<code class="classname">gtk.gdk.Font</code> utilisé pour dessiner la chaîne de caractères.</p>
<p><em class="parameter"><code>gc</code></em> est le contexte graphique.</p>
<p><em class="parameter"><code>x</code></em> et <em class="parameter"><code>y</code></em> sont les
coordonnées du point où commence le dessin de la chaîne, c'est à dire, la ligne
de base de gauche.</p>
<p><em class="parameter"><code>string</code></em> est la chaîne de caractères à dessiner.</p>
<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
<p>Les deux méthodes <code class="methodname">draw_string</code>() et
<code class="methodname">draw_text</code>() sont démodées. À la place, il faut
plutôt utiliser un <code class="classname">pango.Layout</code> avec la méthode
<code class="methodname">draw_layout</code>().</p>
</div>
<pre class="programlisting">
drawable.draw_layout(<strong class="parameter"><code>gc</code></strong>, <strong class="parameter"><code>x</code></strong>, <strong class="parameter"><code>y</code></strong>, <strong class="parameter"><code>layout</code></strong>) # dessiner un affichage
</pre>
<p>... où <em class="parameter"><code>gc</code></em> est le contexte graphique.</p>
<p><em class="parameter"><code>x</code></em> et <em class="parameter"><code>y</code></em> sont les
coordonnées du point où débute le dessin du layout.</p>
<p><em class="parameter"><code>layout</code></em> est le
<code class="classname">pango.Layout</code> qui va être dessiné.</p>
<pre class="programlisting">
drawable.draw_drawable(<strong class="parameter"><code>gc</code></strong>, <strong class="parameter"><code>src</code></strong>, <strong class="parameter"><code>xsrc</code></strong>, <strong class="parameter"><code>ysrc</code></strong>, <strong class="parameter"><code>xdest</code></strong>, <strong class="parameter"><code>ydest</code></strong>, <strong class="parameter"><code>largeur</code></strong>, <strong class="parameter"><code>hauteur</code></strong>) # dessiner un dessinable
</pre>
<p>... où <em class="parameter"><code>gc</code></em> est le contexte graphique.</p>
<p><em class="parameter"><code>src</code></em> est le dessinable origine.</p>
<p><em class="parameter"><code>xsrc</code></em> and <em class="parameter"><code>ysrc</code></em> are the
coordinates of the top left rectangle in the source drawable.</p>
<p><em class="parameter"><code>xdest</code></em> and <em class="parameter"><code>ydest</code></em> sont les
coordonnées du coin haut gauche de la zone de dessin.</p>
<p><em class="parameter"><code>largeur</code></em> et <em class="parameter"><code>hauteur</code></em> sont
la largeur et hauteur du dessinable d'origine à copier sur le
dessinable. Si l'un de ces paramètres vaut -1, on utilise la largeur ou
hauteur complète du dessinable.</p>
<pre class="programlisting">
drawable.draw_image(<strong class="parameter"><code>gc</code></strong>, <strong class="parameter"><code>image</code></strong>, <strong class="parameter"><code>xsrc</code></strong>, <strong class="parameter"><code>ysrc</code></strong>, <strong class="parameter"><code>xdest</code></strong>, <strong class="parameter"><code>ydest</code></strong>, <strong class="parameter"><code>largeur</code></strong>, <strong class="parameter"><code>hauteur</code></strong>) # dessiner une image
</pre>
<p>... où <em class="parameter"><code>gc</code></em> est le contexte graphique.</p>
<p><em class="parameter"><code>image</code></em> est l'image origine.</p>
<p><em class="parameter"><code>xsrc</code></em> et <em class="parameter"><code>ysrc</code></em> sont les
coordonnées du coin supérieur gauche du rectangle dans le dessinable source </p>
<p><em class="parameter"><code>xdest</code></em> et <em class="parameter"><code>ydest</code></em> sont les
coordonnées du coin supérieur gauche dans la zone de dessin.</p>
<p><em class="parameter"><code>largeur</code></em> et <em class="parameter"><code>hauteur</code></em> sont
la largeur et hauteur de la zone dessinable origine qui doit être
copiée sur le dessinable (<em class="parameter"><code>drawable</code></em>). Si l'un de ces
paramètres vaut -1, on utilise la largeur ou hauteur complète de
l'<em class="parameter"><code>image</code></em>.</p>
<pre class="programlisting">
drawable.draw_points(<strong class="parameter"><code>gc</code></strong>, <strong class="parameter"><code>points</code></strong>) # dessiner des points
</pre>
<p>... où <em class="parameter"><code>gc</code></em> est le contexte graphique.</p>
<p><em class="parameter"><code>points</code></em> est une liste ou un tuple contenant
les tuples de paires de coordonnées, par exemple [ (0,0), (2,5), (3,7), (4,11) ]
désignant les points à dessiner.</p>
<pre class="programlisting">
drawable.draw_segments(<strong class="parameter"><code>gc</code></strong>, <strong class="parameter"><code>segs</code></strong>) # dessiner des segments de ligne
</pre>
<p>... où <em class="parameter"><code>gc</code></em> est le contexte graphique.</p>
<p><em class="parameter"><code>segs</code></em> est une liste ou un tuple des coordonnées
des points de départ et de fin des segments à dessiner, contenues dans
un tuple, par exemple [ (0,0, 1,5), (2,5, 1,7), (3,7, 1,11), (4,11, 1,13) ]</p>
<pre class="programlisting">
drawable.draw_lines(<strong class="parameter"><code>gc</code></strong>, <strong class="parameter"><code>points</code></strong>) # dessiner une ligne brisée
</pre>
<p>... où <em class="parameter"><code>gc</code></em> est le contexte graphique.</p>
<p><em class="parameter"><code>points</code></em> est une liste ou un tuple contenant
les tuples de paires de coordonnées, par exemple [ (0,0), (2,5), (3,7), (4,11) ]
désignant les points à relier par des lignes.</p>
<pre class="programlisting">
drawable.draw_rgb_image(<strong class="parameter"><code>gc</code></strong>, <strong class="parameter"><code>x</code></strong>, <strong class="parameter"><code>y</code></strong>, <strong class="parameter"><code>largeur</code></strong>, <strong class="parameter"><code>hauteur</code></strong>, <strong class="parameter"><code>dith</code></strong>, <strong class="parameter"><code>rgb_buf</code></strong>, <strong class="parameter"><code>rowstride</code></strong>)
drawable.draw_rgb_32_image(<strong class="parameter"><code>gc</code></strong>, <strong class="parameter"><code>x</code></strong>, <strong class="parameter"><code>y</code></strong>, <strong class="parameter"><code>largeur</code></strong>, <strong class="parameter"><code>hauteur</code></strong>, <strong class="parameter"><code>dith</code></strong>, <strong class="parameter"><code>buf</code></strong>, <strong class="parameter"><code>rowstride</code></strong>)
drawable.draw_gray_image(<strong class="parameter"><code>gc</code></strong>, <strong class="parameter"><code>x</code></strong>, <strong class="parameter"><code>y</code></strong>, <strong class="parameter"><code>largeur</code></strong>, <strong class="parameter"><code>hauteur</code></strong>, <strong class="parameter"><code>dith</code></strong>, <strong class="parameter"><code>buf</code></strong>, <strong class="parameter"><code>rowstride</code></strong>)
</pre>
<p>... où <em class="parameter"><code>gc</code></em> est le contexte graphique.</p>
<p><em class="parameter"><code>x</code></em> et <em class="parameter"><code>y</code></em>
sont les coordonnées du coin supérieur gauche du rectangle qui contient
l'image.</p>
<p><em class="parameter"><code>largeur</code></em> and <em class="parameter"><code>hauteur</code></em> sont
la largeur et la hauteur du rectangle qui contient l'image.</p>
<p><em class="parameter"><code>dith</code></em> est le mode de diffusion (tramage) décrit ci-dessous</p>
<p>Pour la méthode <code class="methodname">draw_rgb_image</code>(), le
paramètre <em class="parameter"><code>rgb_buf</code></em> représente les données de l'image RGB,
codifiées dans une chaîne sous forme de séquence de triplets de pixels RGB de
8 bits. Pour la méthode <code class="methodname">draw_rgb_32_image</code>(),
<em class="parameter"><code>buf</code></em> représente les données de l'image RGB,
codifiées dans une chaîne sous forme de séquence de triplets de pixels RGB de
8 bits avec 8 bits de padding (4 caractères par pixel RGB). Pour la
méthode <code class="methodname">draw_gray_image</code>(), <em class="parameter"><code>buf</code></em>
représente les données de l'image codifiées dans une chaîne de
pixels de 8 bits.
</p>
<p><em class="parameter"><code>rowstride</code></em> est le nombre de caractères depuis le début
d'une rangée jusqu'au début de la rangée suivante de l'image. Normalement sa valeur
par défaut est 3 * <em class="parameter"><code>largeur</code></em> pour la méthode
<code class="methodname">draw_rgb_image</code>(), 4 * <em class="parameter"><code>largeur</code></em>
pour la méthode <code class="methodname">draw_rgb_32_image</code>() et
<em class="parameter"><code>largeur</code></em> pour la méthode <code class="methodname">draw_gray_image</code>().
Si <em class="parameter"><code>rowstride</code></em> vaut 0, la ligne sera répétée
<em class="parameter"><code>hauteur</code></em> fois.
</p>
<p>Voici les différents modes de diffusion
(<em class="parameter"><code>dither</code></em>) :</p>
<pre class="programlisting">
RGB_DITHER_NONE # Ne pas utiliser de diffusion.
RGB_DITHER_NORMAL # Utiliser la diffusion si seulement 8 bits par pixels (ou moins).
RGB_DITHER_MAX # Utiliser la diffusion si 16 bits par pixels (ou moins).
</pre>
<p>Le programme exemple <a href="exemples/drawingarea.py" target="_top"><span><strong class="command">drawingarea.py</strong></span></a>
illustre l'utilisation de la plupart des méthodes de la
<code class="classname">DrawingArea</code>. Il place une zone de dessin
(<code class="classname">DrawingArea</code>) dans une fenêtre défilante
<code class="classname">ScrolledWindow</code> et ajoute des règles horizontales et
verticales (<code class="classname">Ruler</code>). La <a href="sec-DrawingMethods.html#drawingareafig" title="Figure 12.1. Exemple de Drawing Area">Figure 12.1, « Exemple de Drawing Area »</a>
montre le programme après lancement :</p>
<div class="figure">
<a name="drawingareafig"></a><p class="title"><b>Figure 12.1. Exemple de Drawing Area</b></p>
<div class="mediaobject" align="center"><img src="figures/drawingarea.png" align="middle" alt="Exemple de Drawing Area"></div>
</div>
<p>Le code source ci-dessous <a href="exemples/drawingarea.py" target="_top">
<span><strong class="command">drawingarea.py</strong></span></a> ci-dessous utilise l'image
pixmap <a href="exemples/gtk.xpm" target="_top"> <code class="filename">gtk.xpm</code></a>
</p>
<pre class="programlisting">
1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 # exemple drawingarea.py
4
5 import pygtk
6 pygtk.require('2.0')
7 import gtk
8 import operator
9 import time
10 import string
11
12 class ExempleZoneDessin:
13 def __init__(self):
14 fenetre = gtk.Window(gtk.WINDOW_TOPLEVEL)
15 fenetre.set_title("Exemple de zone de dessin")
16 fenetre.connect("destroy", lambda w: gtk.main_quit())
17 self.zone_dessin = gtk.DrawingArea()
18 self.zone_dessin.set_size_request(400, 300)
19 self.stylepango = self.zone_dessin.create_pango_layout("")
20 self.fenetre_defil = gtk.ScrolledWindow()
21 self.fenetre_defil.add_with_viewport(self.zone_dessin)
22 self.table = gtk.Table(2,2)
23 self.reglehoriz = gtk.HRuler()
24 self.reglevert = gtk.VRuler()
25 self.reglehoriz.set_range(0, 400, 0, 400)
26 self.reglevert.set_range(0, 300, 0, 300)
27 self.table.attach(self.reglehoriz, 1, 2, 0, 1, yoptions=0)
28 self.table.attach(self.reglevert, 0, 1, 1, 2, xoptions=0)
29 self.table.attach(self.fenetre_defil, 1, 2, 1, 2)
30 fenetre.add(self.table)
31 self.zone_dessin.set_events(gtk.gdk.POINTER_MOTION_MASK |
32 gtk.gdk.POINTER_MOTION_HINT_MASK )
33 self.zone_dessin.connect("expose-event", self.rappel_zone_dessin_expose)
34 def a_bouge(ruler, event):
35 return ruler.emit("motion_notify_event", event)
36 self.zone_dessin.connect_object("motion_notify_event", a_bouge,
37 self.reglehoriz)
38 self.zone_dessin.connect_object("motion_notify_event", a_bouge,
39 self.reglevert)
40 self.ajuste_hor = self.fenetre_defil.get_hadjustment()
41 self.ajuste_ver = self.fenetre_defil.get_vadjustment()
42 def rappel_valeur(ajuste, regle, horiz):
43 if horiz:
44 span = self.fenetre_defil.get_allocation()[3]
45 else:
46 span = self.fenetre_defil.get_allocation()[2]
47 l,u,p,m = regle.get_range()
48 v = ajuste.value
49 regle.set_range(v, v+span, p, m)
50 while gtk.events_pending():
51 gtk.main_iteration()
52 self.ajuste_hor.connect('value-changed', rappel_valeur, self.reglehoriz, True)
53 self.ajuste_ver.connect('value-changed', rappel_valeur, self.reglevert, False)
54 def rappel_taille_fixee(wid, allocation):
55 x, y, w, h = allocation
56 l,u,p,m = self.reglehoriz.get_range()
57 m = max(m, w)
58 self.reglehoriz.set_range(l, l+w, p, m)
59 l,u,p,m = self.reglevert.get_range()
60 m = max(m, h)
61 self.reglevert.set_range(l, l+h, p, m)
62 self.fenetre_defil.connect('size-allocate', rappel_taille_fixee)
63 self.zone_dessin.show()
64 self.reglehoriz.show()
65 self.reglevert.show()
66 self.fenetre_defil.show()
67 self.table.show()
68 fenetre.show()
69
70 def rappel_zone_dessin_expose(self, zone_dessin, event):
71 self.style = self.zone_dessin.get_style()
72 self.contexte_graph = self.style.fg_gc[gtk.STATE_NORMAL]
73 self.trace_point(10,10)
74 self.trace_points(110, 10)
75 self.trace_ligne(210, 10)
76 self.trace_lignes(310, 10)
77 self.trace_segments(10, 100)
78 self.trace_rectangles(110, 100)
79 self.trace_arcs(210, 100)
80 self.trace_pixmap(310, 100)
81 self.trace_polygone(10, 200)
82 self.trace_image_rgb(110, 200)
83 return True
84
85 def trace_point(self, x, y):
86 self.zone_dessin.window.draw_point(self.contexte_graph, x+30, y+30)
87 self.stylepango.set_text("Point")
88 self.zone_dessin.window.draw_layout(self.contexte_graph, x+5, y+50, self.stylepango)
89 return
90
91 def trace_points(self, x, y):
92 points = [(x+10,y+10), (x+10,y), (x+40,y+30),
93 (x+30,y+10), (x+50,y+10)]
94 self.zone_dessin.window.draw_points(self.contexte_graph, points)
95 self.stylepango.set_text("Points")
96 self.zone_dessin.window.draw_layout(self.contexte_graph, x+5, y+50, self.stylepango)
97 return
98
99 def trace_ligne(self, x, y):
100 self.zone_dessin.window.draw_line(self.contexte_graph, x+10, y+10, x+20, y+30)
101 self.stylepango.set_text("Ligne")
102 self.zone_dessin.window.draw_layout(self.contexte_graph, x+5, y+50, self.stylepango)
103 return
104
105 def trace_lignes(self, x, y):
106 points = [(x+10,y+10), (x+10,y), (x+40,y+30),
107 (x+30,y+10), (x+50,y+10)]
108 self.zone_dessin.window.draw_lines(self.contexte_graph, points)
109 self.stylepango.set_text("Lignes")
110 self.zone_dessin.window.draw_layout(self.contexte_graph, x+5, y+50, self.stylepango)
111 return
112
113 def trace_segments(self, x, y):
114 segments = ((x+20,y+10, x+20,y+70), (x+60,y+10, x+60,y+70),
115 (x+10,y+30 , x+70,y+30), (x+10, y+50 , x+70, y+50))
116 self.zone_dessin.window.draw_segments(self.contexte_graph, segments)
117 self.stylepango.set_text("Segments")
118 self.zone_dessin.window.draw_layout(self.contexte_graph, x+5, y+80, self.stylepango)
119 return
120
121 def trace_rectangles(self, x, y):
122 self.zone_dessin.window.draw_rectangle(self.contexte_graph, False, x, y, 80, 70)
123 self.zone_dessin.window.draw_rectangle(self.contexte_graph, True, x+10, y+10, 20, 20)
124 self.zone_dessin.window.draw_rectangle(self.contexte_graph, True, x+50, y+10, 20, 20)
125 self.zone_dessin.window.draw_rectangle(self.contexte_graph, True, x+20, y+50, 40, 10)
126 self.stylepango.set_text("Rectangles")
127 self.zone_dessin.window.draw_layout(self.contexte_graph, x+5, y+80, self.stylepango)
128 return
129
130 def trace_arcs(self, x, y):
131 self.zone_dessin.window.draw_arc(self.contexte_graph, False, x+10, y, 70, 70,
132 0, 360*64)
133 self.zone_dessin.window.draw_arc(self.contexte_graph, True, x+30, y+20, 10, 10,
134 0, 360*64)
135 self.zone_dessin.window.draw_arc(self.contexte_graph, True, x+50, y+20, 10, 10,
136 0, 360*64)
137 self.zone_dessin.window.draw_arc(self.contexte_graph, True, x+30, y+10, 30, 50,
138 210*64, 120*64)
139 self.stylepango.set_text("Arcs")
140 self.zone_dessin.window.draw_layout(self.contexte_graph, x+30, y+80, self.stylepango)
141 return
142
143 def trace_pixmap(self, x, y):
144 pixmap, mask = gtk.gdk.pixmap_create_from_xpm(
145 self.zone_dessin.window, self.style.bg[gtk.STATE_NORMAL], "gtk.xpm")
146
147 self.zone_dessin.window.draw_drawable(self.contexte_graph, pixmap, 0, 0, x+15, y+25,
148 -1, -1)
149 self.stylepango.set_text("Pixmap")
150 self.zone_dessin.window.draw_layout(self.contexte_graph, x+5, y+80, self.stylepango)
151 return
152
153 def trace_polygone(self, x, y):
154 points = [(x+10,y+60), (x+10,y+20), (x+40,y+70),
155 (x+30,y+30), (x+50,y+40)]
156 self.zone_dessin.window.draw_polygon(self.contexte_graph, True, points)
157 self.stylepango.set_text("Polygone")
158 self.zone_dessin.window.draw_layout(self.contexte_graph, x+5, y+80, self.stylepango)
159 return
160
161 def trace_image_rgb(self, x, y):
162 b = 80*3*80*['\0']
163 for i in range(80):
164 for j in range(80):
165 b[3*80*i+3*j] = chr(255-3*i)
166 b[3*80*i+3*j+1] = chr(255-3*abs(i-j))
167 b[3*80*i+3*j+2] = chr(255-3*j)
168 buff = string.join(b, '')
169 self.zone_dessin.window.draw_rgb_image(self.contexte_graph, x, y, 80, 80,
170 gtk.gdk.RGB_DITHER_NONE, buff, 80*3)
171 self.stylepango.set_text("Image RGB")
172 self.zone_dessin.window.draw_layout(self.contexte_graph, x+5, y+80, self.stylepango)
173 return
174
175 def main():
176 gtk.main()
177 return 0
178
179 if __name__ == "__main__":
180 ExempleZoneDessin()
181 main()
</pre>
</div>
<div class="navfooter">
<hr>
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left">
<a accesskey="p" href="ch-DrawingArea.html">Préc.</a> </td>
<td width="20%" align="center"><a accesskey="u" href="ch-DrawingArea.html">Chapitre parent</a></td>
<td width="40%" align="right"> <a accesskey="n" href="ch-TextViewWidget.html">Suiv.</a>
</td>
</tr>
<tr>
<td width="40%" align="left" valign="top">Chapitre 12. La zone de dessin (Drawing Area) </td>
<td width="20%" align="center"><a accesskey="h" href="index.html">Sommaire</a></td>
<td width="40%" align="right" valign="top"> Chapitre 13. Le widget TextView</td>
</tr>
</table>
</div>
</body>
</html>