Line 81: |
Line 81: |
| A new, tighter spiral for the Home View: | | A new, tighter spiral for the Home View: |
| | | |
− | [[File:SpiralHomeView.png|300px]] | + | [[File:Spiral-home-view.png|300px]] |
| + | |
| + | <code> |
| + | class MyLayout(RingLayout): |
| + | """Spiral layout based on Archimedean spiral: r = a + b*theta.""" |
| + | |
| + | __gtype_name__ = 'MyLayout' |
| + | |
| + | icon_name = 'view-mylayout' |
| + | """Name of icon used in home view dropdown palette.""" |
| + | |
| + | profile_key = 'my-layout' |
| + | """String used in profile to represent this view.""" |
| + | |
| + | def __init__(self): |
| + | RingLayout.__init__(self) |
| + | self.my_radius = _MINIMUM_RADIUS |
| + | self.my_orientation = math.pi |
| + | |
| + | def _calculate_radius_and_icon_size(self, children_count): |
| + | """Stub out this method; not used in `My Layout`.""" |
| + | return _MINIMUM_RADIUS, style.STANDARD_ICON_SIZE |
| + | |
| + | def _calculate_position(self, radius, icon_size, index, children_count): |
| + | """ Increment the radius as you go """ |
| + | |
| + | if index == 0: |
| + | self.my_radius = _MINIMUM_RADIUS |
| + | self.my_orientation = math.pi |
| + | |
| + | x, y = self._calculate_xy() |
| + | |
| + | # add some buffering around the icon |
| + | self._calculate_new_radius_orientation(icon_size + 10) |
| + | |
| + | width, height = self.box.get_allocation() |
| + | return int(x) + (width - icon_size) / 2, \ |
| + | int(y) + (height - icon_size - (style.GRID_CELL_SIZE / 2) ) / 2 |
| + | |
| + | def _calculate_xy(self): |
| + | """ Convert r, o to x, y """ |
| + | return -math.sin(self.my_orientation) * self.my_radius, \ |
| + | math.cos(self.my_orientation) * self.my_radius |
| + | |
| + | def _calculate_new_radius_orientation(self, icon_size): |
| + | """ Based upon current radius, calculate new increments """ |
| + | circumference = self.my_radius * 2 * math.pi |
| + | n = circumference / icon_size |
| + | self.my_orientation += 2 * math.pi / n |
| + | self.my_radius += float(icon_size) / n |
| + | </code> |
| | | |
| ====Keyboards==== | | ====Keyboards==== |