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)