/usr/lib/python3/dist-packages/ginga/mplw/MplHelp.py is in python3-ginga 2.6.1-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 | #
# MplHelp.py -- help classes for Matplotlib drawing
#
# This is open-source software licensed under a BSD license.
# Please see the file LICENSE.txt for details.
from ginga import colors
import matplotlib.textpath as textpath
class Pen(object):
def __init__(self, color='black', linewidth=1, linestyle='solid'):
self.color = color
self.linewidth = linewidth
self.linestyle = 'solid'
if linestyle == 'dash':
self.linestyle = 'dashdot'
class Brush(object):
def __init__(self, color='black', fill=False):
self.color = color
self.fill = fill
class Font(object):
def __init__(self, fontname='sans', fontsize=12.0, color='black'):
self.fontname = fontname
self.fontsize = fontsize
self.color = color
def get_fontdict(self):
fontdict = dict(color=self.color, family=self.fontname,
size=self.fontsize, transform=None)
return fontdict
class MplContext(object):
def __init__(self, axes):
self.axes = axes
self.kwdargs = dict()
def set_canvas(self, axes):
self.axes = axes
def init(self, **kwdargs):
self.kwdargs = dict()
self.kwdargs.update(kwdargs)
def set(self, **kwdargs):
self.kwdargs.update(kwdargs)
def update_fill(self, brush):
if brush is None:
self.kwdargs['fill'] = False
return
self.kwdargs['fill'] = True
self.kwdargs['facecolor'] = brush.color
def update_line(self, pen):
self.kwdargs['color'] = pen.color
self.kwdargs['linewidth'] = pen.linewidth
self.kwdargs['linestyle'] = pen.linestyle
def update_patch(self, pen, brush):
self.update_fill(brush)
if self.kwdargs['fill']:
line_color_attr = 'facecolor'
if 'facecolor' in self.kwdargs:
line_color_attr = 'edgecolor'
else:
line_color_attr = 'color'
self.kwdargs[line_color_attr] = pen.color
self.kwdargs['linewidth'] = pen.linewidth
self.kwdargs['linestyle'] = pen.linestyle
def get_color(self, color, alpha):
if isinstance(color, str) or isinstance(color, type(u"")):
r, g, b = colors.lookup_color(color)
elif isinstance(color, tuple):
# color is assumed to be a 3-tuple of RGBA values as floats
# between 0 and 1
r, g, b = color
else:
r, g, b = 1.0, 1.0, 1.0
return (r, g, b, alpha)
def get_pen(self, color, alpha=1.0, linewidth=1, linestyle='solid'):
color = self.get_color(color, alpha=alpha)
return Pen(color=color, linewidth=linewidth, linestyle=linestyle)
def get_brush(self, color, alpha=1.0):
color = self.get_color(color, alpha=alpha)
return Brush(color=color, fill=True)
def get_font(self, name, size, color, alpha=1.0):
color = self.get_color(color, alpha=alpha)
return Font(fontname=name, fontsize=size, color=color)
def text_extents(self, text, font):
# This is not completely accurate because it depends a lot
# on the renderer used, but that is complicated under Mpl
t = textpath.TextPath((0, 0), text, size=font.fontsize,
prop=font.fontname)
bb = t.get_extents()
wd, ht = bb.width, bb.height
return (wd, ht)
class Timer(object):
"""Abstraction of a GUI-toolkit implemented timer."""
def __init__(self, ival_sec, expire_cb, data=None, mplcanvas=None):
"""Create a timer set to expire after `ival_sec` and which will
call the callable `expire_cb` when it expires.
"""
self.ival_sec = ival_sec
self.cb = expire_cb
self.data = data
self._timer = mplcanvas.new_timer()
self._timer.single_shot = True
self._timer.add_callback(self._redirect_cb)
def start(self, ival_sec=None):
"""Start the timer. If `ival_sec` is not None, it should
specify the time to expiration in seconds.
"""
if ival_sec is None:
ival_sec = self.ival_sec
self.cancel()
# Matplotlib timer set in milliseconds
time_ms = int(ival_sec * 1000.0)
self._timer.interval = time_ms
self._timer.start()
def _redirect_cb(self):
self.cb(self)
def cancel(self):
"""Cancel this timer. If the timer is not running, there
is no error.
"""
try:
self._timer.stop()
except:
pass
#END
|