- menubgpngfilename = job.workspace+"/dvd_menubg"+str(menu_count)+".png"
- highlightpngfilename = job.workspace+"/dvd_highlight"+str(menu_count)+".png"
- spuxml = """<?xml version="1.0" encoding="utf-8"?>
- <subpictures>
- <stream>
- <spu
- highlight="%s"
- transparent="%02x%02x%02x"
- start="00:00:00.00"
- force="yes" >""" % (highlightpngfilename, spu_palette[0], spu_palette[1], spu_palette[2])
- s_top, s_rows, s_left = s.space.getValue()
- rowheight = (fontsizes[1]+fontsizes[2]+s_rows)
- menu_start_title = (menu_count-1)*titles_per_menu + 1
- menu_end_title = (menu_count)*titles_per_menu + 1
- if menu_end_title > nr_titles:
- menu_end_title = nr_titles+1
- menu_i = 0
- for title_no in range( menu_start_title , menu_end_title ):
- i = title_no-1
- top = s_top + ( menu_i * rowheight )
- menu_i += 1
- title = job.project.titles[i]
- titleText = formatTitle(s.titleformat.getValue(), title, title_no)
- draw_bg.text((s_left,top), titleText, fill=color_button, font=font1)
- draw_high.text((s_left,top), titleText, fill=1, font=font1)
- subtitleText = formatTitle(s.subtitleformat.getValue(), title, title_no)
- draw_bg.text((s_left,top+36), subtitleText, fill=color_button, font=font2)
- bottom = top+rowheight
- if bottom > imgheight:
- bottom = imgheight
- spuxml += """
- <button name="button%s" x0="%d" x1="%d" y0="%d" y1="%d"/>""" % (str(title_no).zfill(2),s_left,imgwidth,top,bottom )
- if menu_count > 1:
- prev_page_text = "<<<"
- textsize = draw_bg.textsize(prev_page_text, font=font1)
- offset = ( 2*s_left, s_top + ( titles_per_menu * rowheight ) )
- draw_bg.text(offset, prev_page_text, fill=color_button, font=font1)
- draw_high.text(offset, prev_page_text, fill=1, font=font1)
- spuxml += """
- <button name="button_prev" x0="%d" x1="%d" y0="%d" y1="%d"/>""" % (offset[0],offset[0]+textsize[0],offset[1],offset[1]+textsize[1])
-
- if menu_count < job.nr_menus:
- next_page_text = ">>>"
- textsize = draw_bg.textsize(next_page_text, font=font1)
- offset = ( imgwidth-textsize[0]-2*s_left, s_top + ( titles_per_menu * rowheight ) )
- draw_bg.text(offset, next_page_text, fill=color_button, font=font1)
- draw_high.text(offset, next_page_text, fill=1, font=font1)
+ def run(self, callback):
+ self.callback = callback
+ # we are doing it this weird way so that the TaskView Screen actually pops up before the spinner comes
+ from enigma import eTimer
+ self.delayTimer = eTimer()
+ self.delayTimer.callback.append(self.conduct)
+ self.delayTimer.start(10,1)
+
+ def conduct(self):
+ try:
+ from ImageFont import truetype
+ from Image import open as Image_open
+ s = self.job.project.settings
+ self.Menus.im_bg_orig = Image_open(s.menubg.getValue())
+ if self.Menus.im_bg_orig.size != (self.Menus.imgwidth, self.Menus.imgheight):
+ self.Menus.im_bg_orig = self.Menus.im_bg_orig.resize((720, 576))
+ self.Menus.fontsizes = s.font_size.getValue()
+ fontface = s.font_face.getValue()
+ self.Menus.fonts = [truetype(fontface, self.Menus.fontsizes[0]), truetype(fontface, self.Menus.fontsizes[1]), truetype(fontface, self.Menus.fontsizes[2])]
+ Task.processFinished(self, 0)
+ except:
+ Task.processFinished(self, 1)
+
+class MenuImageTask(Task):
+ def __init__(self, job, menu_count, spuxmlfilename, menubgpngfilename, highlightpngfilename):
+ Task.__init__(self, job, "Create Menu %d Image" % menu_count)
+ self.postconditions.append(ImagingPostcondition())
+ self.weighting = 10
+ self.job = job
+ self.Menus = job.Menus
+ self.menu_count = menu_count
+ self.spuxmlfilename = spuxmlfilename
+ self.menubgpngfilename = menubgpngfilename
+ self.highlightpngfilename = highlightpngfilename
+
+ def run(self, callback):
+ self.callback = callback
+ try:
+ import ImageDraw, Image, os
+ s = self.job.project.settings
+ fonts = self.Menus.fonts
+ im_bg = self.Menus.im_bg_orig.copy()
+ im_high = Image.new("P", (self.Menus.imgwidth, self.Menus.imgheight), 0)
+ im_high.putpalette(self.Menus.spu_palette)
+ draw_bg = ImageDraw.Draw(im_bg)
+ draw_high = ImageDraw.Draw(im_high)
+ if self.menu_count == 1:
+ headline = s.name.getValue().decode("utf-8")
+ textsize = draw_bg.textsize(headline, font=fonts[0])
+ if textsize[0] > self.Menus.imgwidth:
+ offset = (0 , 20)
+ else:
+ offset = (((self.Menus.imgwidth-textsize[0]) / 2) , 20)
+ draw_bg.text(offset, headline, fill=self.Menus.color_headline, font=fonts[0])
+ spuxml = """<?xml version="1.0" encoding="utf-8"?>
+ <subpictures>
+ <stream>
+ <spu
+ highlight="%s"
+ transparent="%02x%02x%02x"
+ start="00:00:00.00"
+ force="yes" >""" % (self.highlightpngfilename, self.Menus.spu_palette[0], self.Menus.spu_palette[1], self.Menus.spu_palette[2])
+ s_top, s_rows, s_left = s.space.getValue()
+ rowheight = (self.Menus.fontsizes[1]+self.Menus.fontsizes[2]+s_rows)
+ menu_start_title = (self.menu_count-1)*self.job.titles_per_menu + 1
+ menu_end_title = (self.menu_count)*self.job.titles_per_menu + 1
+ nr_titles = len(self.job.project.titles)
+ if menu_end_title > nr_titles:
+ menu_end_title = nr_titles+1
+ menu_i = 0
+ for title_no in range( menu_start_title , menu_end_title ):
+ menu_i += 1
+ title = self.job.project.titles[title_no-1]
+ top = s_top + ( menu_i * rowheight )
+ titleText = title.formatDVDmenuText(s.titleformat.getValue(), title_no).decode("utf-8")
+ draw_bg.text((s_left,top), titleText, fill=self.Menus.color_button, font=fonts[1])
+ draw_high.text((s_left,top), titleText, fill=1, font=self.Menus.fonts[1])
+ subtitleText = title.formatDVDmenuText(s.subtitleformat.getValue(), title_no).decode("utf-8")
+ draw_bg.text((s_left,top+36), subtitleText, fill=self.Menus.color_button, font=fonts[2])
+ bottom = top+rowheight
+ if bottom > self.Menus.imgheight:
+ bottom = self.Menus.imgheight
+ spuxml += """
+ <button name="button%s" x0="%d" x1="%d" y0="%d" y1="%d"/>""" % (str(title_no).zfill(2),s_left,self.Menus.imgwidth,top,bottom )
+ if self.menu_count < self.job.nr_menus:
+ next_page_text = ">>>"
+ textsize = draw_bg.textsize(next_page_text, font=fonts[1])
+ offset = ( self.Menus.imgwidth-textsize[0]-2*s_left, s_top + ( self.job.titles_per_menu * rowheight ) )
+ draw_bg.text(offset, next_page_text, fill=self.Menus.color_button, font=fonts[1])
+ draw_high.text(offset, next_page_text, fill=1, font=fonts[1])
+ spuxml += """
+ <button name="button_next" x0="%d" x1="%d" y0="%d" y1="%d"/>""" % (offset[0],offset[0]+textsize[0],offset[1],offset[1]+textsize[1])
+ if self.menu_count > 1:
+ prev_page_text = "<<<"
+ textsize = draw_bg.textsize(prev_page_text, font=fonts[1])
+ offset = ( 2*s_left, s_top + ( self.job.titles_per_menu * rowheight ) )
+ draw_bg.text(offset, prev_page_text, fill=self.Menus.color_button, font=fonts[1])
+ draw_high.text(offset, prev_page_text, fill=1, font=fonts[1])
+ spuxml += """
+ <button name="button_prev" x0="%d" x1="%d" y0="%d" y1="%d"/>""" % (offset[0],offset[0]+textsize[0],offset[1],offset[1]+textsize[1])
+ del draw_bg
+ del draw_high
+ fd=open(self.menubgpngfilename,"w")
+ im_bg.save(fd,"PNG")
+ fd.close()
+ fd=open(self.highlightpngfilename,"w")
+ im_high.save(fd,"PNG")
+ fd.close()