@@ -88,6 +88,16 @@ def adjust_drawing_area(self, legend, orig_handle,
88
88
height = height - self ._ypad * fontsize
89
89
return xdescent , ydescent , width , height
90
90
91
+ def scale_dimensions (self , legend , width , height , orig_handle ):
92
+ return (max (width , self .handle_width (legend , orig_handle )),
93
+ max (height , self .handle_height (legend , orig_handle )))
94
+
95
+ def handle_width (self , legend , orig_handle ):
96
+ return - 1
97
+
98
+ def handle_height (self , legend , orig_handle ):
99
+ return - 1
100
+
91
101
def legend_artist (self , legend , orig_handle ,
92
102
fontsize , handlebox ):
93
103
"""
@@ -228,6 +238,26 @@ def __init__(self, marker_pad=0.3, numpoints=None, **kw):
228
238
HandlerNpoints .__init__ (self , marker_pad = marker_pad ,
229
239
numpoints = numpoints , ** kw )
230
240
241
+ def handle_width (self , legend , orig_handle ):
242
+ if isinstance (orig_handle , Line2D ):
243
+ marker = orig_handle .get_marker ()
244
+ marker_size = orig_handle .get_markersize ()
245
+ if marker and marker_size > 0 :
246
+ if legend .markerscale != 1 :
247
+ marker_size = marker_size * legend .markerscale
248
+ return marker_size
249
+ return - 1
250
+
251
+ def handle_height (self , legend , orig_handle ):
252
+ if isinstance (orig_handle , Line2D ):
253
+ marker = orig_handle .get_marker ()
254
+ marker_size = orig_handle .get_markersize ()
255
+ if marker and marker_size > 0 :
256
+ if legend .markerscale != 1 :
257
+ marker_size = marker_size * legend .markerscale
258
+ return marker_size
259
+ return - 1
260
+
231
261
def create_artists (self , legend , orig_handle ,
232
262
xdescent , ydescent , width , height , fontsize ,
233
263
trans ):
@@ -656,6 +686,24 @@ def __init__(self, ndivide=1, pad=None, **kwargs):
656
686
self ._pad = pad
657
687
HandlerBase .__init__ (self , ** kwargs )
658
688
689
+ def handle_width (self , legend , orig_handle ):
690
+ handler_map = legend .get_legend_handler_map ()
691
+ largest_width = - 1
692
+ for handle1 in orig_handle :
693
+ handler = legend .get_legend_handler (handler_map , handle1 )
694
+ largest_width = max (largest_width ,
695
+ handler .handle_width (legend , handle1 ))
696
+ return largest_width
697
+
698
+ def handle_height (self , legend , orig_handle ):
699
+ handler_map = legend .get_legend_handler_map ()
700
+ largest_height = - 1
701
+ for handle1 in orig_handle :
702
+ handler = legend .get_legend_handler (handler_map , handle1 )
703
+ largest_height = max (largest_height ,
704
+ handler .handle_height (legend , handle1 ))
705
+ return largest_height
706
+
659
707
def create_artists (self , legend , orig_handle ,
660
708
xdescent , ydescent , width , height , fontsize ,
661
709
trans ):
0 commit comments