Example #1
0
def in_axis_geometry(geometry, axis, workarea=None):
    """Return geometry stretched in given axis."""
    workarea = workarea or WM.workarea_geometry
    if axis == 'x':
        return Geometry(geometry.x, workarea.y, geometry.width,
                        workarea.height)
    elif axis == 'y':
        return Geometry(workarea.x, geometry.y, workarea.width,
                        geometry.height)
Example #2
0
 def __init__(self, win, position, gravity, size, width, height, cycle):
     self.win_id = win.id
     self.args = (position, gravity, size, width, height
                  )  # TODO: remove me!?
     self.gravity = gravity
     workarea = WM.workarea_geometry
     self.position = absolute_position(workarea, position)
     self.sizes = absolute_size(win, workarea, size, width, height)
     dummy = DummyWindow(win, self.position, self.sizes, self.gravity)
     max_geo = expand_window(dummy,
                             dummy.gravity,
                             sticky=False,
                             vertical_first=cycle)
     widths = []
     for width in self.sizes.width:
         if max_geo.width - width >= 0 and \
            self.position.x - width * position.x >= max_geo.x and \
            self.position.x + width * (1 - position.x) <= max_geo.x2:
             widths.append(width)
     heights = []
     for height in self.sizes.height:
         if max_geo.height - height >= 0 and \
            self.position.y - height * position.y >= max_geo.y and \
            self.position.y + height * (1 - position.y) <= max_geo.y2:
             heights.append(height)
     width = max(widths)
     height = max(heights)
     self.sizes_iterator = Size(get_iterator(self.sizes.width, width),
                                get_iterator(self.sizes.height, height))
     [self.sizes_iterator.height, self.sizes_iterator.width][cycle].next()
     self.previous = Geometry(self.position.x, self.position.y, width,
                              height, self.gravity)
Example #3
0
def in_direction_geometry(geometry, direction, inclusive=False, workarea=None):
    """Return geometry in given direction from the given geometry.

    If inclusive is True include given geometry.

    """
    workarea = workarea or WM.workarea_geometry
    if direction.is_middle:
        return workarea

    def in_axis(axis, top_left, bottom_right):
        """Return pair of x/y and width/height."""
        xy, xy2, size = ATTRGETTERS[axis]
        new_xy = xy(workarea)
        new_size = size(workarea)
        if top_left:
            if inclusive:
                new_size = xy2(geometry) - new_xy
            else:
                new_size = xy(geometry) - new_xy
        if bottom_right:
            if inclusive:
                new_xy = xy(geometry)
            else:
                new_xy = xy2(geometry)
            new_size = xy2(workarea) - new_xy
        return new_xy, new_size

    x, width = in_axis('x', direction.is_left, direction.is_right)
    y, height = in_axis('y', direction.is_top, direction.is_bottom)
    return Geometry(x, y, width, height)
Example #4
0
 def test_constructor(self):
     geo = Geometry(100, 150, 20, 30)
     self.assertEqual(geo.x2, 120)
     self.assertEqual(geo.y2, 180)
     # relative to gravity
     geo = Geometry(100, 150, 20, 30, Gravity(1, 1))
     self.assertEqual(geo.x2, 100)
     self.assertEqual(geo.y2, 150)
     self.assertEqual(geo.x, 80)
     self.assertEqual(geo.y, 120)
     # conversion to int
     geo = Geometry(1.1, 2.9, 10.5, 15.2)
     self.assertEqual(geo.x, 1)
     self.assertEqual(geo.y, 2)
     self.assertEqual(geo.width, 10)
     self.assertEqual(geo.height, 15)
Example #5
0
 def test_geometry_normal_window(self):
     # initial geometry
     geometry = self.win.geometry
     self.assertEqualGeometry(geometry, WIN_X, WIN_Y, WIN_WIDTH, WIN_HEIGHT)
     # set same geometry
     self.win.set_geometry(geometry)
     geometry = self.win.geometry
     self.assertEqualGeometry(geometry, WIN_X, WIN_Y, WIN_WIDTH, WIN_HEIGHT)
     # set new geometry
     self.win.set_geometry(Geometry(50, 75, 138, 45))
     geometry = self.win.geometry
     self.assertEqualGeometry(geometry, 50, 75, 138, 45)
     # set position to (0, 0)
     self.win.set_geometry(Geometry(0, 0, 138, 45))
     geometry = self.win.geometry
     self.assertEqualGeometry(geometry, 0, 0, 138, 45)
Example #6
0
 def test_fullscreen(self):
     desktop_geometry = Geometry(0, 0, DESKTOP_WIDTH, DESKTOP_HEIGHT)
     win_geometry = self.win.geometry
     self.assertFalse(State.FULLSCREEN in self.win.state)
     geometry = self.win.geometry
     self.assertNotEqual(geometry, desktop_geometry)
     extents = self.win.extents
     self.assertNotEqual(extents, Xlib_mock.EXTENTS_FULLSCREEN)
     # set fullscreen
     self.win.fullscreen(1)
     self.assertTrue(State.FULLSCREEN in self.win.state)
     geometry = self.win.geometry
     self.assertEqual(geometry, desktop_geometry)
     extents = self.win.extents
     self.assertEqual(extents, Xlib_mock.EXTENTS_FULLSCREEN)
     # unset fullscreen
     self.win.fullscreen(0)
     self.assertFalse(State.FULLSCREEN in self.win.state)
     geometry = self.win.geometry
     self.assertNotEqual(geometry, desktop_geometry)
     self.assertEqual(win_geometry, geometry)
     extents = self.win.extents
     self.assertNotEqual(extents, Xlib_mock.EXTENTS_FULLSCREEN)
     # toggle back and forth
     self.win.fullscreen(2)
     self.assertTrue(State.FULLSCREEN in self.win.state)
     self.win.fullscreen(2)
     self.assertFalse(State.FULLSCREEN in self.win.state)
Example #7
0
 def __init__(self, window, position, size, gravity):
     self.extents = window.extents
     self.desktop = window.desktop
     self.id = window.id
     self.geometry = Geometry(position.x, position.y, 
                              min(size.width), min(size.height), 
                              gravity)
Example #8
0
 def test_set_position(self):
     geo = Geometry(0, 0, 100, 200)
     self.assertEqual(geo.x, 0)
     self.assertEqual(geo.y, 0)
     # set postion
     geo.set_position(10, 10)
     self.assertEqual(geo.x, 10)
     self.assertEqual(geo.y, 10)
     # set position relative to gravity
     geo.set_position(10, 10, Gravity(0, 0))
     self.assertEqual(geo.x, 10)
     self.assertEqual(geo.y, 10)
     geo.set_position(110, 210, Gravity(1, 1))
     self.assertEqual(geo.x, 10)
     self.assertEqual(geo.y, 10)
     geo.set_position(60, 110, Gravity(0.5, 0.5))
     self.assertEqual(geo.x, 10)
     self.assertEqual(geo.y, 10)
Example #9
0
 def next(self, cycle):
     """Return new window geometry."""
     if cycle == CYCLE_WIDTH:
         width = self.sizes_iterator.width.next()
         height = self.previous.height
     if cycle == CYCLE_HEIGHT:
         width = self.previous.width
         height = self.sizes_iterator.height.next()
     self.previous = Size(width, height)
     return Geometry(self.position.x, self.position.y, width, height,
                     self.gravity)
Example #10
0
 def test_intersection_no_overlap(self):
     self.assertEqual(Geometry(0, 0, 1, 1) & Geometry(2, 0, 1, 1), None)
Example #11
0
 def test_nearest_screen_geometry_2(self):
     self.display.xinerama_query_screens = lambda: Xlib_mock.ScreensQuery(
         (0, 0, 640, 400), (640, 0, 960, 200))
     screen = self.WM.nearest_screen_geometry(Geometry(630, 390, 700, 500))
     self.assertEqual(screen, Geometry(0, 0, 640, 400))
Example #12
0
 def test_workarea_geometry(self):
     # No panels!
     self.assertEqual(self.WM.workarea_geometry,
                      Geometry(0, 0, DESKTOP_WIDTH, DESKTOP_HEIGHT))
Example #13
0
 def assertEqualGeometry(self, geometry, x, y, width, height):
     other = Geometry(x, y, width, height)
     self.assertEqual(geometry, other)
Example #14
0
 def __init__(self, window):
     Window.__init__(self, window.id)
     geometry = window.geometry
     Geometry.__init__(self, 
                       geometry.x, geometry.y, 
                       geometry.width, geometry.height)
Example #15
0
 def test_intersection_ne_sw_corners_touch(self):
     self.assertEqual(Geometry(0, 1, 1, 1) & Geometry(1, 0, 1, 1),
                      Geometry(1, 1, 0, 0))
Example #16
0
 def __init__(self, window):
     Window.__init__(self, window.id)
     geometry = window.geometry
     Geometry.__init__(self, geometry.x, geometry.y, geometry.width,
                       geometry.height)
Example #17
0
 def test_intersection_outside(self):
     self.assertEqual(Geometry(0, 0, 3, 3) & Geometry(1, 1, 1, 1),
                      Geometry(1, 1, 1, 1))
Example #18
0
 def test_intersection_ne_sw_corners_overlap(self):
     self.assertEqual(Geometry(0, 1, 2, 2) & Geometry(1, 0, 2, 2),
                      Geometry(1, 1, 1, 1))
Example #19
0
 def test_intersection_n_s_sides_touch(self):
     self.assertEqual(Geometry(0, 1, 1, 1) & Geometry(0, 0, 1, 1),
                      Geometry(0, 1, 1, 0))