Line 29: |
Line 29: |
| * [[User:Walter/sandbox]] | | * [[User:Walter/sandbox]] |
| * [[User:Walter/favoritelayout.py]] | | * [[User:Walter/favoritelayout.py]] |
− | [[Image:Spiral.png|thumb|left]] | + | [[Image:Spiral.png|thumb|left|<pre> |
− | [[Image:FermatSpiral.png|thumb|left]] | + | def _calculate_position(self, radius, icon_size, index, children_count): |
| + | width, height = self.box.get_allocation() |
| + | # angle decreases as the radius increases |
| + | inc = 12.0 + index / 6.0 |
| + | angle = index * (2 * math.pi / inc) - math.pi / 2 |
| + | # radius is proportional to index/children_count |
| + | myminimum = _MINIMUM_RADIUS * .667 |
| + | newradius = ((radius - myminimum) * (index * 1.1) / children_count) + |
| + | myminimum |
| + | x = newradius * math.cos(angle) + (width - icon_size) / 2 |
| + | y = newradius * math.sin(angle) + (height - icon_size - |
| + | style.GRID_CELL_SIZE) / 2 |
| + | return x, y |
| + | </pre>]] |
| + | [[Image:FermatSpiral.png|thumb|left|<pre> |
| + | def _calculate_position(self, radius, icon_size, index, children_count): |
| + | width, height = self.box.get_allocation() |
| + | # include an offset (8) to the index |
| + | # so that the center of the spiral is left blank |
| + | # angle = n * 137.5 degree or 2.4 radians |
| + | angle = (index + 8) * 2.4 |
| + | |
| + | # radius = constant * sqrt(n) |
| + | radius = (_MINIMUM_RADIUS / 5) * math.sqrt(index + 8) |
| + | |
| + | x = radius * math.cos(angle) + (width - icon_size) / 2 |
| + | y = radius * math.sin(angle) + (height - icon_size - |
| + | style.GRID_CELL_SIZE) / 2 |
| + | |
| + | return x, y |
| + | </pre>]] |