Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar/graphics/spreadbox.py
diff options
context:
space:
mode:
Diffstat (limited to 'sugar/graphics/spreadbox.py')
-rw-r--r--sugar/graphics/spreadbox.py152
1 files changed, 76 insertions, 76 deletions
diff --git a/sugar/graphics/spreadbox.py b/sugar/graphics/spreadbox.py
index 7d4047d..59dfe9c 100644
--- a/sugar/graphics/spreadbox.py
+++ b/sugar/graphics/spreadbox.py
@@ -25,108 +25,108 @@ _DISTANCE_THRESHOLD = 10.0
_FORCE_CONSTANT = 0.1
class SpreadBox(hippo.CanvasBox, hippo.CanvasItem):
- __gtype_name__ = 'SugarSpreadBox'
+ __gtype_name__ = 'SugarSpreadBox'
- def __init__(self, **kwargs):
- hippo.CanvasBox.__init__(self, **kwargs)
+ def __init__(self, **kwargs):
+ hippo.CanvasBox.__init__(self, **kwargs)
- self._items_to_position = []
- self._stable = False
+ self._items_to_position = []
+ self._stable = False
- def add_item(self, item):
- self._items_to_position.append(item)
- self.append(item, hippo.PACK_FIXED)
+ def add_item(self, item):
+ self._items_to_position.append(item)
+ self.append(item, hippo.PACK_FIXED)
- def remove_item(self, item):
- if self._items_to_position.count(item) > 0:
- self._items_to_position.remove(item)
- self.remove(item)
+ def remove_item(self, item):
+ if self._items_to_position.count(item) > 0:
+ self._items_to_position.remove(item)
+ self.remove(item)
- def _get_item_radius(self, item):
- [width, height] = item.get_request()
- return math.sqrt(width ** 2 + height ** 2) / 2
+ def _get_item_radius(self, item):
+ [width, height] = item.get_request()
+ return math.sqrt(width ** 2 + height ** 2) / 2
- def _get_item_center(self, item):
- [width, height] = item.get_request()
- [x, y] = self.get_position(item)
+ def _get_item_center(self, item):
+ [width, height] = item.get_request()
+ [x, y] = self.get_position(item)
- c_x = int(x + float(width) / 2.0)
- c_y = int(y + float(height) / 2.0)
+ c_x = int(x + float(width) / 2.0)
+ c_y = int(y + float(height) / 2.0)
- return [c_x, c_y]
+ return [c_x, c_y]
- def _get_repulsion(self, icon1, icon2):
- [c1_x, c1_y] = self._get_item_center(icon1)
- [c2_x, c2_y] = self._get_item_center(icon2)
+ def _get_repulsion(self, icon1, icon2):
+ [c1_x, c1_y] = self._get_item_center(icon1)
+ [c2_x, c2_y] = self._get_item_center(icon2)
- a = c2_x - c1_x
- b = c2_y - c1_y
+ a = c2_x - c1_x
+ b = c2_y - c1_y
- r1 = self._get_item_radius(icon1)
- r2 = self._get_item_radius(icon2)
- distance = math.sqrt(a ** 2 + b ** 2) - r1 - r2
+ r1 = self._get_item_radius(icon1)
+ r2 = self._get_item_radius(icon2)
+ distance = math.sqrt(a ** 2 + b ** 2) - r1 - r2
- if distance < _DISTANCE_THRESHOLD:
- f_x = int(math.ceil(-_FORCE_CONSTANT * float(a)))
- f_y = int(math.ceil(-_FORCE_CONSTANT * float(b)))
- else:
- f_x = 0
- f_y = 0
+ if distance < _DISTANCE_THRESHOLD:
+ f_x = int(math.ceil(-_FORCE_CONSTANT * float(a)))
+ f_y = int(math.ceil(-_FORCE_CONSTANT * float(b)))
+ else:
+ f_x = 0
+ f_y = 0
- return [f_x, f_y]
+ return [f_x, f_y]
- def _clamp_position(self, icon, x, y):
- x = max(0, x)
- y = max(0, y)
+ def _clamp_position(self, icon, x, y):
+ x = max(0, x)
+ y = max(0, y)
- [item_w, item_h] = icon.get_request()
- [box_w, box_h] = self.get_allocation()
+ [item_w, item_h] = icon.get_request()
+ [box_w, box_h] = self.get_allocation()
- x = min(box_w - item_w, x)
- y = min(box_h - item_h, y)
+ x = min(box_w - item_w, x)
+ y = min(box_h - item_h, y)
- return [x, y]
+ return [x, y]
- def _spread_icons(self):
- self._stable = True
+ def _spread_icons(self):
+ self._stable = True
- for icon1 in self.get_children():
- vx = 0
- vy = 0
+ for icon1 in self.get_children():
+ vx = 0
+ vy = 0
- for icon2 in self.get_children():
- if icon1 != icon2:
- [f_x, f_y] = self._get_repulsion(icon1, icon2)
- if f_x != 0 or f_y != 0:
- self._stable = False
- vx += f_x
- vy += f_y
+ for icon2 in self.get_children():
+ if icon1 != icon2:
+ [f_x, f_y] = self._get_repulsion(icon1, icon2)
+ if f_x != 0 or f_y != 0:
+ self._stable = False
+ vx += f_x
+ vy += f_y
- if vx != 0 or vy != 0:
- [x, y] = self.get_position(icon1)
- new_x = x + vx
- new_y = y + vy
+ if vx != 0 or vy != 0:
+ [x, y] = self.get_position(icon1)
+ new_x = x + vx
+ new_y = y + vy
- [new_x, new_y] = self._clamp_position(icon1, new_x, new_y)
+ [new_x, new_y] = self._clamp_position(icon1, new_x, new_y)
- self.move(icon1, new_x, new_y)
+ self.move(icon1, new_x, new_y)
- def do_allocate(self, width, height):
- hippo.CanvasBox.do_allocate(self, width, height)
+ def do_allocate(self, width, height):
+ hippo.CanvasBox.do_allocate(self, width, height)
- for item in self._items_to_position:
- [item_w, item_h] = item.get_request()
+ for item in self._items_to_position:
+ [item_w, item_h] = item.get_request()
- x = int(random.random() * width - item_w)
- y = int(random.random() * height - item_h)
+ x = int(random.random() * width - item_w)
+ y = int(random.random() * height - item_h)
- [x, y] = self._clamp_position(item, x, y)
- self.move(item, x, y)
+ [x, y] = self._clamp_position(item, x, y)
+ self.move(item, x, y)
- self._items_to_position = []
+ self._items_to_position = []
- tries = 20
- self._spread_icons()
- while not self._stable and tries > 0:
- self._spread_icons()
- tries -= 1
+ tries = 20
+ self._spread_icons()
+ while not self._stable and tries > 0:
+ self._spread_icons()
+ tries -= 1