fanchart: factor out inner ring drawing
svn: r20384
This commit is contained in:
parent
5a2ec9a3f2
commit
51d5ea5643
@ -430,7 +430,41 @@ class FanChartBaseWidget(Gtk.DrawingArea):
|
|||||||
alpha = 1.
|
alpha = 1.
|
||||||
|
|
||||||
return color[0], color[1], color[2], alpha
|
return color[0], color[1], color[2], alpha
|
||||||
|
|
||||||
|
def draw_innerring(self, cr, person, userdata, start, inc):
|
||||||
|
"""
|
||||||
|
Procedure to draw a person in the inner ring position
|
||||||
|
"""
|
||||||
|
# in polar coordinates what is to draw
|
||||||
|
rmin = TRANSLATE_PX
|
||||||
|
rmax = TRANSLATE_PX + CHILDRING_WIDTH
|
||||||
|
thetamin = start
|
||||||
|
thetamax = start + inc
|
||||||
|
# add child to angle storage
|
||||||
|
self.angle[-2].append([thetamin, thetamax, None])
|
||||||
|
#draw child now
|
||||||
|
cr.move_to(rmin*math.cos(thetamin), rmin*math.sin(thetamin))
|
||||||
|
cr.arc(0, 0, rmin, thetamin, thetamax)
|
||||||
|
cr.line_to(rmax*math.cos(thetamax), rmax*math.sin(thetamax))
|
||||||
|
cr.arc_negative(0, 0, rmax, thetamax, thetamin)
|
||||||
|
cr.close_path()
|
||||||
|
##path = cr.copy_path() # not working correct
|
||||||
|
cr.set_source_rgb(0, 0, 0) # black
|
||||||
|
cr.set_line_width(1)
|
||||||
|
cr.stroke()
|
||||||
|
#now again to fill
|
||||||
|
if person:
|
||||||
|
r, g, b, a = self.background_box(person, -1, userdata)
|
||||||
|
else:
|
||||||
|
r=255; g=255; b=255; a=1
|
||||||
|
cr.move_to(rmin*math.cos(thetamin), rmin*math.sin(thetamin))
|
||||||
|
cr.arc(0, 0, rmin, thetamin, thetamax)
|
||||||
|
cr.line_to(rmax*math.cos(thetamax), rmax*math.sin(thetamax))
|
||||||
|
cr.arc_negative(0, 0, rmax, thetamax, thetamin)
|
||||||
|
cr.close_path()
|
||||||
|
##cr.append_path(path) # not working correct
|
||||||
|
cr.set_source_rgba(r/255., g/255., b/255., a)
|
||||||
|
cr.fill()
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -485,6 +519,8 @@ class FanChartWidget(FanChartBaseWidget):
|
|||||||
Set the generations to max, and fill data structures with initial data.
|
Set the generations to max, and fill data structures with initial data.
|
||||||
"""
|
"""
|
||||||
self.angle = {}
|
self.angle = {}
|
||||||
|
if self.childring:
|
||||||
|
self.angle[-2] = []
|
||||||
self.data = {}
|
self.data = {}
|
||||||
self.childrenroot = []
|
self.childrenroot = []
|
||||||
for i in range(self.generations):
|
for i in range(self.generations):
|
||||||
@ -721,7 +757,7 @@ class FanChartWidget(FanChartBaseWidget):
|
|||||||
else:
|
else:
|
||||||
cr.stroke()
|
cr.stroke()
|
||||||
if child and self.childring:
|
if child and self.childring:
|
||||||
self.drawchildring(cr)
|
self.draw_childring(cr)
|
||||||
if self.background in [BACKGROUND_GRAD_AGE, BACKGROUND_GRAD_PERIOD]:
|
if self.background in [BACKGROUND_GRAD_AGE, BACKGROUND_GRAD_PERIOD]:
|
||||||
self.draw_gradient(cr, widget, halfdist)
|
self.draw_gradient(cr, widget, halfdist)
|
||||||
|
|
||||||
@ -797,7 +833,7 @@ class FanChartWidget(FanChartBaseWidget):
|
|||||||
self.fontcolor(r, g, b), self.fontbold(a))
|
self.fontcolor(r, g, b), self.fontbold(a))
|
||||||
cr.restore()
|
cr.restore()
|
||||||
|
|
||||||
def drawchildring(self, cr):
|
def draw_childring(self, cr):
|
||||||
cr.move_to(TRANSLATE_PX + CHILDRING_WIDTH, 0)
|
cr.move_to(TRANSLATE_PX + CHILDRING_WIDTH, 0)
|
||||||
cr.set_source_rgb(0, 0, 0) # black
|
cr.set_source_rgb(0, 0, 0) # black
|
||||||
cr.set_line_width(1)
|
cr.set_line_width(1)
|
||||||
@ -810,45 +846,12 @@ class FanChartWidget(FanChartBaseWidget):
|
|||||||
angleinc = math.pi/2
|
angleinc = math.pi/2
|
||||||
else:
|
else:
|
||||||
angleinc = 2 * math.pi / nrchild
|
angleinc = 2 * math.pi / nrchild
|
||||||
self.angle[-2] = []
|
for childdata in self.childrenroot:
|
||||||
for child in self.childrenroot:
|
child_handle, child_gender, has_child, userdata = childdata
|
||||||
self.drawchild(cr, child, startangle, angleinc)
|
child = self.dbstate.db.get_person_from_handle(child_handle)
|
||||||
|
self.draw_innerring(cr, child, userdata, startangle, angleinc)
|
||||||
startangle += angleinc
|
startangle += angleinc
|
||||||
|
|
||||||
def drawchild(self, cr, childdata, start, inc):
|
|
||||||
child_handle, child_gender, has_child, userdata = childdata
|
|
||||||
# in polar coordinates what is to draw
|
|
||||||
rmin = TRANSLATE_PX
|
|
||||||
rmax = TRANSLATE_PX + CHILDRING_WIDTH
|
|
||||||
thetamin = start
|
|
||||||
thetamax = start + inc
|
|
||||||
# add child to angle storage
|
|
||||||
self.angle[-2].append([thetamin, thetamax, None])
|
|
||||||
#draw child now
|
|
||||||
cr.move_to(rmin*math.cos(thetamin), rmin*math.sin(thetamin))
|
|
||||||
cr.arc(0, 0, rmin, thetamin, thetamax)
|
|
||||||
cr.line_to(rmax*math.cos(thetamax), rmax*math.sin(thetamax))
|
|
||||||
cr.arc_negative(0, 0, rmax, thetamax, thetamin)
|
|
||||||
cr.close_path()
|
|
||||||
##path = cr.copy_path() # not working correct
|
|
||||||
cr.set_source_rgb(0, 0, 0) # black
|
|
||||||
cr.set_line_width(1)
|
|
||||||
cr.stroke()
|
|
||||||
#now again to fill
|
|
||||||
person = self.dbstate.db.get_person_from_handle(child_handle)
|
|
||||||
if person:
|
|
||||||
r, g, b, a = self.background_box(person, -1, userdata)
|
|
||||||
else:
|
|
||||||
r=255; g=255; b=255; a=1
|
|
||||||
cr.move_to(rmin*math.cos(thetamin), rmin*math.sin(thetamin))
|
|
||||||
cr.arc(0, 0, rmin, thetamin, thetamax)
|
|
||||||
cr.line_to(rmax*math.cos(thetamax), rmax*math.sin(thetamax))
|
|
||||||
cr.arc_negative(0, 0, rmax, thetamax, thetamin)
|
|
||||||
cr.close_path()
|
|
||||||
##cr.append_path(path) # not working correct
|
|
||||||
cr.set_source_rgba(r/255., g/255., b/255., a)
|
|
||||||
cr.fill()
|
|
||||||
|
|
||||||
def draw_text(self, cr, text, radius, start, stop, radial=False,
|
def draw_text(self, cr, text, radius, start, stop, radial=False,
|
||||||
fontcolor=(0, 0, 0), bold=False):
|
fontcolor=(0, 0, 0), bold=False):
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user