# HG changeset patch # User Neil Muller # Date 1378550611 -7200 # Node ID c5a3ed165df97f844d57f3fe07f0058a73113835 # Parent 23e751f26f81e692e1c6cef46d989acea46f6ea4 Partial zoom support diff -r 23e751f26f81 -r c5a3ed165df9 tools/area_editor.py --- a/tools/area_editor.py Sat Sep 07 12:41:16 2013 +0200 +++ b/tools/area_editor.py Sat Sep 07 12:43:31 2013 +0200 @@ -455,12 +455,15 @@ self._parent = parent self._move_point_mode = False self._move_point = False + self._zoom_factor = 1.0 def _level_coordinates(self, pos): # Move positions to level values if not pos: return (0, 0) - return pos[0] + self.pos[0], pos[1] + self.pos[1] + # Apply zoom_factor + zoomed = (pos[0] * self._zoom_factor, pos[1] * self._zoom_factor) + return zoomed[0] + self.pos[0], zoomed[1] + self.pos[1] def _move_view(self, offset): new_pos = [self.pos[0] + offset[0], self.pos[1] + offset[1]] @@ -484,6 +487,16 @@ self._draw_enemies = value self.invalidate() + def zoom_out(self): + self._zoom_factor = self._zoom_factor * 2.0 + if self._zoom_factor > 8: + self._zoom_factor = 8 + + def zoom_in(self): + self._zoom_factor = self._zoom_factor // 2.0 + if self._zoom_factor < 1: + self._zoom_factor = 1 + def draw(self, surface): if (self.cur_poly is not None and self.cur_poly in self.level.polygons and len(self.level.polygons[self.cur_poly])): @@ -508,7 +521,12 @@ if isinstance(thing, ne.Enemy): thing.render(level_surface) surface_area = pygame.rect.Rect(self.pos, SCREEN) - surface.blit(level_surface, (0, 0), surface_area) + zoomed_surface = level_surface.copy() + zoomed_surface = pygame.transform.scale( + level_surface, + (int(level_surface.get_width() / self._zoom_factor), + int(level_surface.get_height() / self._zoom_factor))) + surface.blit(zoomed_surface, (0, 0), surface_area) def change_poly(self, new_poly): self.cur_poly = new_poly @@ -594,10 +612,6 @@ else: # find the current point self._move_point = self.level.find_vertex(corrected_pos) - elif self.cur_poly and ev.button == 1: - # Add a point - self.level.add_point(self.cur_poly, - self._level_coordinates(corrected_pos)) elif ev.button == 1: if self._draw_lines: if self._start_pos is None: @@ -617,6 +631,10 @@ self._move_view((-10, 0)) elif ev.button == 7: # Scroll right self._move_view((10, 0)) + elif self.cur_poly and ev.button == 1: + # Add a point + self.level.add_point(self.cur_poly, + self._level_coordinates(ev.pos)) elif ev.button == 3: self._mouse_drag = True @@ -833,6 +851,8 @@ self._menu_mode = 'drawing' self._populate_menu() + self._zoom = 1 + def _make_draw_menu(self): widgets = [] @@ -918,6 +938,17 @@ widgets.append(save_but) y += MENU_BUTTON_HEIGHT + MENU_PAD + zoom_out = Button('Zoom out', action=self.level_widget.zoom_out) + zoom_out.rect = BUTTON_RECT.copy() + zoom_out.rect.move_ip(MENU_LEFT, y) + widgets.append(zoom_out) + y += MENU_BUTTON_HEIGHT + MENU_PAD + + zoom_in = Button('Zoom in', action=self.level_widget.zoom_in) + zoom_in.rect = BUTTON_RECT.copy() + zoom_in.rect.move_ip(MENU_LEFT, y) + widgets.append(zoom_in) + y = SCREEN[1] - MENU_BUTTON_HEIGHT - MENU_PAD quit_but = Button('Quit', action=self.quit) quit_but.rect = BUTTON_RECT.copy()