11import functools
2+ import io
23from unittest import mock
34
45from matplotlib ._api .deprecation import MatplotlibDeprecationWarning
@@ -23,6 +24,45 @@ def ax():
2324 return get_ax ()
2425
2526
27+ def test_save_blitted_widget_as_pdf ():
28+ from matplotlib .widgets import CheckButtons , RadioButtons
29+ from matplotlib .cbook import _get_running_interactive_framework
30+ if _get_running_interactive_framework () not in ['headless' , None ]:
31+ pytest .xfail ("Callback exceptions are not raised otherwise." )
32+
33+ fig , ax = plt .subplots (
34+ nrows = 2 , ncols = 2 , figsize = (5 , 2 ), width_ratios = [1 , 2 ]
35+ )
36+ default_rb = RadioButtons (ax [0 , 0 ], ['Apples' , 'Oranges' ])
37+ styled_rb = RadioButtons (
38+ ax [0 , 1 ], ['Apples' , 'Oranges' ],
39+ label_props = {'color' : ['red' , 'orange' ],
40+ 'fontsize' : [16 , 20 ]},
41+ radio_props = {'edgecolor' : ['red' , 'orange' ],
42+ 'facecolor' : ['mistyrose' , 'peachpuff' ]}
43+ )
44+
45+ default_cb = CheckButtons (ax [1 , 0 ], ['Apples' , 'Oranges' ],
46+ actives = [True , True ])
47+ styled_cb = CheckButtons (
48+ ax [1 , 1 ], ['Apples' , 'Oranges' ],
49+ actives = [True , True ],
50+ label_props = {'color' : ['red' , 'orange' ],
51+ 'fontsize' : [16 , 20 ]},
52+ frame_props = {'edgecolor' : ['red' , 'orange' ],
53+ 'facecolor' : ['mistyrose' , 'peachpuff' ]},
54+ check_props = {'color' : ['darkred' , 'darkorange' ]}
55+ )
56+
57+ ax [0 , 0 ].set_title ('Default' )
58+ ax [0 , 1 ].set_title ('Stylized' )
59+ # force an Agg render
60+ fig .canvas .draw ()
61+ # force a pdf save
62+ with io .BytesIO () as result_after :
63+ fig .savefig (result_after , format = 'pdf' )
64+
65+
2666@pytest .mark .parametrize ('kwargs' , [
2767 dict (),
2868 dict (useblit = True , button = 1 ),
0 commit comments