1"""
2GTK+ Matplotlib interface using cairo (not GDK) drawing operations.
3Author: Steve Chaplin
4"""
5from __future__ import (absolute_import, division, print_function,
6                        unicode_literals)
7
8import six
9
10import gtk
11if gtk.pygtk_version < (2, 7, 0):
12    import cairo.gtk
13
14from matplotlib import cbook
15from matplotlib.backends import backend_cairo
16from matplotlib.backends.backend_gtk import *
17from matplotlib.backends.backend_gtk import _BackendGTK
18
19backend_version = ('PyGTK(%d.%d.%d) ' % gtk.pygtk_version
20                   + 'Pycairo(%s)' % backend_cairo.backend_version)
21
22
23class RendererGTKCairo (backend_cairo.RendererCairo):
24    if gtk.pygtk_version >= (2,7,0):
25        def set_pixmap (self, pixmap):
26            self.gc.ctx = pixmap.cairo_create()
27    else:
28        def set_pixmap (self, pixmap):
29            self.gc.ctx = cairo.gtk.gdk_cairo_create (pixmap)
30
31
32class FigureCanvasGTKCairo(backend_cairo.FigureCanvasCairo, FigureCanvasGTK):
33    filetypes = FigureCanvasGTK.filetypes.copy()
34    filetypes.update(backend_cairo.FigureCanvasCairo.filetypes)
35
36    def __init__(self, *args, **kwargs):
37        warn_deprecated('2.2',
38                        message=('The GTKCairo backend is deprecated. It is '
39                                 'untested and will be removed in Matplotlib '
40                                 '3.0. Use the GTK3Cairo backend instead. See '
41                                 'Matplotlib usage FAQ for more info on '
42                                 'backends.'),
43                        alternative='GTK3Cairo')
44        super(FigureCanvasGTKCairo, self).__init__(*args, **kwargs)
45
46    def _renderer_init(self):
47        """Override to use cairo (rather than GDK) renderer"""
48        self._renderer = RendererGTKCairo(self.figure.dpi)
49
50
51# This class has been unused for a while at least.
52@cbook.deprecated("2.1")
53class FigureManagerGTKCairo(FigureManagerGTK):
54    def _get_toolbar(self, canvas):
55        # must be inited after the window, drawingArea and figure
56        # attrs are set
57        if matplotlib.rcParams['toolbar']=='toolbar2':
58            toolbar = NavigationToolbar2GTKCairo (canvas, self.window)
59        else:
60            toolbar = None
61        return toolbar
62
63
64# This class has been unused for a while at least.
65@cbook.deprecated("2.1")
66class NavigationToolbar2Cairo(NavigationToolbar2GTK):
67    def _get_canvas(self, fig):
68        return FigureCanvasGTKCairo(fig)
69
70
71@_BackendGTK.export
72class _BackendGTKCairo(_BackendGTK):
73    FigureCanvas = FigureCanvasGTKCairo
74    FigureManager = FigureManagerGTK
75