def test_line(self): # __doc__ (as of 2008-06-25) for pygame.draw.line: # pygame.draw.line(Surface, color, start_pos, end_pos, width=1): return Rect # draw a straight line segment drawn = draw.line(self.surf, self.color, (1, 0), (200, 0)) #(l, t), (l, t) self.assert_(drawn.right == 201, "end point arg should be (or at least was) inclusive" ) #Should be colored where it's supposed to be for pt in test_utils.rect_area_pts(drawn): self.assert_(self.surf.get_at(pt) == self.color) #And not where it shouldn't for pt in test_utils.rect_outer_bounds(drawn): self.assert_(self.surf.get_at(pt) != self.color)
def test_rect__one_pixel_lines(self): # __doc__ (as of 2008-06-25) for pygame.draw.rect: # pygame.draw.rect(Surface, color, Rect, width=0): return Rect # draw a rectangle shape rect = pygame.Rect(10, 10, 56, 20) drawn = draw.rect(self.surf, self.color, rect, 1) self.assert_(drawn == rect) #Should be colored where it's supposed to be for pt in test_utils.rect_perimeter_pts(drawn): color_at_pt = self.surf.get_at(pt) self.assert_(color_at_pt == self.color) #And not where it shouldn't for pt in test_utils.rect_outer_bounds(drawn): color_at_pt = self.surf.get_at(pt) self.assert_(color_at_pt != self.color)
def test_rect__fill(self): # __doc__ (as of 2008-06-25) for pygame.draw.rect: # pygame.draw.rect(Surface, color, Rect, width=0): return Rect # draw a rectangle shape rect = pygame.Rect(10, 10, 25, 20) drawn = draw.rect(self.surf, self.color, rect, 0) self.assertEqual(drawn, rect) # Should be colored where it's supposed to be for pt in test_utils.rect_area_pts(rect): color_at_pt = self.surf.get_at(pt) self.assertEqual(color_at_pt, self.color) # And not where it shouldn't for pt in test_utils.rect_outer_bounds(rect): color_at_pt = self.surf.get_at(pt) self.assertNotEqual(color_at_pt, self.color) # Issue #310: Cannot draw rectangles that are 1 pixel high bgcolor = pygame.Color('black') self.surf.fill(bgcolor) hrect = pygame.Rect(1, 1, self.surf_w - 2, 1) vrect = pygame.Rect(1, 3, 1, self.surf_h - 4) drawn = draw.rect(self.surf, self.color, hrect, 0) self.assertEqual(drawn, hrect) x, y = hrect.topleft w, h = hrect.size self.assertEqual(self.surf.get_at((x - 1, y)), bgcolor) self.assertEqual(self.surf.get_at((x + w, y)), bgcolor) for i in range(x, x + w): self.assertEqual(self.surf.get_at((i, y)), self.color) drawn = draw.rect(self.surf, self.color, vrect, 0) self.assertEqual(drawn, vrect) x, y = vrect.topleft w, h = vrect.size self.assertEqual(self.surf.get_at((x, y - 1)), bgcolor) self.assertEqual(self.surf.get_at((x, y + h)), bgcolor) for i in range(y, y + h): self.assertEqual(self.surf.get_at((x, i)), self.color)
def test_rect__fill(self): # __doc__ (as of 2008-06-25) for pygame.draw.rect: # pygame.draw.rect(Surface, color, Rect, width=0): return Rect # draw a rectangle shape rect = pygame.Rect(10, 10, 25, 20) drawn = draw.rect(self.surf, self.color, rect, 0) self.assert_(drawn == rect) #Should be colored where it's supposed to be for pt in test_utils.rect_area_pts(rect): color_at_pt = self.surf.get_at(pt) self.assert_(color_at_pt == self.color) #And not where it shouldn't for pt in test_utils.rect_outer_bounds(rect): color_at_pt = self.surf.get_at(pt) self.assert_(color_at_pt != self.color) #Issue #310: Cannot draw rectangles that are 1 pixel high bgcolor = pygame.Color('black') self.surf.fill(bgcolor) hrect = pygame.Rect(1, 1, self.surf_w - 2, 1) vrect = pygame.Rect(1, 3, 1, self.surf_h - 4) drawn = draw.rect(self.surf, self.color, hrect, 0) self.assert_(drawn == hrect) x, y = hrect.topleft w, h = hrect.size self.assertEqual(self.surf.get_at((x - 1, y)), bgcolor) self.assertEqual(self.surf.get_at((x + w, y)), bgcolor) for i in range(x, x + w): self.assertEqual(self.surf.get_at((i, y)), self.color) drawn = draw.rect(self.surf, self.color, vrect, 0) self.assertEqual(drawn, vrect) x, y = vrect.topleft w, h = vrect.size self.assertEqual(self.surf.get_at((x, y - 1)), bgcolor) self.assertEqual(self.surf.get_at((x, y + h)), bgcolor) for i in range(y, y + h): self.assertEqual(self.surf.get_at((x, i)), self.color)
def test_line(self): # __doc__ (as of 2008-06-25) for pygame.draw.line: # pygame.draw.line(Surface, color, start_pos, end_pos, width=1): return Rect # draw a straight line segment # (l, t), (l, t) drawn = draw.line(self.surf, self.color, (1, 0), (200, 0)) self.assertEqual(drawn.right, 201, "end point arg should be (or at least was) inclusive") # Should be colored where it's supposed to be for pt in test_utils.rect_area_pts(drawn): self.assertEqual(self.surf.get_at(pt), self.color) # And not where it shouldn't for pt in test_utils.rect_outer_bounds(drawn): self.assertNotEqual(self.surf.get_at(pt), self.color) # Line width greater that 1 line_width = 2 offset = 5 a = (offset, offset) b = (self.surf_size[0] - offset, a[1]) c = (a[0], self.surf_size[1] - offset) d = (b[0], c[1]) e = (a[0] + offset, c[1]) f = (b[0], c[0] + 5) lines = [(a, d), (b, c), (c, b), (d, a), (a, b), (b, a), (a, c), (c, a), (a, e), (e, a), (a, f), (f, a), (a, a),] for p1, p2 in lines: msg = "%s - %s" % (p1, p2) if p1[0] <= p2[0]: plow = p1 phigh = p2 else: plow = p2 phigh = p1 self.surf.fill((0, 0, 0)) rec = draw.line(self.surf, (255, 255, 255), p1, p2, line_width) xinc = yinc = 0 if abs(p1[0] - p2[0]) > abs(p1[1] - p2[1]): yinc = 1 else: xinc = 1 for i in range(line_width): p = (p1[0] + xinc * i, p1[1] + yinc * i) self.assertEqual(self.surf.get_at(p), (255, 255, 255), msg) p = (p2[0] + xinc * i, p2[1] + yinc * i) self.assertEqual(self.surf.get_at(p), (255, 255, 255), msg) p = (plow[0] - 1, plow[1]) self.assertEqual(self.surf.get_at(p), (0, 0, 0), msg) p = (plow[0] + xinc * line_width, plow[1] + yinc * line_width) self.assertEqual(self.surf.get_at(p), (0, 0, 0), msg) p = (phigh[0] + xinc * line_width, phigh[1] + yinc * line_width) self.assertEqual(self.surf.get_at(p), (0, 0, 0), msg) if p1[0] < p2[0]: rx = p1[0] else: rx = p2[0] if p1[1] < p2[1]: ry = p1[1] else: ry = p2[1] w = abs(p2[0] - p1[0]) + 1 + xinc * (line_width - 1) h = abs(p2[1] - p1[1]) + 1 + yinc * (line_width - 1) msg += ", %s" % (rec,) self.assertEqual(rec, (rx, ry, w, h), msg)
def test_line(self): # __doc__ (as of 2008-06-25) for pygame.draw.line: # pygame.draw.line(Surface, color, start_pos, end_pos, width=1): return Rect # draw a straight line segment drawn = draw.line(self.surf, self.color, (1, 0), (200, 0)) #(l, t), (l, t) self.assert_(drawn.right == 201, "end point arg should be (or at least was) inclusive" ) #Should be colored where it's supposed to be for pt in test_utils.rect_area_pts(drawn): self.assert_(self.surf.get_at(pt) == self.color) #And not where it shouldn't for pt in test_utils.rect_outer_bounds(drawn): self.assert_(self.surf.get_at(pt) != self.color) #Line width greater that 1 line_width = 2 offset = 5 a = (offset, offset) b = (self.surf_size[0] - offset, a[1]) c = (a[0], self.surf_size[1] - offset) d = (b[0], c[1]) e = (a[0] + offset, c[1]) f = (b[0], c[0] + 5) lines = [(a, d), (b, c), (c, b), (d, a), (a, b), (b, a), (a, c), (c, a), (a, e), (e, a), (a, f), (f, a), (a, a),] for p1, p2 in lines: msg = "%s - %s" % (p1, p2) if p1[0] <= p2[0]: plow = p1 phigh = p2 else: plow = p2 phigh = p1 self.surf.fill((0, 0, 0)) rec = draw.line(self.surf, (255, 255, 255), p1, p2, line_width) xinc = yinc = 0 if abs(p1[0] - p2[0]) > abs(p1[1] - p2[1]): yinc = 1 else: xinc = 1 for i in range(line_width): p = (p1[0] + xinc * i, p1[1] + yinc * i) self.assert_(self.surf.get_at(p) == (255, 255, 255), msg) p = (p2[0] + xinc * i, p2[1] + yinc * i) self.assert_(self.surf.get_at(p) == (255, 255, 255), msg) p = (plow[0] - 1, plow[1]) self.assert_(self.surf.get_at(p) == (0, 0, 0), msg) p = (plow[0] + xinc * line_width, plow[1] + yinc * line_width) self.assert_(self.surf.get_at(p) == (0, 0, 0), msg) p = (phigh[0] + xinc * line_width, phigh[1] + yinc * line_width) self.assert_(self.surf.get_at(p) == (0, 0, 0), msg) if p1[0] < p2[0]: rx = p1[0] else: rx = p2[0] if p1[1] < p2[1]: ry = p1[1] else: ry = p2[1] w = abs(p2[0] - p1[0]) + 1 + xinc * (line_width - 1) h = abs(p2[1] - p1[1]) + 1 + yinc * (line_width - 1) msg += ", %s" % (rec,) self.assert_(rec == (rx, ry, w, h), msg)