173
173
self._last_hit_args = None
174
174
self._last_hit_key = None
176
def fit_inside_canvas(self, canvas_border_rect,
178
aspect_change_range = (0.0, 1.1),
179
x_align = 0.5, y_align = 0.0):
180
self._item.fit_inside_canvas(canvas_border_rect,
181
keep_aspect, aspect_change_range,
176
def fit_inside_canvas(self, canvas_border_rect):
177
self._item.fit_inside_canvas(canvas_border_rect)
179
# rects likely changed
180
# -> invalidate geometry related caches
181
self.invalidate_geometry_caches()
183
def do_fit_inside_canvas(self, canvas_border_rect):
184
self._item.do_fit_inside_canvas(canvas_border_rect)
184
186
# rects likely changed
185
187
# -> invalidate geometry related caches
469
471
root = self.get_layout_root()
470
472
return root.context.scale_log_to_canvas((2.0, 2.0))
472
def fit_inside_canvas(self, canvas_border_rect,
474
aspect_change_range = (0.0, 1.1),
475
x_align = 0.5, y_align = 0.0):
474
def fit_inside_canvas(self, canvas_border_rect):
477
476
Scale item and its children to fit inside the given canvas_rect.
479
478
# recursively update item's bounding boxes
480
479
self.update_log_rect()
482
# optionally maintain the aspect ratio and align the result
484
r = self.context.log_rect
486
a0 = r.w / float(r.h)
487
a0_max = a0 * aspect_change_range[1]
488
a1 = canvas_border_rect.w / float(canvas_border_rect.h)
491
r = Rect(0, 0, a, 1.0)
492
r = Rect(0, 0, a, 1.0)
493
canvas_border_rect = r.inscribe_with_aspect( \
494
canvas_border_rect, x_align, y_align)
496
481
# recursively fit inside canvas
497
self._fit_inside_canvas(canvas_border_rect)
482
self.do_fit_inside_canvas(canvas_border_rect)
499
def _fit_inside_canvas(self, canvas_border_rect):
484
def do_fit_inside_canvas(self, canvas_border_rect):
501
486
Scale item and its children to fit inside the given canvas_rect.
863
def _fit_inside_canvas(self, canvas_border_rect):
848
def do_fit_inside_canvas(self, canvas_border_rect):
864
849
""" Scale items to fit inside the given canvas_rect """
866
LayoutItem._fit_inside_canvas(self, canvas_border_rect)
851
LayoutItem.do_fit_inside_canvas(self, canvas_border_rect)
868
853
axis = 0 if self.horizontal else 1
869
854
items = self.items
935
920
r = Rect(*canvas_rect)
936
921
r[axis] = canvas_rect[axis] + position
937
922
r[axis+2] = canvas_length
938
item._fit_inside_canvas(r)
923
item.do_fit_inside_canvas(r)
940
925
position += canvas_length + spacing
967
952
# Don't extend bounding box into invisibles
970
def _fit_inside_canvas(self, canvas_border_rect):
955
def do_fit_inside_canvas(self, canvas_border_rect):
972
957
Scale panel to fit inside the given canvas_rect.
974
LayoutItem._fit_inside_canvas(self, canvas_border_rect)
959
LayoutItem.do_fit_inside_canvas(self, canvas_border_rect)
976
961
# Setup children's transformations, take care of the border.
977
962
if self.get_border_rect().is_empty():
986
971
for item in self.items:
987
972
rect = context.log_to_canvas_rect(item.context.log_rect)
988
item._fit_inside_canvas(rect)
973
item.do_fit_inside_canvas(rect)
990
975
def _update_log_rect(self):
991
976
self.context.log_rect = self._calc_bounds()