Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
5501f4e
first steps to extract FigureManager* and friends from pyplot
tacaswell Nov 29, 2013
373909d
split backend_qt4 into two parts, with and without Gcf
tacaswell Nov 29, 2013
3014931
split backend_qt4agg into two parts.
tacaswell Nov 29, 2013
37e600e
Added a demo-file to show how to use the FigureManager classes to
tacaswell Nov 29, 2013
82f3dea
removed un-needed import of Gcf
tacaswell Nov 29, 2013
1ad0ebf
pep8 on backend_gtk.py
tacaswell Dec 3, 2013
58ea364
pep8 clean up in backend_gdk
tacaswell Dec 3, 2013
f355c0c
removed un-needed Gcf import
tacaswell Dec 3, 2013
d5e47fb
split backend_gcf into two parts,
tacaswell Dec 3, 2013
87781c5
pep8 on backend_gtkagg.py
tacaswell Dec 3, 2013
ce7c2ac
split backend_gktagg.py in to two parts
tacaswell Dec 3, 2013
ec24d0c
updated exclude list
tacaswell Dec 3, 2013
d3ecb67
pep8 clean up on backend_gtk3.py
tacaswell Dec 3, 2013
26fc122
split backend_gtk3 into two parts
tacaswell Dec 3, 2013
fe7cdc0
updated coding standards
tacaswell Dec 3, 2013
b099ddd
pep8 on backend_gtkcairo.py
tacaswell Dec 4, 2013
70939fe
split backend_gtkcairo.py into Gcf dependent and independent
tacaswell Dec 4, 2013
4ec7908
import from _backend_bases in backend_agg to avoid implicit Gcf import
tacaswell Dec 4, 2013
4f9f5b5
pep8 on backend_agg.py
tacaswell Dec 4, 2013
03e86ee
split backend_gtk3agg.py into two parts, the gcf dependent and
tacaswell Dec 4, 2013
d97d98f
updated coding standards exclude list
tacaswell Dec 4, 2013
83caa44
pep8 on backend_gtk3cairo.py
tacaswell Dec 4, 2013
9e74042
pep8 on backend_cairo.py
tacaswell Dec 4, 2013
51ccd5e
changed backend_cairo.py to import from _backend_bases to avoid
tacaswell Dec 4, 2013
efb1881
updated coding standards
tacaswell Dec 4, 2013
f4bdd22
Split backend_gtk3cairo.py into two parts, one dependent on Gcf
tacaswell Dec 4, 2013
a4bda49
Updated embedding_with_qt4_manager.py
tacaswell Dec 5, 2013
407b1ee
Improved class-aliases in _backend_qt*.py
tacaswell Dec 5, 2013
03c43aa
adjusting imports
fariza Dec 18, 2013
35afa92
renamed _backend_bases.py -> base_backend_bases.py
tacaswell Jan 30, 2014
2b213c0
massive rename operation
tacaswell Jan 30, 2014
93fc457
removed rouge merge notation
tacaswell Jan 30, 2014
6401be2
fixed broken import
tacaswell Jan 30, 2014
3ea9f08
pep8 on backend_tkagg.py
tacaswell Jan 30, 2014
b528125
pep8 conformance
tacaswell Jan 31, 2014
1dde78d
removed files that no longer exist
tacaswell Jan 31, 2014
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
split backend_gktagg.py in to two parts
_backend_gtkagg.py has no dependence on `Gcf`, backend_gtkagg.py
depends on `Gcf` and maintains reverse compatibility.
  • Loading branch information
tacaswell committed Jan 30, 2014
commit ce7c2acb50084881ad163e6168854294a097fbe9
129 changes: 129 additions & 0 deletions lib/matplotlib/backends/_backend_gtkagg.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
"""
Render to gtk from agg
"""
from __future__ import (absolute_import, division, print_function,
unicode_literals)

import six

import os

import matplotlib
from matplotlib.figure import Figure
from matplotlib.backends.backend_agg import FigureCanvasAgg
from ._backend_gtk import (gtk,
FigureManagerGTK, FigureCanvasGTK,
error_msg_gtk, PIXELS_PER_INCH,
backend_version,
NavigationToolbar2GTK)
from matplotlib.backends._gtkagg import agg_to_gtk_drawable


DEBUG = False


class NavigationToolbar2GTKAgg(NavigationToolbar2GTK):
def _get_canvas(self, fig):
return FigureCanvasGTKAgg(fig)


class FigureManagerGTKAgg(FigureManagerGTK):
def _get_toolbar(self, canvas):
# must be inited after the window, drawingArea and figure
# attrs are set
if matplotlib.rcParams['toolbar'] == 'toolbar2':
toolbar = NavigationToolbar2GTKAgg(canvas, self.window)
else:
toolbar = None
return toolbar


def new_figure_manager(num, *args, **kwargs):
"""
Create a new figure manager instance
"""
if DEBUG:
print('backend_gtkagg.new_figure_manager')
FigureClass = kwargs.pop('FigureClass', Figure)
thisFig = FigureClass(*args, **kwargs)
return new_figure_manager_given_figure(num, thisFig)


def new_figure_manager_given_figure(num, figure):
"""
Create a new figure manager instance for the given figure.
"""
canvas = FigureCanvasGTKAgg(figure)
return FigureManagerGTKAgg(canvas, num)
if DEBUG:
print('backend_gtkagg.new_figure_manager done')


class FigureCanvasGTKAgg(FigureCanvasGTK, FigureCanvasAgg):
filetypes = FigureCanvasGTK.filetypes.copy()
filetypes.update(FigureCanvasAgg.filetypes)

def configure_event(self, widget, event=None):
if DEBUG:
print('FigureCanvasGTKAgg.configure_event')
if widget.window is None:
return
try:
del self.renderer
except AttributeError:
pass
w, h = widget.window.get_size()
if w == 1 or h == 1:
return # empty fig

# compute desired figure size in inches
dpival = self.figure.dpi
winch = w/dpival
hinch = h/dpival
self.figure.set_size_inches(winch, hinch)
self._need_redraw = True
self.resize_event()
if DEBUG:
print('FigureCanvasGTKAgg.configure_event end')
return True

def _render_figure(self, pixmap, width, height):
if DEBUG:
print('FigureCanvasGTKAgg.render_figure')
FigureCanvasAgg.draw(self)
if DEBUG:
print('FigureCanvasGTKAgg.render_figure pixmap', pixmap)
#agg_to_gtk_drawable(pixmap, self.renderer._renderer, None)

buf = self.buffer_rgba()
ren = self.get_renderer()
w = int(ren.width)
h = int(ren.height)

pixbuf = gtk.gdk.pixbuf_new_from_data(
buf, gtk.gdk.COLORSPACE_RGB, True, 8, w, h, w*4)
pixmap.draw_pixbuf(pixmap.new_gc(), pixbuf, 0, 0, 0, 0, w, h,
gtk.gdk.RGB_DITHER_NONE, 0, 0)
if DEBUG:
print('FigureCanvasGTKAgg.render_figure done')

def blit(self, bbox=None):
if DEBUG:
print('FigureCanvasGTKAgg.blit', self._pixmap)
agg_to_gtk_drawable(self._pixmap, self.renderer._renderer, bbox)

x, y, w, h = self.allocation

self.window.draw_drawable(self.style.fg_gc[self.state], self._pixmap,
0, 0, 0, 0, w, h)
if DEBUG:
print('FigureCanvasGTKAgg.done')

def print_png(self, filename, *args, **kwargs):
# Do this so we can save the resolution of figure in the PNG file
agg = self.switch_backends(FigureCanvasAgg)
return agg.print_png(filename, *args, **kwargs)


FigureCanvas = FigureCanvasGTKAgg
FigureManager = FigureManagerGTKAgg
136 changes: 18 additions & 118 deletions lib/matplotlib/backends/backend_gtkagg.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,128 +3,28 @@
"""
from __future__ import (absolute_import, division, print_function,
unicode_literals)

import six

import os

import matplotlib
from matplotlib.figure import Figure
from matplotlib.backends.backend_agg import FigureCanvasAgg
from matplotlib.backends.backend_gtk import (gtk,
FigureManagerGTK, FigureCanvasGTK,
show, draw_if_interactive,
error_msg_gtk, PIXELS_PER_INCH,
backend_version,
NavigationToolbar2GTK)
from matplotlib.backends._gtkagg import agg_to_gtk_drawable


DEBUG = False


class NavigationToolbar2GTKAgg(NavigationToolbar2GTK):
def _get_canvas(self, fig):
return FigureCanvasGTKAgg(fig)


class FigureManagerGTKAgg(FigureManagerGTK):
def _get_toolbar(self, canvas):
# must be inited after the window, drawingArea and figure
# attrs are set
if matplotlib.rcParams['toolbar'] == 'toolbar2':
toolbar = NavigationToolbar2GTKAgg(canvas, self.window)
else:
toolbar = None
return toolbar


def new_figure_manager(num, *args, **kwargs):
"""
Create a new figure manager instance
"""
if DEBUG:
print('backend_gtkagg.new_figure_manager')
FigureClass = kwargs.pop('FigureClass', Figure)
thisFig = FigureClass(*args, **kwargs)
return new_figure_manager_given_figure(num, thisFig)


def new_figure_manager_given_figure(num, figure):
"""
Create a new figure manager instance for the given figure.
"""
canvas = FigureCanvasGTKAgg(figure)
return FigureManagerGTKAgg(canvas, num)
if DEBUG:
print('backend_gtkagg.new_figure_manager done')
from matplotlib._pylab_helpers import Gcf
# import the Gcf free parts
from ._backend_gtkagg import (gtk,
FigureCanvasGTKAgg,
FigureManagerGTKAgg,
NavigationToolbar2GTKAgg,
new_figure_manager,
new_figure_manager_given_figure)


class FigureCanvasGTKAgg(FigureCanvasGTK, FigureCanvasAgg):
filetypes = FigureCanvasGTK.filetypes.copy()
filetypes.update(FigureCanvasAgg.filetypes)

def configure_event(self, widget, event=None):
if DEBUG:
print('FigureCanvasGTKAgg.configure_event')
if widget.window is None:
return
try:
del self.renderer
except AttributeError:
pass
w, h = widget.window.get_size()
if w == 1 or h == 1:
return # empty fig

# compute desired figure size in inches
dpival = self.figure.dpi
winch = w/dpival
hinch = h/dpival
self.figure.set_size_inches(winch, hinch)
self._need_redraw = True
self.resize_event()
if DEBUG:
print('FigureCanvasGTKAgg.configure_event end')
return True

def _render_figure(self, pixmap, width, height):
if DEBUG:
print('FigureCanvasGTKAgg.render_figure')
FigureCanvasAgg.draw(self)
if DEBUG:
print('FigureCanvasGTKAgg.render_figure pixmap', pixmap)
#agg_to_gtk_drawable(pixmap, self.renderer._renderer, None)

buf = self.buffer_rgba()
ren = self.get_renderer()
w = int(ren.width)
h = int(ren.height)

pixbuf = gtk.gdk.pixbuf_new_from_data(
buf, gtk.gdk.COLORSPACE_RGB, True, 8, w, h, w*4)
pixmap.draw_pixbuf(pixmap.new_gc(), pixbuf, 0, 0, 0, 0, w, h,
gtk.gdk.RGB_DITHER_NONE, 0, 0)
if DEBUG:
print('FigureCanvasGTKAgg.render_figure done')

def blit(self, bbox=None):
if DEBUG:
print('FigureCanvasGTKAgg.blit', self._pixmap)
agg_to_gtk_drawable(self._pixmap, self.renderer._renderer, bbox)

x, y, w, h = self.allocation

self.window.draw_drawable(self.style.fg_gc[self.state], self._pixmap,
0, 0, 0, 0, w, h)
if DEBUG:
print('FigureCanvasGTKAgg.done')

def print_png(self, filename, *args, **kwargs):
# Do this so we can save the resolution of figure in the PNG file
agg = self.switch_backends(FigureCanvasAgg)
return agg.print_png(filename, *args, **kwargs)
# import the gcg contaminated parts
from .backend_gtk import (show,
draw_if_interactive,
_gtk_cleanup,
key_press_handler)


FigureCanvas = FigureCanvasGTKAgg
FigureManager = FigureManagerGTKAgg

# set the call backs
FigureManager._key_press_handler = staticmethod(key_press_handler)
FigureManager._destroy_callback = staticmethod(Gcf.destroy)
FigureManager._gtk_cleanup = staticmethod(_gtk_cleanup)