gonzopi

git clone https://git.tarina.org/gonzopi
Log | Files | Refs | README | LICENSE

gonzopi_menu.py (8989B)


      1 import pydispmanx, time, pygame
      2 import os
      3 
      4 os.environ["DISPLAY"] = ":0" 
      5 pygame.display.init()
      6 pygame.font.init()
      7 
      8 print(pydispmanx.getDisplays())
      9 display_size=pydispmanx.getDisplaySize()
     10 print(display_size)
     11 print(str(round(pydispmanx.getFrameRate(),2))+"Hz")
     12 print(pydispmanx.getPixelAspectRatio())
     13 
     14 display_width=display_size[0]
     15 display_height=display_size[1]
     16 
     17 print("display width:"+str(display_width))
     18 print("display height:"+str(display_height))
     19 
     20 menulayer = pydispmanx.dispmanxLayer(10);
     21 vumenulayer = pydispmanx.dispmanxLayer(11);
     22 print("Layer successfully created")
     23 pygame_surface = pygame.image.frombuffer(menulayer, menulayer.size, 'RGBA')
     24 pygame_surface2 = pygame.image.frombuffer(vumenulayer, vumenulayer.size, 'RGBA')
     25 pygame_surface.set_alpha(150) 
     26 pygame_surface2.set_alpha(150) 
     27 WHITE = (255, 255, 255)
     28 WHITEOPAC = (255, 255, 0)
     29 OPAC = (255, 255, 255, 0)
     30 BLACK = (0, 0, 0, 120)
     31 YELLOW = (0, 0, 255)
     32 RED = (255, 0, 0)
     33 BLUE = (0, 0, 255)
     34 GREEN = (255, 255, 0)
     35 bakg=BLACK
     36 linenr = 0;
     37 selected = 0 
     38 showmenu = 0
     39 header = 0
     40 menuadd = 1
     41 y_offset2 = 0
     42 y_offset3 = 21
     43 y_offset4 = 42
     44 y_offset5 = 421
     45 y_offset6 = 442
     46 y_offset = 466
     47 text_size = 15
     48 text_size_selected = 16
     49 space = 10
     50 morespace = 12
     51 rectime = 700
     52 color = 3
     53 row1 = 0
     54 row2 = 0
     55 row3 = 0
     56 row4 = 0
     57 row5 = 0
     58 moverow = 0
     59 oldmenu=""
     60 oldvumeter=""
     61 hidemenu=False
     62 #font='VTV323'
     63 #font='VeraMono'
     64 #font='fixedsys'
     65 font='firacode'
     66 
     67 if display_width == 1280:
     68     y_offset2 = 0
     69     y_offset3 = 15
     70     y_offset4 = 30
     71     y_offset5 = 970
     72     y_offset6 = 985
     73     y_offset = 1000
     74     rectime = 1200
     75     text_size = 15
     76     text_size_selected = 11
     77     space = 10
     78     morespace = 5
     79     moverow = 0
     80 if display_width == 1920:
     81     y_offset2 = 0
     82     y_offset3 = 15
     83     y_offset4 = 30
     84     y_offset5 = 1035
     85     y_offset6 = 1050
     86     y_offset = 1065
     87     rectime = 1600
     88     text_size = 15
     89     text_size_selected = 11
     90     space = 10
     91     morespace = 5    
     92     moverow = 0
     93 if display_width == 800:
     94     y_offset2 = 0
     95     y_offset3 = 15
     96     y_offset4 = 30
     97     if display_height == 600:
     98         y_offset5 = 555
     99         y_offset6 = 570
    100         y_offset = 585
    101     else:
    102         y_offset5 = 435
    103         y_offset6 = 450
    104         y_offset = 465
    105     rectime = 700
    106     if font == 'VeraMono':
    107         text_size = 15
    108         text_size_selected = 11
    109         space = 10
    110         morespace = 5
    111     if font == 'VTV323':
    112         text_size = 19
    113         text_size_selected = 15
    114         space = 9
    115         morespace = 5
    116     else:
    117         text_size = 15
    118         text_size_selected = 11
    119         space = 10
    120         morespace = 5
    121     moverow = 0
    122 
    123 fontObj = pygame.font.Font("/home/pi/gonzopi/gui/"+font+'.ttf', text_size,bold=True)
    124 
    125 def render_menu(text, size, row, y_offset, color, bakg):
    126     t = fontObj.render(text, True, color)
    127     rect = t.get_rect().move(row,y_offset).inflate(0,-4)
    128     #print(rect)
    129     pygame.draw.rect(pygame_surface, bakg, rect)
    130     #pygame_surface.set_alpha(55)
    131     pygame_surface.blit(t, (row, y_offset))
    132 
    133 def render_vumenu(text, size, row, y_offset, color, bakg):
    134     t = fontObj.render(text, True, color)
    135     #rect = t.get_rect()
    136     #pygame.draw.rect(pygame_surface, BLUE, rect)
    137     #pygame_surface2.set_alpha(55)
    138     pygame_surface2.blit(t, (row, y_offset))
    139 
    140 while True:
    141     try:
    142         with open('/dev/shm/interface', 'r') as f:
    143             if f:
    144                 menu = [line.rstrip() for line in f]
    145         with open('/dev/shm/vumeter', 'r') as f:
    146             if f:
    147                 vumeter = f.read()
    148     except:
    149         menu=''
    150         vumeter=''
    151     if vumeter != oldvumeter: 
    152         pygame_surface2.fill((0,0,0,0))
    153         try:
    154             s_vol1 = vumeter[85]
    155             s_vol2 = vumeter[86]
    156             vol=s_vol1+s_vol2
    157             vol = int(vol)
    158             if vol >= 0 and vol < 35:
    159                 color = WHITE
    160             if vol >= 35 and vol < 99:
    161                 color = GREEN
    162             if vol >= 99:
    163                 color = RED
    164         except:
    165             color=WHITE
    166         bakg=BLACK
    167         render_vumenu(vumeter, text_size, 0, y_offset, color, bakg)
    168         oldvumeter = vumeter
    169         vumenulayer.updateLayer()
    170     if menu != oldmenu and len(str(menu)) > 3:
    171         pygame_surface.fill((0,0,0,0))
    172         #print(menu)
    173         #text1 = fontObj.render(menu[3], True, WHITE, BLUE)
    174         #text2 = fontObj.render(menu[4], True, WHITE, BLUE)
    175         #text3 = fontObj.render(menu[5], True, WHITE, BLUE)
    176         #text4 = fontObj.render(menu[6], True, WHITE, BLUE)
    177         #text5 = fontObj.render(menu[7], True, WHITE, BLUE)
    178         #rect = text1.get_rect()
    179         #pygame.draw.rect(pygame_surface, BLUE, rect)
    180 
    181         linenr=0
    182         color = WHITE
    183         row1 = 0
    184         row2 = 0
    185         row3 = 0
    186         row4 = 0
    187         row5 = 0
    188 
    189         for i in menu:
    190             #print(i)
    191             read = len(i)
    192             if linenr == 0:
    193                 try:
    194                     selected = int(i.strip())
    195                 except:
    196                     selected = 0
    197             if linenr == 1:
    198                 try:
    199                     showmenu = int(i.strip())
    200                 except:
    201                     showmenu = 1
    202             if linenr == selected + 2 + menuadd:
    203                 color = BLACK ##selected color
    204                 bakg = WHITEOPAC
    205                 hidemenu=False
    206             else:
    207                 if showmenu == 1:
    208                     color = WHITE ##unselected;
    209                     bakg=BLACK
    210                     hidemenu=False
    211                 if showmenu == 2:
    212                     color = BLUE
    213                     bakg=BLACK
    214                 if showmenu == 0:
    215                     color = OPAC
    216                     bakg=OPAC
    217                     hidemenu=True
    218             if linenr == 2 and i == '':
    219                 header = 0
    220             if linenr == 2 and i != '':
    221                 header = 1
    222             if selected == 420:
    223                 if linenr == 1:
    224                     render_menu(i, text_size, moverow, y_offset2, WHITE, bakg)
    225                 if linenr > 1:
    226                     text1 = fontObj.render(i, True, WHITE, BLUE)
    227                     render_menu(i, text_size, row1, y_offset3, WHITE, bakg)
    228                     row1 += read * space + morespace
    229             if header == 0 and selected < 420:
    230                 if linenr == 7+menuadd and i != '': ##show recording time if there is any
    231                     #render_subtitle(img, line, text_size, text_size_selected, rectime, y_offset2, 3);
    232                     color = RED
    233                     render_menu(i, text_size, rectime, y_offset2, color, bakg)
    234                 if linenr >= 2+menuadd and linenr <= 6+menuadd:
    235                     render_menu(i, text_size, row1, y_offset2, color, bakg)
    236                     #render_subtitle(img, line, text_size, text_size_selected, row1, y_offset2, color);
    237                     row1 += read * space + morespace
    238                     #print(str(row1))
    239                 if linenr >= 8+menuadd and linenr <= 13+menuadd:
    240                     if hidemenu == False:
    241                         render_menu(i, text_size, row2, y_offset3, color, bakg)
    242                     #render_subtitle(img, line, text_size, text_size_selected, row2, y_offset3, color);
    243                     row2 += read * space + morespace
    244                     #print(str(row2))
    245                 if linenr >= 14+menuadd and linenr <= 20+menuadd:
    246                     if hidemenu == False:
    247                         render_menu(i, text_size, row3, y_offset4, color, bakg)
    248                     #render_subtitle(img, line, text_size, text_size_selected, row3, y_offset4, color);
    249                     row3 += read * space + morespace
    250                     #print(str(row3))
    251                 if linenr >= 21+menuadd and linenr <= 29+menuadd:
    252                     if hidemenu == False:
    253                         render_menu(i, text_size, row4, y_offset5, color, bakg)
    254                     #render_subtitle(img, line, text_size, text_size_selected, row4, y_offset5, color);
    255                     row4 += read * space + morespace
    256                 if linenr >= 30+menuadd and linenr <= 41+menuadd:
    257                     if hidemenu == False:
    258                         render_menu(i, text_size, row5, y_offset6, color, bakg)
    259                     #render_subtitle(img, line, text_size, text_size_selected, row5, y_offset6, color);
    260                     row5 += read * space + morespace;
    261             if header == 1:
    262                 if linenr == 1+menuadd:
    263                     render_menu(i, text_size, 0, y_offset2, color, bakg)
    264                     #render_subtitl(img, line, text_size, text_size_selected, moverow, y_offset2, 5);
    265                 if linenr > 1+menuadd:
    266                     render_menu(i, text_size, row1, y_offset3, color, bakg)
    267                     #render_subtitle(img, line, text_size, text_size_selected, row1, y_offset3, color);
    268                     row1 += read * space + morespace;
    269             linenr+=1
    270 
    271         #render_subtitle(img, vumeter, text_size, text_size_selected , moverow, y_offset, vucolor);
    272         menulayer.updateLayer()
    273         oldmenu = menu
    274     time.sleep(0.05)