@@ -27,15 +27,23 @@ pub struct MainComponent {
2727}
2828
2929impl MainComponent {
30- pub fn new ( finterprint : Arc < Fingerprint > ) -> Self {
30+ pub fn new ( finterprint : Arc < Fingerprint > , info : & FrameworkInfo ) -> Self {
31+ let mut adjustable_panels: Vec < Box < dyn AdjustableComponent > > = Vec :: new ( ) ;
3132 let charge_panel = Box :: new ( ChargePanelComponent :: new ( ) ) ;
32- let brightness_panel = Box :: new ( BrightnessPanelComponent :: new ( finterprint) ) ;
33+
34+ adjustable_panels. push ( charge_panel) ;
35+
36+ if Self :: is_brightness_supported ( info) {
37+ let brightness_panel = Box :: new ( BrightnessPanelComponent :: new ( finterprint) ) ;
38+
39+ adjustable_panels. push ( brightness_panel) ;
40+ }
3341
3442 Self {
3543 privacy_panel : PrivacyPanelComponent ,
3644 smbios_panel : SmbiosPanelComponent ,
3745 pd_ports_panel : PdPortsPanelComponent :: new ( ) ,
38- adjustable_panels : vec ! [ charge_panel , brightness_panel ] ,
46+ adjustable_panels,
3947 selected_panel : None ,
4048 }
4149 }
@@ -60,6 +68,30 @@ impl MainComponent {
6068 self . selected_panel = Some ( 0 ) ;
6169 }
6270 }
71+
72+ fn render_privacy_and_smbios_panels (
73+ & mut self ,
74+ frame : & mut Frame ,
75+ area : Rect ,
76+ theme : & Theme ,
77+ info : & FrameworkInfo ,
78+ ) {
79+ let [ privacy_panel_area, smbios_panel_area] =
80+ Layout :: horizontal ( [ Constraint :: Min ( 0 ) , Constraint :: Min ( 0 ) ] ) . areas ( area) ;
81+
82+ // Privacy panel
83+ self . privacy_panel
84+ . render ( frame, privacy_panel_area, theme, info) ;
85+
86+ // SMBIOS panel
87+ self . smbios_panel
88+ . render ( frame, smbios_panel_area, theme, info) ;
89+ }
90+
91+ fn is_brightness_supported ( info : & FrameworkInfo ) -> bool {
92+ // NOTE: modifiying FP and KB brightness is not supported on FW 12
93+ info. platform != Some ( framework_lib:: smbios:: Platform :: Framework12IntelGen13 )
94+ }
6395}
6496
6597impl Component for MainComponent {
@@ -80,25 +112,29 @@ impl Component for MainComponent {
80112 Layout :: vertical ( [ Constraint :: Max ( 15 ) , Constraint :: Min ( 0 ) ] ) . areas ( area) ;
81113 let [ charge_panel_area, top_right_area] =
82114 Layout :: horizontal ( [ Constraint :: Min ( 0 ) , Constraint :: Min ( 0 ) ] ) . areas ( top_area) ;
83- let [ brightness_panel_area, privacy_and_smbios_panels_area] =
84- Layout :: vertical ( [ Constraint :: Min ( 7 ) , Constraint :: Min ( 7 ) ] ) . areas ( top_right_area) ;
85- let [ privacy_panel_area, smbios_panel_area] =
86- Layout :: horizontal ( [ Constraint :: Min ( 0 ) , Constraint :: Min ( 0 ) ] )
87- . areas ( privacy_and_smbios_panels_area) ;
88115
89116 // Charge panel
90117 self . adjustable_panels [ 0 ] . render ( frame, charge_panel_area, theme, info) ;
91118
92- // Brightness panel (top of right_area)
93- self . adjustable_panels [ 1 ] . render ( frame, brightness_panel_area, theme, info) ;
94-
95- // Privacy panel
96- self . privacy_panel
97- . render ( frame, privacy_panel_area, theme, info) ;
98-
99- // SMBIOS panel
100- self . smbios_panel
101- . render ( frame, smbios_panel_area, theme, info) ;
119+ // Show brightness panel only on supported platforms
120+ if Self :: is_brightness_supported ( info) {
121+ let [ brightness_panel_area, privacy_and_smbios_panels_area] =
122+ Layout :: vertical ( [ Constraint :: Min ( 7 ) , Constraint :: Min ( 7 ) ] ) . areas ( top_right_area) ;
123+
124+ // Brightness panel (top of right_area)
125+ self . adjustable_panels [ 1 ] . render ( frame, brightness_panel_area, theme, info) ;
126+
127+ // Privacy and SMBIOS panels
128+ self . render_privacy_and_smbios_panels (
129+ frame,
130+ privacy_and_smbios_panels_area,
131+ theme,
132+ info,
133+ ) ;
134+ } else {
135+ // Privacy and SMBIOS panels
136+ self . render_privacy_and_smbios_panels ( frame, top_right_area, theme, info) ;
137+ }
102138
103139 // PD Ports panel (bottom of right_area)
104140 self . pd_ports_panel
0 commit comments