summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederic Back <fredericback@gmail.com>2006-09-28 17:37:35 +0000
committerFrederic Back <fredericback@gmail.com>2006-09-28 17:37:35 +0000
commitb82508ca8938265529c1678a16d7d19f39e2d58d (patch)
treedd7b02fdf338f88e4eab3a495d2aaf2336a3dff2
parenta4edcb3d34c36b7bf46823d7eff01c36397a07f5 (diff)
* Side link now sticks to the window border
git-svn-id: file:///home/lennart/svn/public/fring/trunk@46 d0d2c35f-0a1e-0410-abeb-dabff30a67ee
-rw-r--r--src/fringlib/fringrenderer.py63
1 files changed, 38 insertions, 25 deletions
diff --git a/src/fringlib/fringrenderer.py b/src/fringlib/fringrenderer.py
index 4c385f0..548cc12 100644
--- a/src/fringlib/fringrenderer.py
+++ b/src/fringlib/fringrenderer.py
@@ -30,6 +30,13 @@ class Segment(Hotspot):
class FringRenderer:
def __init__(self):
+ self.side_links = []
+ self.lookup_data = []
+ self.reset()
+
+ def reset(self):
+
+ # set ring layout
self.MAX_LEVEL = 1
self.WIDTH, self.HEIGHT = 1024, 768
self.INNER_RADIUS = 100
@@ -37,12 +44,11 @@ class FringRenderer:
self.RING_SPACE = 0
self.RINGS_MAX = 4
self.LINE_WIDTH = .5
- self.LEG_LINE_WIDTH = 1
-
self.LABEL_UNTIL_RING = 0
+ self.RING_OUTLINE_COLOR = (.2,.2,.2)
+ self.LEG_LINE_WIDTH = 1
+ self.LEG_LINE_COLOR = (.3,.3,.3)
- self.side_links = []
- self.lookup_data = []
def prepare_layouts(self,ctx):
self.linklayout = ctx.create_layout()
@@ -103,7 +109,7 @@ class FringRenderer:
ctx.set_source_rgb(*color)
ctx.fill_preserve()
- ctx.set_source_rgb(0, 0, 0)
+ ctx.set_source_rgb(*self.RING_OUTLINE_COLOR)
ctx.stroke()
if hasContents and ring+1 < self.RINGS_MAX:
@@ -115,34 +121,30 @@ class FringRenderer:
middle = CENTERX+r*cos((start+end)*pi), CENTERY+r*sin((start+end)*pi)
if ring <= 0:
- ctx.move_to(*middle)
+ # compute the points of the link line
+ e = self.INNER_RADIUS + self.RING_RADIUS - self.RING_RADIUS/4
leg_radius = self.INNER_RADIUS + (self.RINGS_MAX+1) * (self.RING_RADIUS + self.RING_SPACE)
leg_radius -= (self.RING_RADIUS + self.RING_SPACE) / 2
- ctx.line_to(CENTERX+leg_radius*cos((start+end)*pi), CENTERY+leg_radius*sin((start+end)*pi))
if cos((start+end)*pi) >= 0:
- x = self.WIDTH/2 + leg_radius
- align_x = 1
- else:
- x = self.WIDTH/2 - leg_radius
+ x = self.WIDTH
align_x = 0
+ else:
+ x = 0
+ align_x = 1
- # get line target point
y = CENTERY+leg_radius*sin((start+end)*pi)
xmod = 2*(align_x*2-1)
+ #xmod = 0
- # draw line
- ctx.line_to(x, y)
- ctx.set_source_rgb(.5, .5, .5)
- ctx.set_line_width(self.LEG_LINE_WIDTH)
- ctx.stroke()
-
- # write path name and register a hotspot
- ctx.move_to(x+xmod,y)
+ point_a = CENTERX+e*cos((start+end)*pi), CENTERY+e*sin((start+end)*pi)
+ point_b = CENTERX+leg_radius*cos((start+end)*pi), CENTERY+leg_radius*sin((start+end)*pi)
+ point_c = x,y
# draw the side link label
+ ctx.move_to(x+xmod,y)
if hasContents:
ctx.set_source_rgb(0,0,1)
width,height = self._draw_centered_text(ctx, fn + "/", align_x)
@@ -152,9 +154,20 @@ class FringRenderer:
if align_x == 0:
width *= -1
-
+
self.__register_side_link(hasContents,p,value,end-start,x,y+(height/2),x+(width),y-(height/2))
+ # draw line
+
+ ctx.move_to(*point_a)
+ ctx.line_to(*point_b)
+ offset = 5
+ if align_x: ctx.line_to(point_c[0]+width+offset,point_c[1])
+ else: ctx.line_to(point_c[0]+xmod+width-offset,point_c[1])
+ ctx.set_source_rgb(*self.LEG_LINE_COLOR)
+ ctx.set_line_width(self.LEG_LINE_WIDTH)
+ ctx.stroke()
+
# write disk usage on segments
if self.RING_RADIUS >= ctx.text_extents("55%")[3]:
ctx.move_to(*middle)
@@ -196,12 +209,12 @@ class FringRenderer:
return None
# A simple bisection algorithm
-
- ring = int((radius - self.INNER_RADIUS)/(self.RING_RADIUS + self.RING_SPACE))
try:
+ ring = int((radius - self.INNER_RADIUS)/(self.RING_RADIUS + self.RING_SPACE))
data = self.lookup_data[ring]
- except IndexError:
- return None
+ except IndexError: return None
+ except ZeroDivisionError: return None
+ except OverflowError: return None
minidx, maxidx = 0, len(data)-1
p = int(maxidx*v) # Initial estimation