Walter
Joined 8 May 2008
| 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>]] | |||