[Sugar-devel] Home view activities layout
Walter Bender
walter.bender at gmail.com
Sat Jul 31 10:19:50 EDT 2010
I have a version which will let you reposition the icons (haven't
added swap yet) but I am not sure how best to reset the layout. We
could have a separate icon on the Home View secondary palette that
will reset the spiral to an initial state. Any other ideas?
-walter
On Sat, Jul 31, 2010 at 7:40 AM, Walter Bender <walter.bender at gmail.com> wrote:
> I am heading off to vacation for a week, but I may get a chance to
> play with moving/snapping the icons as well. In the meantime, the code
> is quite simple:
>
> --- favoriteslayout.py 2010-07-20 13:31:05.000000000 -0400
> +++ favoriteslayout.py 2010-07-30 23:26:56.000000000 -0400
>
> +
> +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; decrease the angle of rotation
> + as the radius increases to keep the distance between icons constant."""
> +
> + print "index %d (r: %f, o: %f)" % (index, self.my_radius,
> self.my_orientation)
> + 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)
> +
> + """
> + # angle decreases as the radius increases
> + angle = index * (2 * math.pi / (12.0 + index / 6.0)) - math.pi / 2
> + # radius is proportional to index/children_count
> + myminimum = _MINIMUM_RADIUS * .67
> + newradius = ((_MAXIMUM_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
> + """
> + 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):
> + 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):
> + 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
>
> On Sat, Jul 31, 2010 at 7:36 AM, Walter Bender <walter.bender at gmail.com> wrote:
>> On Sat, Jul 31, 2010 at 12:31 AM, Frederick Grose <fgrose at gmail.com> wrote:
>>> On Fri, Jul 30, 2010 at 11:32 PM, Walter Bender <walter.bender at gmail.com>
>>> wrote:
>>>>
>>>> On Fri, Jul 30, 2010 at 8:25 PM, Chris Ball <cjb at laptop.org> wrote:
>>>>
>>>>
>>>>
>>>> {...}
>>>>
>>>>
>>>>
>>>> Here is a tighter spiral of 74 icons for the home view (running in the
>>>> Sugar emulator at 800x600).
>>>
>>> Running the emulator with usr/bin/sugar-emulator -i 832x624
>>> give a close match to the XO screen proportions.
>>
>> Done. See http://wiki.sugarlabs.org/go/User:Walter#Home_View
>>
>> -walter
>>> _______________________________________________
>>> Sugar-devel mailing list
>>> Sugar-devel at lists.sugarlabs.org
>>> http://lists.sugarlabs.org/listinfo/sugar-devel
>>>
>>>
>>
>>
>>
>> --
>> Walter Bender
>> Sugar Labs
>> http://www.sugarlabs.org
>>
>
>
>
> --
> Walter Bender
> Sugar Labs
> http://www.sugarlabs.org
>
--
Walter Bender
Sugar Labs
http://www.sugarlabs.org
More information about the Sugar-devel
mailing list