Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d38eca6

Browse files
committed
fixed a span bug
svn path=/trunk/matplotlib/; revision=1567
1 parent e0953ac commit d38eca6

9 files changed

Lines changed: 78 additions & 15 deletions

File tree

examples/embedding_in_gtk.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from matplotlib.figure import Figure
99
from matplotlib.numerix import arange, sin, pi
1010

11+
1112
# switch comments for gtk over gtkagg
1213
#from matplotlib.backends.backend_gtk import FigureCanvasGTK as FigureCanvas
1314
from matplotlib.backends.backend_gtkagg import FigureCanvasGTKAgg as FigureCanvas
@@ -25,8 +26,10 @@
2526
s = sin(2*pi*t)
2627
a.plot(t,s)
2728

29+
2830
canvas = FigureCanvas(f) # a gtk.DrawingArea
2931
win.add(canvas)
3032

33+
3134
win.show_all()
3235
gtk.main()

examples/embedding_in_gtk2.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from matplotlib.axes import Subplot
88
from matplotlib.figure import Figure
99
from matplotlib.numerix import arange, sin, pi
10+
from matplotlib.widgets import HorizontalSpanSelector
1011

1112
# switch comments for gtk over gtkagg
1213
#from matplotlib.backends.backend_gtk import FigureCanvasGTK as FigureCanvas
@@ -31,11 +32,17 @@
3132

3233
ax.plot(t,s)
3334

35+
3436
canvas = FigureCanvas(fig) # a gtk.DrawingArea
3537
vbox.pack_start(canvas)
3638

39+
3740
toolbar = NavigationToolbar(canvas, win)
3841
vbox.pack_start(toolbar, False, False)
3942

43+
def onselect(*args): pass
44+
span = HorizontalSpanSelector(ax, onselect, useblit=False,
45+
rectprops=dict(alpha=0.5, facecolor='red') )
46+
4047
win.show_all()
4148
gtk.main()

examples/mpl_with_glade.glade

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,15 @@
1111
<property name="modal">False</property>
1212
<property name="resizable">True</property>
1313
<property name="destroy_with_parent">False</property>
14+
<property name="decorated">True</property>
15+
<property name="skip_taskbar_hint">False</property>
16+
<property name="skip_pager_hint">False</property>
17+
<property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
18+
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
19+
<property name="focus_on_map">True</property>
20+
<signal name="button_press_event" handler="on_windowMain_button_press_event" last_modification_time="Tue, 26 Jul 2005 21:47:00 GMT"/>
21+
<signal name="button_release_event" handler="on_windowMain_button_release_event" last_modification_time="Tue, 26 Jul 2005 21:47:07 GMT"/>
22+
<signal name="motion_notify_event" handler="on_windowMain_motion_notify_event" last_modification_time="Tue, 26 Jul 2005 21:47:18 GMT"/>
1423

1524
<child>
1625
<widget class="GtkVBox" id="vboxMain">
@@ -187,6 +196,7 @@
187196
<property name="visible">True</property>
188197
<property name="can_focus">True</property>
189198
<property name="relief">GTK_RELIEF_NORMAL</property>
199+
<property name="focus_on_click">True</property>
190200
<signal name="clicked" handler="on_buttonClickMe_clicked" last_modification_time="Wed, 01 Oct 2003 13:50:20 GMT"/>
191201

192202
<child>
@@ -196,6 +206,10 @@
196206
<property name="yalign">0.5</property>
197207
<property name="xscale">0</property>
198208
<property name="yscale">0</property>
209+
<property name="top_padding">0</property>
210+
<property name="bottom_padding">0</property>
211+
<property name="left_padding">0</property>
212+
<property name="right_padding">0</property>
199213

200214
<child>
201215
<widget class="GtkHBox" id="hbox1">
@@ -233,6 +247,10 @@
233247
<property name="yalign">0.5</property>
234248
<property name="xpad">0</property>
235249
<property name="ypad">0</property>
250+
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
251+
<property name="width_chars">-1</property>
252+
<property name="single_line_mode">False</property>
253+
<property name="angle">0</property>
236254
</widget>
237255
<packing>
238256
<property name="padding">0</property>

examples/mpl_with_glade.py

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
from matplotlib.figure import Figure
66
from matplotlib.axes import Subplot
7-
from matplotlib.backends.backend_gtk import FigureCanvasGTK, NavigationToolbar
7+
from matplotlib.backends.backend_gtkagg import FigureCanvasGTKAgg as FigureCanvas
8+
from matplotlib.backends.backend_gtkagg import NavigationToolbar2GTKAgg as NavigationToolbar
9+
from matplotlib.widgets import HorizontalSpanSelector
810

911
from matplotlib.numerix import arange, sin, pi
1012
import gtk
@@ -36,11 +38,11 @@ def on_buttonClickMe_clicked(event):
3638

3739
class WidgetsWrapper:
3840
def __init__(self):
39-
self.widgets = gtk.glade.XML('mpl_with_glade.glade')
41+
self.widgets = gtk.glade.XML('test.glade')
4042
self.widgets.signal_autoconnect(GladeHandlers.__dict__)
4143

4244
self['windowMain'].connect('destroy', lambda x: gtk.main_quit())
43-
45+
self['windowMain'].move(10,10)
4446
self.figure = Figure(figsize=(8,6), dpi=72)
4547
self.axis = self.figure.add_subplot(111)
4648

@@ -50,9 +52,18 @@ def __init__(self):
5052
self.axis.set_xlabel('time (s)')
5153
self.axis.set_ylabel('voltage')
5254

53-
self.canvas = FigureCanvasGTK(self.figure) # a gtk.DrawingArea
55+
self.canvas = FigureCanvas(self.figure) # a gtk.DrawingArea
5456
self.canvas.show()
55-
self['vboxMain'].pack_start(self.canvas, gtk.TRUE, gtk.TRUE)
57+
self.canvas.set_size_request(600, 400)
58+
59+
def onselect(xmin, xmax):
60+
print xmin, xmax
61+
62+
span = HorizontalSpanSelector(self.axis, onselect, useblit=False,
63+
rectprops=dict(alpha=0.5, facecolor='red') )
64+
65+
66+
self['vboxMain'].pack_start(self.canvas, True, True)
5667
self['vboxMain'].show()
5768

5869
# below is optional if you want the navigation toolbar
@@ -63,11 +74,15 @@ def __init__(self):
6374

6475
sep = gtk.HSeparator()
6576
sep.show()
66-
self['vboxMain'].pack_start(sep, gtk.TRUE, gtk.TRUE)
77+
self['vboxMain'].pack_start(sep, True, True)
6778

6879

6980
self['vboxMain'].reorder_child(self['buttonClickMe'],-1)
7081

82+
83+
84+
85+
7186
def __getitem__(self, key):
7287
return self.widgets.get_widget(key)
7388

lib/matplotlib/axes.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -754,6 +754,7 @@ def add_patch(self, p):
754754
set to the Axes clipping box. If the transform is not set, it
755755
wil be set to self.transData.
756756
"""
757+
print 'calling add patch', p
757758
self._set_artist_props(p)
758759
p.set_clip_box(self.bbox)
759760
xys = self._get_verts_in_data_coords(
@@ -1422,6 +1423,7 @@ def draw(self, renderer, inframe=False):
14221423

14231424
self._cachedRenderer = renderer
14241425

1426+
14251427
def __draw_animate(self):
14261428
# ignore for now; broken
14271429
if self._lastRenderer is None:

lib/matplotlib/backends/backend_gtk.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,7 @@ def draw(self):
223223
self._need_redraw = True
224224
#self.expose_event(self, None)
225225
self.queue_draw()
226+
226227

227228

228229
def draw_idle(self):

lib/matplotlib/patches.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ def draw(self, renderer):
125125

126126
verts = self.get_verts()
127127
tverts = self._transform.seq_xy_tups(verts)
128+
128129
renderer.draw_polygon(gc, rgbFace, tverts)
129130

130131

lib/matplotlib/widgets.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,7 @@ def clear(self, event):
623623
self.lineh.set_visible(False)
624624

625625
def onmove(self, event):
626+
626627
if event.inaxes != self.ax:
627628
self.linev.set_visible(False)
628629
self.lineh.set_visible(False)
@@ -632,7 +633,7 @@ def onmove(self, event):
632633
self.needclear = False
633634
return
634635
self.needclear = True
635-
636+
if not self.visible: return
636637
self.linev.set_xdata((event.xdata, event.xdata))
637638
self.lineh.set_ydata((event.ydata, event.ydata))
638639
self.linev.set_visible(self.visible and self.vertOn)
@@ -694,6 +695,7 @@ def __init__(self, ax, onselect, minspan=None, useblit=False, rectprops=None):
694695
self.canvas.mpl_connect('motion_notify_event', self.onmove)
695696
self.canvas.mpl_connect('button_press_event', self.press)
696697
self.canvas.mpl_connect('button_release_event', self.release)
698+
self.canvas.mpl_connect('draw_event', self.update_background)
697699

698700
self.rect = None
699701
self.background = None
@@ -708,25 +710,27 @@ def __init__(self, ax, onselect, minspan=None, useblit=False, rectprops=None):
708710
self.rect = Rectangle( (0,0), 0, 1,
709711
transform=trans,
710712
visible=False,
711-
**self.rectprops
713+
**self.rectprops
712714
)
713-
self.ax.add_patch(self.rect)
714715

715-
def update_background(self):
716+
if not self.useblit: self.ax.add_patch(self.rect)
717+
718+
def update_background(self, event):
716719
'force an update of the background'
717-
self.background = self.canvas.copy_from_bbox(self.ax.bbox)
720+
if self.useblit:
721+
self.background = self.canvas.copy_from_bbox(self.ax.bbox)
718722

723+
719724
def ignore(self, event):
720725
'return True if event should be ignored'
721726
return event.inaxes!=self.ax or not self.visible or event.button !=1
722727

723728
def press(self, event):
724729
'on button press event'
725730
if self.ignore(event): return
726-
self.background = self.canvas.copy_from_bbox(self.ax.bbox)
731+
727732
self.rect.set_visible(self.visible)
728733
self.pressx = event.xdata
729-
print 'ressx', self.pressx
730734
return False
731735

732736

@@ -736,8 +740,9 @@ def release(self, event):
736740

737741
self.rect.set_visible(False)
738742
self.canvas.draw()
739-
xmin = self.rect.xy[0]
740-
xmax = xmin + self.rect.get_width()
743+
xmin = self.pressx
744+
xmax = event.xdata
745+
if xmin>xmax: xmin, xmax = xmax, xmin
741746
span = xmax - xmin
742747
if self.minspan is not None and span<self.minspan: return
743748
self.onselect(xmin, xmax)

src/_gtkagg.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@ class _gtkagg_module : public Py::ExtensionModule<_gtkagg_module>
7777
double r = clipbox->ur_api()->x_api()->val() ;
7878
double t = clipbox->ur_api()->y_api()->val() ;
7979

80+
//std::cout << b << " "
81+
// << t << " ";
82+
8083
destx = (int)l;
8184
desty = srcheight-(int)t;
8285
destwidth = (int)(r-l);
@@ -95,13 +98,21 @@ class _gtkagg_module : public Py::ExtensionModule<_gtkagg_module>
9598
renderer_base destrb(destpf);
9699
//destrb.clear(agg::rgba(1, 0, 0));
97100

101+
//std::cout << "rect " << r << " " << srcheight << " " << b << " ";
98102
agg::rect_base<int> region(destx, desty, (int)r, srcheight-(int)b);
99103
destrb.copy_from(*aggRenderer->renderingBuffer, &region,
100104
-destx, -desty);
101105

102106

103107
}
104108

109+
110+
/*std::cout << desty << " "
111+
<< destheight << " "
112+
<< srcheight << std::endl;*/
113+
114+
115+
//gdk_rgb_init();
105116
gdk_draw_rgb_32_image(drawable, gc, destx, desty,
106117
destwidth,
107118
destheight,

0 commit comments

Comments
 (0)