|
8 | 8 | from .importbackend_agg,backend_gtk4
|
9 | 9 | from .backend_cairoimportcairo
|
10 | 10 | from .backend_gtk4importGtk,_BackendGTK4
|
11 |
| -frommatplotlibimporttransforms |
12 | 11 |
|
13 | 12 |
|
14 | 13 | classFigureCanvasGTK4Agg(backend_gtk4.FigureCanvasGTK4,
|
15 | 14 | backend_agg.FigureCanvasAgg):
|
16 | 15 | def__init__(self,figure):
|
17 | 16 | backend_gtk4.FigureCanvasGTK4.__init__(self,figure)
|
18 |
| -self._bbox_queue= [] |
19 | 17 |
|
20 | 18 | defon_draw_event(self,widget,ctx):
|
21 | 19 | scale=self.device_pixel_ratio
|
22 | 20 | allocation=self.get_allocation()
|
23 |
| -w=allocation.width*scale |
24 |
| -h=allocation.height*scale |
25 | 21 |
|
26 |
| -ifnotlen(self._bbox_queue): |
27 |
| -Gtk.render_background( |
28 |
| -self.get_style_context(),ctx, |
29 |
| -allocation.x,allocation.y, |
30 |
| -allocation.width,allocation.height) |
31 |
| -bbox_queue= [transforms.Bbox([[0,0], [w,h]])] |
32 |
| -else: |
33 |
| -bbox_queue=self._bbox_queue |
| 22 | +Gtk.render_background( |
| 23 | +self.get_style_context(),ctx, |
| 24 | +allocation.x,allocation.y, |
| 25 | +allocation.width,allocation.height) |
34 | 26 |
|
35 | 27 | ctx=backend_cairo._to_context(ctx)
|
36 | 28 |
|
37 |
| -forbboxinbbox_queue: |
38 |
| -x=int(bbox.x0) |
39 |
| -y=h-int(bbox.y1) |
40 |
| -width=int(bbox.x1)-int(bbox.x0) |
41 |
| -height=int(bbox.y1)-int(bbox.y0) |
42 |
| - |
43 |
| -buf=cbook._unmultiplied_rgba8888_to_premultiplied_argb32( |
44 |
| -np.asarray(self.copy_from_bbox(bbox))) |
45 |
| -image=cairo.ImageSurface.create_for_data( |
46 |
| -buf.ravel().data,cairo.FORMAT_ARGB32,width,height) |
47 |
| -image.set_device_scale(scale,scale) |
48 |
| -ctx.set_source_surface(image,x/scale,y/scale) |
49 |
| -ctx.paint() |
50 |
| - |
51 |
| -iflen(self._bbox_queue): |
52 |
| -self._bbox_queue= [] |
| 29 | +buf=cbook._unmultiplied_rgba8888_to_premultiplied_argb32( |
| 30 | +np.asarray(self.renderer.buffer_rgba())) |
| 31 | +height,width,_=buf.shape |
| 32 | +image=cairo.ImageSurface.create_for_data( |
| 33 | +buf.ravel().data,cairo.FORMAT_ARGB32,width,height) |
| 34 | +image.set_device_scale(scale,scale) |
| 35 | +ctx.set_source_surface(image,0,0) |
| 36 | +ctx.paint() |
53 | 37 |
|
54 | 38 | returnFalse
|
55 | 39 |
|
56 |
| -defblit(self,bbox=None): |
57 |
| -# If bbox is None, blit the entire canvas to gtk. Otherwise |
58 |
| -# blit only the area defined by the bbox. |
59 |
| -ifbboxisNone: |
60 |
| -bbox=self.figure.bbox |
61 |
| - |
62 |
| -scale=self.device_pixel_ratio |
63 |
| -allocation=self.get_allocation() |
64 |
| -x=int(bbox.x0/scale) |
65 |
| -y=allocation.height-int(bbox.y1/scale) |
66 |
| -width= (int(bbox.x1)-int(bbox.x0))//scale |
67 |
| -height= (int(bbox.y1)-int(bbox.y0))//scale |
68 |
| - |
69 |
| -self._bbox_queue.append(bbox) |
70 |
| -self.queue_draw_area(x,y,width,height) |
71 |
| - |
72 | 40 | defdraw(self):
|
73 | 41 | backend_agg.FigureCanvasAgg.draw(self)
|
74 | 42 | super().draw()
|
|