def test_initial_position_hanchor_right(self): container = Container(bounds=[100.0, 100.0]) component = Component(bounds=[50.0, 50.0], position=[5.0, 5.0]) container.add(component) view = Viewport(component=container, horizontal_anchor='right', view_bounds=[50.0, 50.0], position=[0,0], bounds=[50,50]) self.assertEqual(view.view_position, [50, 0])
def create_component(self): canvas = Canvas(bgcolor="lightsteelblue", draw_axes=True) from basic_move import Box box = Box(color="red", bounds=[50, 50], resizable="") box.position = [75, 75] canvas.add(box) viewport = Viewport(component=canvas) viewport.view_position = [0, 0] viewport.tools.append(ViewportPanTool(viewport)) return viewport
def test_initial_position_vanchor_center(self): container = Container(bounds=[100.0, 100.0]) component = Component(bounds=[50.0, 50.0], position=[5.0, 5.0]) container.add(component) view = Viewport(component=container, vertical_anchor='center', view_bounds=[50.0, 50.0], position=[0,0], bounds=[50,50]) self.assertEqual(view.view_position, [0, 25])
def test_initial_position(self): container = Container(bounds=[100.0, 100.0]) component = Component(bounds=[50.0, 50.0], position=[5.0, 5.0]) container.add(component) view = Viewport( component=container, view_bounds=[50.0, 50.0], position=[0, 0], bounds=[50, 50], ) self.assertEqual(view.view_position, [0, 0])
def test_adjust_bounds(self): container = Container(bounds=[100.0, 100.0]) component = Component(bounds=[50.0, 50.0], position=[5.0, 5.0]) container.add(component) view = Viewport(component=container, view_bounds=[50.0, 50.0], view_position=[10, 10], position=[0, 0], bounds=[50, 50]) # simple resize view.bounds = [60, 60] self.assertEqual(view.view_position, [10, 10])
def _create_viewport(self): # Create a container and add our plots canvas = PlotCanvas() canvas.range_controller = RangeController(cavas = canvas) toolbar = make_toolbar(canvas) toolbar.component = canvas canvas.overlays.append(toolbar) viewport = Viewport(component=canvas) if MULTITOUCH: viewport.tools.append(MPViewportPanTool(viewport)) else: viewport.tools.append(ViewportPanTool(viewport, drag_button="right")) return viewport
def _create_component(self): canvas = Canvas(bgcolor="lightsteelblue", draw_axes=True) boxgridsize = 8 boxsize = 50 spacing = boxsize * 2 offset = spacing / 2 origin_color = array([0.0, 0.0, 1.0]) x_color = array([0.0, 1.0, 0.0]) y_color = array([1.0, 0.0, 0.0]) for i in range(boxgridsize): for j in range(boxgridsize): color = tuple(x_color / (boxgridsize - 1) * i + y_color / (boxgridsize - 1) * j + origin_color) + (1.0, ) box = Box(color=color, bounds=[boxsize, boxsize], resizable="") box.position = [ i * spacing + offset - boxsize / 2 + 0.5, j * spacing + offset - boxsize / 2 + 0.5, ] canvas.add(box) viewport = Viewport( component=canvas, enable_zoom=True, vertical_anchor="center", horizontal_anchor="center", ) # viewport.view_position = [0,0] viewport.tools.append(ViewportPanTool(viewport)) # Uncomment the following to enforce limits on the zoom # viewport.min_zoom = 0.1 # viewport.max_zoom = 3.0 scrolled = Scrolled( canvas, fit_window=True, inside_padding_width=0, mousewheel_scroll=False, viewport_component=viewport, always_show_sb=True, continuous_drag_update=True, ) return scrolled
def test_viewport_container(self): """ Tests event handling of viewports (scaling and translation) """ comp = TestComponent(position=[20, 20]) container = TestContainer(bounds=[100, 100], position=[50, 50]) container.add(comp) viewport = Viewport(component=container, bounds=[400, 400], position=[30, 30]) # Test unscaled event event = BasicEvent(x=105, y=105) viewport.dispatch(event, "left_down") self.assertTrue(container.last_event.x == 75) self.assertTrue(container.last_event.y == 75) self.assertTrue(comp.last_event.x == 25) self.assertTrue(comp.last_event.y == 25) # Translate the viewport's view_position container.last_event = None comp.last_event = None viewport.view_position = [-10, -10] event = BasicEvent(x=115, y=115) viewport.dispatch(event, "left_down") self.assertTrue(container.last_event.x == 75) self.assertTrue(container.last_event.y == 75) self.assertTrue(comp.last_event.x == 25) self.assertTrue(comp.last_event.y == 25) # Do a zoom container.last_event = None comp.last_event = None # Zoom in by a factor of 2, so view an area that is 200x200. viewport.zoom = 2.0 viewport.enable_zoom = True viewport.view_position = [-50, -50] viewport.view_bounds = [200, 200] event = BasicEvent(x=280, y=280) viewport.dispatch(event, "left_down") self.assertTrue(container.last_event.x == 75) self.assertTrue(container.last_event.y == 75) self.assertTrue(comp.last_event.x == 25) self.assertTrue(comp.last_event.y == 25) return
def _create_component(self): canvas = DropCanvas(bgcolor="lightsteelblue", draw_axes=True) canvas.overlays.append(EventTracer(canvas, color="green", size=8, angle=45.0)) viewport = Viewport(component=canvas, enable_zoom=True) viewport.view_position = [0, 0] viewport.tools.append(ViewportPanTool(viewport, drag_button="right")) viewport.overlays.append(EventTracer(viewport)) scrolled = Scrolled(canvas, inside_padding_width=0, mousewheel_scroll=False, viewport_component=viewport, always_show_sb=True, continuous_drag_update=True) return scrolled
def test_mouse_capture(self): """ Tests saving the event's net_transform as well as the dispatch history when capturing a mouse and dispatching subsequent events. """ class MouseCapturingComponent(TestComponent): captured_event_pos = Tuple def normal_left_down(self, event): self.captured_event_pos = (event.x, event.y) event.window.set_mouse_owner(self, event.net_transform()) comp = MouseCapturingComponent(position=[20, 20]) container = TestContainer(bounds=[100, 100], position=[50, 50]) container.add(comp) viewport = Viewport( component=container, bounds=[400, 400], position=[30, 30], fit_window=False, resizable="") window = DummyWindow(_size=(500, 500)) window.component = viewport # Create the first event (to trigger the mouse capture) event = BasicEvent(x=105, y=105, window=window) window._handle_mouse_event("left_down", event) self.assertTrue(window.mouse_owner == comp) # Create the second event event = BasicEvent(x=107, y=107, window=window) old_pos = comp.captured_event_pos window._handle_mouse_event("left_down", event) new_pos = comp.captured_event_pos self.assertTrue(new_pos[0] == old_pos[0] + 2) self.assertTrue(new_pos[1] == old_pos[1] + 2) return
def test_basic_viewport(self): container = Container(bounds=[100.0, 100.0]) component = Component(bounds=[50.0, 50.0], position=[5.0, 5.0]) container.add(component) view = Viewport(component=container, view_position=[10.0, 10.0], view_bounds=[50.0, 50.0], position=[0, 0], bounds=[50, 50]) self.assertEqual(view.view_position, [10, 10]) print(view.components_at(0.0, 0.0), view.view_position) self.assertTrue(view.components_at(0.0, 0.0)[0] == component) self.assertTrue(view.components_at(44.9, 0.0)[0] == component) self.assertTrue(view.components_at(0.0, 44.9)[0] == component) self.assertTrue(view.components_at(44.9, 44.9)[0] == component) self.assertTrue(view.components_at(46.0, 45.0) == []) self.assertTrue(view.components_at(46.0, 0.0) == []) self.assertTrue(view.components_at(45.0, 46.0) == []) self.assertTrue(view.components_at(0.0, 46.0) == [])
def test_adjust_bounds_vanchor_top(self): container = Container(bounds=[100.0, 100.0]) component = Component(bounds=[50.0, 50.0], position=[5.0, 5.0]) container.add(component) view = Viewport(component=container, view_bounds=[50.0, 50.0], view_position=[20, 20], position=[0, 0], bounds=[50, 50], vertical_anchor='top') # simple resize view.bounds = [60, 60] self.assertEqual(view.view_position, [20, 10.0]) # resize beyond bottom view.bounds = [80, 80] self.assertEqual(view.view_position, [20, -10.0]) # resize bigger than view view.bounds = [120, 120] self.assertEqual(view.view_position, [20, -50.0])
def test_adjust_bounds_hanchor_center(self): container = Container(bounds=[100.0, 100.0]) component = Component(bounds=[50.0, 50.0], position=[5.0, 5.0]) container.add(component) view = Viewport(component=container, view_bounds=[50.0, 50.0], view_position=[20, 20], position=[0, 0], bounds=[50, 50], horizontal_anchor='center') # simple resize view.bounds = [60, 60] self.assertEqual(view.view_position, [15.0, 20]) # resize beyond left view.bounds = [95, 95] self.assertEqual(view.view_position, [-2.5, 20]) # resize bigger than view view.bounds = [120, 120] self.assertEqual(view.view_position, [-15.0, 20])
def test_adjust_bounds_hanchor_top_stay_inside(self): container = Container(bounds=[100.0, 100.0]) component = Component(bounds=[50.0, 50.0], position=[5.0, 5.0]) container.add(component) view = Viewport(component=container, view_bounds=[50.0, 50.0], view_position=[20, 20], position=[0, 0], bounds=[50, 50], horizontal_anchor='right', stay_inside=True) # simple resize view.bounds = [60, 60] self.assertEqual(view.view_position, [10, 20.0]) # resize beyond left view.bounds = [80, 80] self.assertEqual(view.view_position, [0, 20.0]) # resize bigger than view view.bounds = [120, 120] self.assertEqual(view.view_position, [-20.0, 0])
def test_adjust_bounds_vanchor_center_stay_inside(self): container = Container(bounds=[100.0, 100.0]) component = Component(bounds=[50.0, 50.0], position=[5.0, 5.0]) container.add(component) view = Viewport(component=container, view_bounds=[50.0, 50.0], view_position=[20, 20], position=[0, 0], bounds=[50, 50], vertical_anchor='center', stay_inside=True) # simple resize view.bounds = [60, 60] self.assertEqual(view.view_position, [20, 15.0]) # resize beyond left view.bounds = [95, 95] self.assertEqual(view.view_position, [5, 0.0]) # resize bigger than view view.bounds = [120, 120] self.assertEqual(view.view_position, [0, -10.0])
def test_adjust_container_bounds_hanchor_right(self): container = Container(bounds=[100.0, 100.0]) component = Component(bounds=[50.0, 50.0], position=[5.0, 5.0]) container.add(component) view = Viewport(component=container, view_bounds=[50.0, 50.0], view_position=[20, 20], position=[0, 0], bounds=[50, 50], horizontal_anchor='right') # simple resize bigger container.bounds = [120, 120] self.assertEqual(view.view_position, [40, 20.0]) # simple resize smaller container.height = 90 container.width = 90 self.assertEqual(view.view_position, [10, 20.0]) # simple resize much smaller container.bounds[0] = 40 container.bounds[1] = 40 self.assertEqual(view.view_position, [-40, 20.0])