Mercurial > boomslang
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: |