def test_orthogonal_line_split_segment(self): canvas = Canvas() line = Line() canvas.add(line) assert len(canvas.solver._constraints) == 0 line.orthogonal = True assert len(canvas.solver._constraints) == 2 after_ortho = set(canvas.solver._constraints) assert len(line.handles()) == 3 del undo_list[:] line.split_segment(0) assert len(canvas.solver._constraints) == 3 assert len(line.handles()) == 4 undo() assert len(canvas.solver._constraints) == 2 assert len(line.handles()) == 3 assert canvas.solver._constraints == after_ortho line.split_segment(0) assert len(canvas.solver._constraints) == 3 assert len(line.handles()) == 4 after_split = set(canvas.solver._constraints) del undo_list[:] line.merge_segment(0) assert len(canvas.solver._constraints) == 2 assert len(line.handles()) == 3 undo() assert len(canvas.solver._constraints) == 3 assert len(line.handles()) == 4 assert canvas.solver._constraints == after_split
def test_bounding_box_calculations(self): """ A view created before and after the canvas is populated should contain the same data. """ canvas = Canvas() window1 = gtk.Window(gtk.WINDOW_TOPLEVEL) view1 = GtkView(canvas=canvas) window1.add(view1) view1.realize() window1.show_all() box = Box() box.matrix = (1.0, 0.0, 0.0, 1, 10,10) canvas.add(box) line = Line() line.fyzzyness = 1 line.handles()[1].pos = (30, 30) line.split_segment(0, 3) line.matrix.translate(30, 60) canvas.add(line) window2 = gtk.Window(gtk.WINDOW_TOPLEVEL) view2 = GtkView(canvas=canvas) window2.add(view2) window2.show_all() # Process pending (expose) events, which cause the canvas to be drawn. while gtk.events_pending(): gtk.main_iteration() try: assert view2.get_item_bounding_box(box) assert view1.get_item_bounding_box(box) assert view1.get_item_bounding_box(box) == view2.get_item_bounding_box(box), '%s != %s' % (view1.get_item_bounding_box(box), view2.get_item_bounding_box(box)) assert view1.get_item_bounding_box(line) == view2.get_item_bounding_box(line), '%s != %s' % (view1.get_item_bounding_box(line), view2.get_item_bounding_box(line)) finally: window1.destroy() window2.destroy()