def __create_thumbnail(self, draw_rect: Geometry.IntRect) -> DrawingContext.DrawingContext: drawing_context = DrawingContext.DrawingContext() if self.__display_item: thumbnail_data = self.calculate_thumbnail_data() if thumbnail_data is not None: draw_rect = Geometry.fit_to_size(draw_rect, thumbnail_data.shape) drawing_context.draw_image(thumbnail_data, draw_rect[0][1], draw_rect[0][0], draw_rect[1][1], draw_rect[1][0]) return drawing_context
def layout(self, canvas_origin, canvas_size, canvas_items, *, immediate=False): r = Geometry.IntRect(origin=canvas_origin, size=canvas_size) if canvas_size.width > canvas_size.height: r = Geometry.fit_to_size( r, Geometry.IntSize(w=canvas_size.height, h=canvas_size.height)) super().layout(canvas_origin, r.size, canvas_items, immediate=immediate) else: r = Geometry.fit_to_size( r, Geometry.IntSize(w=canvas_size.width, h=canvas_size.width)) super().layout(canvas_origin, r.size, canvas_items, immediate=immediate)
def layout(self, canvas_origin: Geometry.IntPoint, canvas_size: Geometry.IntSize, canvas_items: typing.Sequence[CanvasItem.AbstractCanvasItem], *, immediate: bool = False) -> None: r = Geometry.IntRect(origin=canvas_origin, size=canvas_size) if canvas_size.width > canvas_size.height: r = Geometry.fit_to_size( r, Geometry.IntSize(w=canvas_size.height, h=canvas_size.height)).to_int_rect() super().layout(canvas_origin, r.size, canvas_items, immediate=immediate) else: r = Geometry.fit_to_size( r, Geometry.IntSize(w=canvas_size.width, h=canvas_size.width)).to_int_rect() super().layout(canvas_origin, r.size, canvas_items, immediate=immediate)
def __create_thumbnail( self, draw_rect: Geometry.IntRect) -> DrawingContext.DrawingContext: drawing_context = DrawingContext.DrawingContext() if self.__display_item: thumbnail_data = self.calculate_thumbnail_data() if thumbnail_data is not None: draw_rect_f = Geometry.fit_to_size( draw_rect, typing.cast(typing.Tuple[int, int], thumbnail_data.shape)) drawing_context.draw_image(thumbnail_data, draw_rect_f.left, draw_rect_f.top, draw_rect_f.width, draw_rect_f.height) return drawing_context
def test_fit_to_size(self): eps = 0.0001 rects = [] sizes = [] rects.append(((0, 0), (300, 700))) sizes.append((600, 1200)) rects.append(((0, 0), (300, 700))) sizes.append((1200, 600)) rects.append(((0, 0), (600, 800))) sizes.append((700, 1300)) rects.append(((0, 0), (600, 800))) sizes.append((1300, 700)) for rect, size in zip(rects, sizes): fit = Geometry.fit_to_size(rect, size) self.assertTrue( abs( float(fit[1][1]) / float(fit[1][0]) - float(size[1]) / float(size[0])) < eps)