comparison pyntnclick/tools/rect_drawer.py @ 805:e11e092cc58e pyntnclick

Fix rect_drawer yet again
author Neil Muller <neil@dip.sun.ac.za>
date Sun, 27 Jan 2013 15:13:58 +0200
parents b3b73fd2be07
children b39f01012a74
comparison
equal deleted inserted replaced
804:16401f997e32 805:e11e092cc58e
39 unsel_colour = pygame.color.Color(128, 128, 128) 39 unsel_colour = pygame.color.Color(128, 128, 128)
40 40
41 padding = 2 41 padding = 2
42 border = 3 42 border = 3
43 43
44 def __init__(self, rect, gd, colour, palette): 44 def __init__(self, rect, gd, colour, palette, size=None):
45 super(ColourButton, self).__init__(rect, gd) 45 super(ColourButton, self).__init__(rect, gd, size=size)
46 self._colour = pygame.color.Color(colour) 46 self._colour = pygame.color.Color(colour)
47 self._button_rect = self.rect.inflate(-self.padding, -self.padding) 47 self._button_rect = self.rect.inflate(-self.padding, -self.padding)
48 self._colour_rect = self._button_rect.inflate(-self.border, 48 self._colour_rect = self._button_rect.inflate(-self.border,
49 -self.border) 49 -self.border)
50 self.selected = False 50 self.selected = False
75 'honeydew', 'yellow', 'gold', 'goldenrod', 'brown', 75 'honeydew', 'yellow', 'gold', 'goldenrod', 'brown',
76 'blue', 'purple', 'darkorchid4', 'thistle', 'skyblue1', 76 'blue', 'purple', 'darkorchid4', 'thistle', 'skyblue1',
77 'green', 'palegreen1', 'darkgreen', 'aquamarine', 'darkolivegreen', 77 'green', 'palegreen1', 'darkgreen', 'aquamarine', 'darkolivegreen',
78 ] 78 ]
79 79
80 def __init__(self, rect, gd, app_image): 80 def __init__(self, pos, gd, app_image, size=None):
81 self.image = app_image 81 self.image = app_image
82 super(AppPalette, self).__init__(rect, gd) 82 super(AppPalette, self).__init__(pos, gd, size=size)
83 self.selection = 0 83 self.selection = 0
84 self.image.rect_color = pygame.color.Color(self.colors[self.selection]) 84 self.image.rect_color = pygame.color.Color(self.colors[self.selection])
85 85
86 x = rect.left 86 x, y = pos
87 y = rect.top
88 for num, col in enumerate(self.colors): 87 for num, col in enumerate(self.colors):
89 if (x - rect.left + self.but_size) >= rect.width: 88 if (x - self.rect.left + self.but_size) >= self.rect.width:
90 x = rect.left 89 x = self.rect.left
91 y += self.but_size 90 y += self.but_size
92 button = ColourButton( 91 button = ColourButton((x, y),
93 pygame.Rect((x, y), (self.but_size, self.but_size)), 92 gd, col, self, size=(self.but_size, self.but_size))
94 gd, col, self)
95 x += self.but_size 93 x += self.but_size
96 if num == 0: 94 if num == 0:
97 self.cur_selection = button 95 self.cur_selection = button
98 button.fix_selection(None, None) 96 button.fix_selection(None, None)
99 button.add_callback('clicked', self.click_item, num) 97 button.add_callback('clicked', self.click_item, num)
111 rect_thick = 3 109 rect_thick = 3
112 draw_thick = 1 110 draw_thick = 1
113 111
114 def __init__(self, parent, gd, state, scene, detail): 112 def __init__(self, parent, gd, state, scene, detail):
115 self.state = state 113 self.state = state
116 super(AppImage, self).__init__(pygame.rect.Rect(0, 0, 114 super(AppImage, self).__init__((0, 0), gd, size=constants.screen)
117 constants.screen[0], constants.screen[1]), gd)
118 self.mode = DRAW 115 self.mode = DRAW
119 self._scene = scene 116 self._scene = scene
120 self._parent = parent 117 self._parent = parent
121 self._detail = detail 118 self._detail = detail
122 self.rects = [] 119 self.rects = []
584 self._scene.animate() 581 self._scene.animate()
585 582
586 583
587 class ModeLabel(LabelWidget): 584 class ModeLabel(LabelWidget):
588 585
589 def __init__(self, rect, gd, app_image): 586 def __init__(self, pos, gd, app_image, size=None):
590 self.app_image = app_image 587 self.app_image = app_image
591 super(ModeLabel, self).__init__(rect, 588 super(ModeLabel, self).__init__(pos,
592 gd, _('Mode : '), fontname=constants.bold_font, 589 gd, _('Mode : '), fontname=constants.bold_font,
593 fontsize=15, color=pygame.color.Color(128, 0, 255)) 590 fontsize=15, color=pygame.color.Color(128, 0, 255),
591 size=size)
594 self.start_rect = self.rect.copy() 592 self.start_rect = self.rect.copy()
595 593
596 def draw(self, surface): 594 def draw(self, surface):
597 self.do_prepare() 595 self.do_prepare()
598 text = _('Mode : %s') % self.app_image.get_mode_name() 596 text = _('Mode : %s') % self.app_image.get_mode_name()
606 604
607 def make_button(text, gd, action, ypos): 605 def make_button(text, gd, action, ypos):
608 rect = pygame.rect.Rect(0, 0, constants.menu_width, 606 rect = pygame.rect.Rect(0, 0, constants.menu_width,
609 constants.menu_button_height) 607 constants.menu_button_height)
610 rect.move_ip(805, ypos) 608 rect.move_ip(805, ypos)
611 button = TextButton(rect, gd, text, fontname=constants.font, fontsize=12, 609 button = TextButton(rect.topleft, gd, text, size=(constants.menu_width,
610 constants.menu_button_height),
611 fontname=constants.font, fontsize=12,
612 color=pygame.color.Color(255, 255, 0), border=1, padding=3) 612 color=pygame.color.Color(255, 255, 0), border=1, padding=3)
613 button.add_callback('clicked', action) 613 button.add_callback('clicked', action)
614 return button 614 return button
615 615
616 616
634 634
635 self.paused = False 635 self.paused = False
636 636
637 self.image = AppImage(self, gd, state, scene, detail is not None) 637 self.image = AppImage(self, gd, state, scene, detail is not None)
638 self.add(self.image) 638 self.add(self.image)
639 mode_label = ModeLabel(pygame.Rect((805, 0), (200, 25)), 639 mode_label = ModeLabel((805, 0), self.gd, self.image, size=(200, 25))
640 self.gd, self.image)
641 self.add(mode_label) 640 self.add(mode_label)
642 y = mode_label.rect.height 641 y = mode_label.rect.height
643 draw = make_button(_('Draw Rect'), gd, self.image.draw_mode, y) 642 draw = make_button(_('Draw Rect'), gd, self.image.draw_mode, y)
644 self.add(draw) 643 self.add(draw)
645 y += draw.rect.height 644 y += draw.rect.height
656 self.add(cycle) 655 self.add(cycle)
657 y += cycle.rect.height 656 y += cycle.rect.height
658 delete = make_button(_("Delete Objects"), gd, self.image.del_mode, y) 657 delete = make_button(_("Delete Objects"), gd, self.image.del_mode, y)
659 self.add(delete) 658 self.add(delete)
660 y += delete.rect.height 659 y += delete.rect.height
661 palette = AppPalette(pygame.Rect((810, y), (200, 0)), gd, self.image) 660 palette = AppPalette((810, y), gd, self.image, size=(200, 0))
662 self.add(palette) 661 self.add(palette)
663 y += palette.rect.height 662 y += palette.rect.height
664 print_rects = make_button(_("Print objects"), gd, 663 print_rects = make_button(_("Print objects"), gd,
665 self.image.print_objs, y) 664 self.image.print_objs, y)
666 self.add(print_rects) 665 self.add(print_rects)
712 711
713 def __init__(self, gd, detail): 712 def __init__(self, gd, detail):
714 self.state = None 713 self.state = None
715 self._gd = gd 714 self._gd = gd
716 rect = pygame.display.get_surface().get_rect() 715 rect = pygame.display.get_surface().get_rect()
717 self.app = RectApp(rect, self._gd, detail) 716 self.app = RectApp(rect.topleft, self._gd, detail)
718 717
719 def run(self): 718 def run(self):
720 """App loop""" 719 """App loop"""
721 clock = pygame.time.Clock() 720 clock = pygame.time.Clock()
722 while True: 721 while True: