From 6451f5774cb77c7e982fb1126d9e959c3284f928 Mon Sep 17 00:00:00 2001 From: Jules Date: Wed, 6 May 2026 22:43:21 +0200 Subject: [PATCH] Mise a jour theme GRUB + logo copydev + test pygame Co-Authored-By: Claude Sonnet 4.6 --- frontend/assets/logos/copydev.png | Bin 0 -> 19141 bytes scripts/grub-theme/background.png | Bin 10764 -> 14781 bytes scripts/grub-theme/icons/autre.png | Bin 1311 -> 1532 bytes scripts/grub-theme/icons/photobooth.png | Bin 1588 -> 1458 bytes scripts/grub-theme/icons/photostation.png | Bin 1966 -> 1399 bytes scripts/grub-theme/icons/uefi-firmware.png | Bin 0 -> 1200 bytes scripts/grub-theme/select_c.png | Bin 360 -> 493 bytes scripts/grub-theme/select_e.png | Bin 93 -> 99 bytes scripts/grub-theme/select_n.png | Bin 92 -> 102 bytes scripts/grub-theme/select_ne.png | Bin 78 -> 78 bytes scripts/grub-theme/select_nw.png | Bin 78 -> 78 bytes scripts/grub-theme/select_s.png | Bin 92 -> 102 bytes scripts/grub-theme/select_se.png | Bin 78 -> 78 bytes scripts/grub-theme/select_sw.png | Bin 78 -> 78 bytes scripts/grub-theme/select_w.png | Bin 93 -> 99 bytes scripts/grub-theme/theme.txt | 40 ++-- scripts/test_photobooth_pygame.py | 242 +++++++++++++++++++++ 17 files changed, 257 insertions(+), 25 deletions(-) create mode 100644 frontend/assets/logos/copydev.png create mode 100644 scripts/grub-theme/icons/uefi-firmware.png create mode 100644 scripts/test_photobooth_pygame.py diff --git a/frontend/assets/logos/copydev.png b/frontend/assets/logos/copydev.png new file mode 100644 index 0000000000000000000000000000000000000000..30a61eb413c1c2fc1686c8ebf61ba2297404a699 GIT binary patch literal 19141 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 literal 0 HcmV?d00001 diff --git a/scripts/grub-theme/background.png b/scripts/grub-theme/background.png index 683466d36ab7bfc19b65028ac82645ff4a4b0e35..e9a4fb62502a0992a9e715eb5335bdc25336eb33 100644 GIT binary patch literal 14781 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 diff --git a/scripts/grub-theme/icons/autre.png b/scripts/grub-theme/icons/autre.png index ee0ceaba80d802f6b8c8bc4cd1b58b863456d7d3..de44cd6c779b287dc9f24459fffc5430de9b07e0 100644 GIT binary patch literal 1532 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 M07*qoM6N<$f~Du5egFUf literal 1588 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 FV1n7bbuj<{ literal 1966 zcmV;f2T}NmP) zTWnKh0LT9=>$-JYyY4<1+sa^2xhZ3A5JZtn5Q#>d(HQX(6GQaD7-LL`(fDSJ=nEJh zyoAVu_bBnj8z2zI1d)Z?+}wS2bnDu!?Rwo>AF!lr&pADp@ARCu-|wyM={eu||GrE6 zo%VbHg+ifFautoz1>j3G8a*%cJsORsU5>JlM3n->gv}SVNl}deIYVbd4KfrJASCn; zc7E3;bpNmXvagHpwo1uRL_n(G#e~h5R8rC{BCP_rf|oONHn?P@OGH`(s4e(JloTPm z0JiYe5PTwRBIJ}Hs{p3()fjvtOd{lxAd7%Z4L*@{h|rSU8IV2U1I*cAR$5W7?7*s$B=sdf(67|&h_wP#OENi6$lcb#8s1pmcE&*^}de;sO%! zxq|SyCNX+>5_=A|V&%4_jN3J~Rxc1xVPOtG;0@!8mw!jV6I%GZCxn0}gsEXSdQObu z)Q8=uuo$s+j|BlwnA{1aKy?D*`Sa^ORsqH;!-B^J#^f#u0Hy|KlEP=hG3dt0Bi+IZ zDG^nV0iH=e>udUwg@K2B%(b?%$%K;1LZam&iK+#ZB-HYFf(f;HvVVqgyL^KVPae4+ zo1V6!W>py$<*DnGRow-(bgW=~%{}2;@Yp%x!9?FQs#cUHZEG;=(Z1h`_Wf2w<|1&7 zdEppzW1@c=|6ZMfz1M~LaD;U6d7(N1hEhGs8;xjvycrD}nLh;qz|aMI(sL&cU&dpH zwsO{TZJrk8jYgC=8nJR)9e`WiSAXX?x_=nJ_zkD@lMsO70uFq$SMYm+-Z1_?HJ0@J z_;n|azuAcg4&IG|Vjb`OQLR@jr5_BBeihM(Q>L%m=gh@}xk(i8&(RuU+&L6wMYuiOSE$TN^ zVd?rx)ZS5s%4H_#3i$M~!mr~D$#+VOBFxYhy zgIzZP02+-3rAvyicy&1}Z8cc7sg`xTSo@#_XFt7$Xhhz*Y4r(+0wMn#g0o>v+q|&% zx-f8F#PtBCT}PvEjd|f3^Wxf1!!TAG(DB|qFx4baLFkKhC~qi%W6&-6xLhbMAaO1z zow)5jbba1~U9Yt;zHTrV05S{6$U&Hi3X2iDU*E`Bo4N2h1FWy5r`D+bDvw;^uLN{;=cNffGc&bMVcJa}3aEH0_!4H>Jp21pVj6(SL3n8m$JE zO(rZ^Q;rIY3Ff+D7^@A)H|U@%%tJI1MaVY?|4a~5L$`jA)qC28nQ?grU9Q`krMzbx z{fE48gxp^)Wf!D|JB(*Csqzy%2&;W8P#U56@De~axCIN?1D_TOOR^?4dRRVWYZclfcy*j5WghJ zRJcrS4e3}#iLN8YK*p~l77txXj~lv{B(i)h$#~QzB4<`pO@yu|9Cy5Q9xM^MqBdPq zUhxY|su2*6oHEo9dOWHWz=RknY73h}p-@!Df0ap4NZQ2;oB#j-07*qoM6N<$f@d$L AkN^Mx diff --git a/scripts/grub-theme/icons/uefi-firmware.png b/scripts/grub-theme/icons/uefi-firmware.png new file mode 100644 index 0000000000000000000000000000000000000000..680539da05a473b2e07f8bd5a636631c85a31491 GIT binary patch literal 1200 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7xzrU@7->aSW-L^LFmp+{Xq2t?u1# zQ!Y1V8zq=OY-S99I6Jyfnls@*uEd9VQv`Z6KIWg0Joo#Y=aLt-Rn8}kTv&kSFm(Iu zEnmR;{`+s^@8!!gf34W5e@VitVbX$NNmrh$Oj~$rxYs(Z5LQtC^0)54etGrv*I%{2 zmYbYh;MOqXfp?Risv8flQiqsB)C)zE(+WWiYagh#$R&BRWh!+DCFoY1T-Y8l*|Ccw ziG`zeyNyFZ2$aIQZK`WZ`NC?}z;od(Kbd*sJnFsp0B_T9u9u%by$$hHgt9vPuqp5g@MUN@&pn+*CmTpJA1_?1)R3)w==o9G zeWp(J#4z?8zcrOX>VU;v@y6&aF&dr`Q?|14CdhE0 zqL0%XmtWR=`CNZGx2+ui$J>*bfLa7#=#hBi51oeT@w^ZA%~pH1^@W37Uf;jn?FLLB zTi|GOg`|b=<>P-oJosAm_tnpWj8}gvl@{H8>-PQk+{FAZ8_QT7fX?S)LrG00!`BDaH)OnNOYw=>o;YH&&+VGhJlbbmFYCC&QKo zzMvwnJcc{s6WmXg?)U##%iwWg`lZM7RTPenF%G>bOA>OOMeySjlVV!lRR(x82vmztE%<-+W7$W#T1QoyA9g@r7 zaez7ehYOD~gV2>$;~J%9rVJ`8n9F~-^qgmLYBGvy@!#_C>;fsBy=#T;8*yzeSyXT@ zJF#A?BJ=r0w$oeq=C5#M-ti;1LG8!F(5JsmL>oAi4=z6*`To+MZbb=B`!7HR&dfU^ za+x^~*5_|O?iM>uML{aKCE)VcKQ3E$GZ-s(D;WNGU;AP&vz{VnM@iR)ZQCXa*iAHG zOuOcyFiH3DwWcty55`KYGj0ksdbIHvh8tdLnlGr^&}|}V(*ACdTfzopr0L%4leE6DIs3%)r3=j`_;; Sj1wL}T@0SCelF{r5}E+H-55mx delta 75 zcmYd}ognU3!NJDBz;IPC_y~|v@pN$vshE@ObMMpsCPq#J!v&3jDDa^Y1A|ltbDiXs Rb~m7U22WQ%mvv4FO#qI47-s+g diff --git a/scripts/grub-theme/select_n.png b/scripts/grub-theme/select_n.png index 843a1d9aa507329d064e85df573fde2c1b5e99f9..2a66d3df4f4aa946dca8f4631095d8124840c4c6 100644 GIT binary patch literal 102 zcmeAS@N?(olHy`uVBq!ia0vp^CxDoRgAGWYE-DBFQo5cljv*Cul6fLNByu0tkYHWR zpq(IMfM4RQ!r}yx2aF80Q<&yBOu5qs)X3oJ>gTe~DWM4ft|S`$ literal 92 zcmeAS@N?(olHy`uVBq!ia0vp^6+q0w!3HEO=$B>FS$v*c!?QcpH;fX$A qa)D2RbqniaL7OuNGg$bG85n{cnWky5pELz3XYh3Ob6Mw<&;$V8M;GS+ diff --git a/scripts/grub-theme/select_ne.png b/scripts/grub-theme/select_ne.png index fc60fc94060de0121c9c1482930d567a9a16f631..4c88269f6ec12d4570a73269324148d57a1ab8dd 100644 GIT binary patch delta 39 tcmebCo1mk_6Y(LDn^`C!$$`0rm0@KG(;VgNaiR=B;OXk;vd$@?2>{vB3itp3 delta 39 ucmebCo1mlQbMMpsCPq#J!v&0om>5>1FikT$yhefn2s~Z=T-G@yGywn;01Wp4 diff --git a/scripts/grub-theme/select_nw.png b/scripts/grub-theme/select_nw.png index fc60fc94060de0121c9c1482930d567a9a16f631..4c88269f6ec12d4570a73269324148d57a1ab8dd 100644 GIT binary patch delta 39 tcmebCo1mk_6Y(LDn^`C!$$`0rm0@KG(;VgNaiR=B;OXk;vd$@?2>{vB3itp3 delta 39 ucmebCo1mlQbMMpsCPq#J!v&0om>5>1FikT$yhefn2s~Z=T-G@yGywn;01Wp4 diff --git a/scripts/grub-theme/select_s.png b/scripts/grub-theme/select_s.png index 843a1d9aa507329d064e85df573fde2c1b5e99f9..2a66d3df4f4aa946dca8f4631095d8124840c4c6 100644 GIT binary patch literal 102 zcmeAS@N?(olHy`uVBq!ia0vp^CxDoRgAGWYE-DBFQo5cljv*Cul6fLNByu0tkYHWR zpq(IMfM4RQ!r}yx2aF80Q<&yBOu5qs)X3oJ>gTe~DWM4ft|S`$ literal 92 zcmeAS@N?(olHy`uVBq!ia0vp^6+q0w!3HEO=$B>FS$v*c!?QcpH;fX$A qa)D2RbqniaL7OuNGg$bG85n{cnWky5pELz3XYh3Ob6Mw<&;$V8M;GS+ diff --git a/scripts/grub-theme/select_se.png b/scripts/grub-theme/select_se.png index fc60fc94060de0121c9c1482930d567a9a16f631..4c88269f6ec12d4570a73269324148d57a1ab8dd 100644 GIT binary patch delta 39 tcmebCo1mk_6Y(LDn^`C!$$`0rm0@KG(;VgNaiR=B;OXk;vd$@?2>{vB3itp3 delta 39 ucmebCo1mlQbMMpsCPq#J!v&0om>5>1FikT$yhefn2s~Z=T-G@yGywn;01Wp4 diff --git a/scripts/grub-theme/select_sw.png b/scripts/grub-theme/select_sw.png index fc60fc94060de0121c9c1482930d567a9a16f631..4c88269f6ec12d4570a73269324148d57a1ab8dd 100644 GIT binary patch delta 39 tcmebCo1mk_6Y(LDn^`C!$$`0rm0@KG(;VgNaiR=B;OXk;vd$@?2>{vB3itp3 delta 39 ucmebCo1mlQbMMpsCPq#J!v&0om>5>1FikT$yhefn2s~Z=T-G@yGywn;01Wp4 diff --git a/scripts/grub-theme/select_w.png b/scripts/grub-theme/select_w.png index 0fda206168c6346e0ce98a4984decdaf4bb9916e..72518a2df4426c3ec0d90f5102ffdcefccc6e06f 100644 GIT binary patch delta 81 zcmaz|o*?eCfP;;JfkC_GY#Wf$@^o6DIs3%)r3=j`_;; Sj1wL}T@0SCelF{r5}E+H-55mx delta 75 zcmYd}ognU3!NJDBz;IPC_y~|v@pN$vshE@ObMMpsCPq#J!v&3jDDa^Y1A|ltbDiXs Rb~m7U22WQ%mvv4FO#qI47-s+g diff --git a/scripts/grub-theme/theme.txt b/scripts/grub-theme/theme.txt index d3901e8..e0caa94 100644 --- a/scripts/grub-theme/theme.txt +++ b/scripts/grub-theme/theme.txt @@ -1,35 +1,25 @@ # Theme GRUB tactile - Triple Boot Terra title-text: "" -desktop-color: "#1a1a2e" +desktop-image: "background.png" +desktop-color: "#0f1428" message-color: "#ffffff" message-bg-color: "#000000" terminal-font: "DejaVu Sans Bold 24" + boot_menu { - left = 10% - top = 15% - width = 80% - height = 70% - item_font = "DejaVu Sans Bold 36" - item_color = "#cccccc" - selected_item_font = "DejaVu Sans Bold 42" + left = 15% + top = 25% + width = 70% + height = 60% + item_font = "DejaVu Sans Bold 48" + item_color = "#aabbcc" + selected_item_font = "DejaVu Sans Bold 48" selected_item_color = "#ffffff" - item_height = 120 - item_padding = 20 - item_spacing = 30 - item_icon_space = 30 - icon_width = 96 - icon_height = 96 + item_height = 160 + item_padding = 30 + item_spacing = 20 + item_icon_space = 40 + icon_width = 128 + icon_height = 128 selected_item_pixmap_style = "select_*.png" } - -+ label { - left = 0 - top = 90% - width = 100% - height = 30 - text = "Toucher pour selectionner - Appuyer sur Entree pour demarrer" - font = "DejaVu Sans 18" - color = "#888888" - align = "center" -} diff --git a/scripts/test_photobooth_pygame.py b/scripts/test_photobooth_pygame.py new file mode 100644 index 0000000..029938b --- /dev/null +++ b/scripts/test_photobooth_pygame.py @@ -0,0 +1,242 @@ +#!/usr/bin/env python3 +""" +Prototype photobooth Pygame. +- Bouton -> liveview -> 3 2 1 -> photo x4 -> grille 4 photos +""" +import time +import threading +import io +import os +from pathlib import Path +from datetime import datetime + +import pygame +import gphoto2 as gp +from PIL import Image + +# Config +LARGEUR, HAUTEUR = 1920, 1280 +NB_PHOTOS = 4 +DUREE_COMPTE = 3 +DOSSIER_PHOTOS = Path("/tmp/photobooth_test") +DOSSIER_PHOTOS.mkdir(exist_ok=True) + +# Couleurs +NOIR = (0, 0, 0) +BLANC = (255, 255, 255) +ROSE = (233, 30, 99) +GRIS = (40, 40, 40) + +class Photobooth: + def __init__(self): + pygame.init() + self.screen = pygame.display.set_mode((LARGEUR, HAUTEUR), pygame.FULLSCREEN) + pygame.display.set_caption("Photobooth") + self.clock = pygame.time.Clock() + self.font_grand = pygame.font.SysFont(None, 300) + self.font_moyen = pygame.font.SysFont(None, 100) + self.font_petit = pygame.font.SysFont(None, 60) + + # Camera + self.cam = gp.Camera() + self.cam.init() + + # Etat + self.etat = "accueil" # accueil, preview, compte, capture, galerie + self.frame_courante = None + self.frame_lock = threading.Lock() + self.preview_actif = False + + # Capture via le thread preview (evite le baisse de miroir) + self.capture_demande = False + self.capture_resultat = None + self.capture_done = threading.Event() + self.photos = [] + self.num_photo = 0 + self.chiffre_compte = 0 + + # Thread preview + self.thread_preview = threading.Thread(target=self._loop_preview, daemon=True) + self.thread_preview.start() + + def _loop_preview(self): + while True: + if self.preview_actif: + try: + if self.capture_demande: + try: + chemin_cam = self.cam.capture(gp.GP_CAPTURE_IMAGE) + cf = gp.CameraFile() + self.cam.file_get(chemin_cam.folder, chemin_cam.name, gp.GP_FILE_TYPE_NORMAL, cf) + nom = f"photo_{datetime.now().strftime('%H%M%S_%f')}.jpg" + chemin = str(DOSSIER_PHOTOS / nom) + cf.save(chemin) + self.capture_resultat = chemin + print(f"Photo capturee: {chemin}") + except Exception as e: + print(f"Erreur capture: {e}") + self.capture_resultat = None + self.capture_demande = False + self.capture_done.set() + else: + f = self.cam.capture_preview() + data = bytes(f.get_data_and_size()) + surf = pygame.image.load(io.BytesIO(data)) + surf = pygame.transform.scale(surf, (LARGEUR, HAUTEUR)) + with self.frame_lock: + self.frame_courante = surf + except Exception as e: + print(f"Preview erreur: {e}") + time.sleep(0.3) # Camera peut etre occupee apres capture + else: + time.sleep(0.05) + + def capturer_photo(self): + """Demande une capture au thread preview (miroir reste leve).""" + self.capture_resultat = None + self.capture_done.clear() + self.capture_demande = True + ok = self.capture_done.wait(timeout=10) + if not ok: + print("Timeout capture") + self.capture_demande = False + return self.capture_resultat + + def dessiner_accueil(self): + self.screen.fill(NOIR) + txt = self.font_moyen.render("PHOTOBOOTH", True, ROSE) + self.screen.blit(txt, (LARGEUR//2 - txt.get_width()//2, 300)) + + # Bouton + btn = pygame.Rect(LARGEUR//2 - 300, HAUTEUR//2, 600, 150) + pygame.draw.rect(self.screen, ROSE, btn, border_radius=20) + t = self.font_moyen.render("COMMENCER", True, BLANC) + self.screen.blit(t, (btn.centerx - t.get_width()//2, btn.centery - t.get_height()//2)) + return btn + + def dessiner_preview(self): + with self.frame_lock: + if self.frame_courante: + self.screen.blit(self.frame_courante, (0, 0)) + else: + self.screen.fill(NOIR) + # Info + t = self.font_petit.render(f"Photo {self.num_photo+1}/{NB_PHOTOS} - Souriez!", True, BLANC) + self.screen.blit(t, (20, 20)) + + def dessiner_compte(self): + with self.frame_lock: + if self.frame_courante: + self.screen.blit(self.frame_courante, (0, 0)) + else: + self.screen.fill(NOIR) + # Overlay sombre + overlay = pygame.Surface((LARGEUR, HAUTEUR), pygame.SRCALPHA) + overlay.fill((0, 0, 0, 100)) + self.screen.blit(overlay, (0, 0)) + # Chiffre + txt = self.font_grand.render(str(self.chiffre_compte), True, BLANC) + self.screen.blit(txt, (LARGEUR//2 - txt.get_width()//2, HAUTEUR//2 - txt.get_height()//2)) + + def dessiner_galerie(self): + self.screen.fill(NOIR) + if not self.photos: + t = self.font_petit.render("Aucune photo", True, BLANC) + self.screen.blit(t, (LARGEUR//2 - t.get_width()//2, HAUTEUR//2)) + else: + # 4 photos en grille 2x2 + w, h = LARGEUR//2 - 20, HAUTEUR//2 - 20 + positions = [(10, 10), (LARGEUR//2+10, 10), (10, HAUTEUR//2+10), (LARGEUR//2+10, HAUTEUR//2+10)] + for i, chemin in enumerate(self.photos[:4]): + if i >= len(positions): + break + try: + # PIL pour redimensionner efficacement les grands JPEG Canon + img = Image.open(chemin).convert('RGB') + img = img.resize((w, h), Image.LANCZOS) + surf = pygame.image.fromstring(img.tobytes(), img.size, 'RGB') + self.screen.blit(surf, positions[i]) + except Exception as e: + print(f"Erreur galerie photo {i}: {e}") + + # Bouton recommencer + btn = pygame.Rect(LARGEUR//2 - 200, HAUTEUR - 120, 400, 100) + pygame.draw.rect(self.screen, ROSE, btn, border_radius=15) + t = self.font_petit.render("RECOMMENCER", True, BLANC) + self.screen.blit(t, (btn.centerx - t.get_width()//2, btn.centery - t.get_height()//2)) + return btn + + def lancer_sequence(self): + """Lance la séquence 4 photos dans un thread.""" + def sequence(): + self.photos = [] + for i in range(NB_PHOTOS): + self.num_photo = i + # Preview + self.preview_actif = True + self.etat = "preview" + time.sleep(1.5) + + # Compte a rebours + self.etat = "compte" + for c in range(DUREE_COMPTE, 0, -1): + self.chiffre_compte = c + time.sleep(1) + + # Flash + capture (miroir reste leve, liveview continue) + self.etat = "capture" + chemin = self.capturer_photo() + if chemin: + self.photos.append(chemin) + print(f"Photo {i+1} : {chemin}") + time.sleep(0.3) + + # Galerie + self.preview_actif = False + self.etat = "galerie" + + threading.Thread(target=sequence, daemon=True).start() + + def run(self): + btn_accueil = None + btn_galerie = None + running = True + + while running: + for event in pygame.event.get(): + if event.type == pygame.QUIT: + running = False + if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: + running = False + if event.type == pygame.MOUSEBUTTONDOWN: + pos = pygame.mouse.get_pos() + if self.etat == "accueil" and btn_accueil and btn_accueil.collidepoint(pos): + self.lancer_sequence() + if self.etat == "galerie" and btn_galerie and btn_galerie.collidepoint(pos): + self.etat = "accueil" + self.photos = [] + + if self.etat == "accueil": + btn_accueil = self.dessiner_accueil() + btn_galerie = None + elif self.etat == "preview": + self.dessiner_preview() + elif self.etat == "compte": + self.dessiner_compte() + elif self.etat == "capture": + self.dessiner_compte() # Reste sur le liveview pendant la capture + elif self.etat == "galerie": + btn_galerie = self.dessiner_galerie() + btn_accueil = None + + pygame.display.flip() + self.clock.tick(30) + + self.preview_actif = False + self.cam.exit() + pygame.quit() + + +if __name__ == "__main__": + app = Photobooth() + app.run()