UMTS at Teleco 3 недель назад
Родитель
Сommit
c8b01b8047
3 измененных файлов с 39 добавлено и 90 удалено
  1. 4 67
      src/kioskui/app.rs
  2. 4 15
      src/kioskui/dashboard.rs
  3. 31 8
      src/kioskui/login.rs

+ 4 - 67
src/kioskui/app.rs

@@ -143,74 +143,17 @@ impl eframe::App for KioskApp {
             let want_fullscreen = if self.config.ui.windowed_mode { false } else { self.config.ui.fullscreen };
             if want_fullscreen {
                 ctx.send_viewport_cmd(egui::ViewportCommand::Fullscreen(true));
-<<<<<<< HEAD
-<<<<<<< Updated upstream
-            }
-
-        // Enforce fullscreen again after a short delay (to handle some window managers)
-        if !self.delayed_fullscreen_done && self.startup_time.elapsed().as_secs_f32() > 1.0 {
-            if self.config.ui.fullscreen {
-                ctx.send_viewport_cmd(egui::ViewportCommand::Fullscreen(true));
-=======
-                ctx.send_viewport_cmd(egui::ViewportCommand::Decorations(false));
-            } else {
-                // Ensure we are not in fullscreen and re-enable window decorations (borders, title bar)
-                ctx.send_viewport_cmd(egui::ViewportCommand::Fullscreen(false));
-                ctx.send_viewport_cmd(egui::ViewportCommand::Decorations(true));
-                // Ask the window manager to maximize the window
-                ctx.send_viewport_cmd(egui::ViewportCommand::Maximized(true));
-            }
-
-=======
                 ctx.send_viewport_cmd(egui::ViewportCommand::Decorations(false));
-                // On Windows, ensure top-left and ask maximize as fallback
-                #[cfg(target_os = "windows")]
-                {
-                    ctx.send_viewport_cmd(egui::ViewportCommand::OuterPosition(egui::pos2(0.0, 0.0)));
-                    ctx.send_viewport_cmd(egui::ViewportCommand::Maximized(true));
-                }
             } else {
-                // Ensure we are not in fullscreen and re-enable window decorations (borders, title bar)
                 ctx.send_viewport_cmd(egui::ViewportCommand::Fullscreen(false));
                 ctx.send_viewport_cmd(egui::ViewportCommand::Decorations(true));
-                // Ask the window manager to maximize the window
                 ctx.send_viewport_cmd(egui::ViewportCommand::Maximized(true));
             }
-
->>>>>>> 18c79d3cb731cabd4618de1c87e3cf53a4c82777
-            // Enforce desired mode again after a short delay (to handle some window managers)
-            if !self.delayed_fullscreen_done && self.startup_time.elapsed().as_secs_f32() > 1.0 {
-                if want_fullscreen {
-                    ctx.send_viewport_cmd(egui::ViewportCommand::Fullscreen(true));
-                    ctx.send_viewport_cmd(egui::ViewportCommand::Decorations(false));
-<<<<<<< HEAD
-=======
-                    #[cfg(target_os = "windows")]
-                    {
-                        ctx.send_viewport_cmd(egui::ViewportCommand::OuterPosition(egui::pos2(0.0, 0.0)));
-                        ctx.send_viewport_cmd(egui::ViewportCommand::Maximized(true));
-                    }
->>>>>>> 18c79d3cb731cabd4618de1c87e3cf53a4c82777
-                } else {
-                    ctx.send_viewport_cmd(egui::ViewportCommand::Fullscreen(false));
-                    ctx.send_viewport_cmd(egui::ViewportCommand::Decorations(true));
-                    ctx.send_viewport_cmd(egui::ViewportCommand::Maximized(true));
-                }
-                self.delayed_fullscreen_done = true;
-<<<<<<< HEAD
->>>>>>> Stashed changes
-            }
-            self.delayed_fullscreen_done = true;
-        }
-<<<<<<< Updated upstream
-=======
-            }
->>>>>>> 18c79d3cb731cabd4618de1c87e3cf53a4c82777
             self.window_setup_done = true;
-=======
+        }
 
-        // Periodically re-assert desired window mode in case the OS/window manager changed it.
-        if self.last_enforce_check.elapsed().as_secs_f32() > 3.0 {
+        // Enforce desired mode again after a short delay (to handle some window managers)
+        if !self.delayed_fullscreen_done && self.startup_time.elapsed().as_secs_f32() > 1.0 {
             let want_fullscreen = if self.config.ui.windowed_mode { false } else { self.config.ui.fullscreen };
             if want_fullscreen {
                 ctx.send_viewport_cmd(egui::ViewportCommand::Fullscreen(true));
@@ -220,8 +163,7 @@ impl eframe::App for KioskApp {
                 ctx.send_viewport_cmd(egui::ViewportCommand::Decorations(true));
                 ctx.send_viewport_cmd(egui::ViewportCommand::Maximized(true));
             }
-            self.last_enforce_check = std::time::Instant::now();
->>>>>>> Stashed changes
+            self.delayed_fullscreen_done = true;
         }
 
         // Periodically re-assert desired window mode in case the OS/window manager changed it.
@@ -230,11 +172,6 @@ impl eframe::App for KioskApp {
             if want_fullscreen {
                 ctx.send_viewport_cmd(egui::ViewportCommand::Fullscreen(true));
                 ctx.send_viewport_cmd(egui::ViewportCommand::Decorations(false));
-                #[cfg(target_os = "windows")]
-                {
-                    ctx.send_viewport_cmd(egui::ViewportCommand::OuterPosition(egui::pos2(0.0, 0.0)));
-                    ctx.send_viewport_cmd(egui::ViewportCommand::Maximized(true));
-                }
             } else {
                 ctx.send_viewport_cmd(egui::ViewportCommand::Fullscreen(false));
                 ctx.send_viewport_cmd(egui::ViewportCommand::Decorations(true));

+ 4 - 15
src/kioskui/dashboard.rs

@@ -37,16 +37,9 @@ impl KioskDashboard {
         let header_height = unit_height * 0.5;
         let row_height = unit_height;
 
-<<<<<<< HEAD
-        // Kiosk-only header/button text should respect kiosk font_size
-        let btn_font_size = config.font_size.max(12.0);
-        let label_font_size = (config.font_size * 0.8).max(12.0);
-=======
-        // Get text scaling factor
-        let text_scale = ui.ctx().pixels_per_point();
-        let btn_font_size = 14.0 * text_scale;
-        let label_font_size = 16.0 * text_scale;
->>>>>>> 18c79d3cb731cabd4618de1c87e3cf53a4c82777
+    // Kiosk-only header/button text should respect kiosk font_size
+    let btn_font_size = config.font_size.max(12.0);
+    let label_font_size = (config.font_size * 0.8).max(12.0);
 
         // --- Row 1: Header (Logout, OSK) ---
         ui.allocate_ui_at_rect(
@@ -137,11 +130,7 @@ impl KioskDashboard {
     ) {
         let width = ui.available_width();
 
-<<<<<<< HEAD
-        // Dashboard grid headings/buttons use base sizes scaled by global DPI
-=======
-        // Get text scaling factor
->>>>>>> 18c79d3cb731cabd4618de1c87e3cf53a4c82777
+    // Dashboard grid headings/buttons use base sizes scaled by global DPI
         let text_scale = ui.ctx().pixels_per_point();
         let base_font_size = 14.0 * text_scale;
         let heading_size = 24.0 * text_scale;

+ 31 - 8
src/kioskui/login.rs

@@ -263,8 +263,14 @@ impl KioskLoginView {
         ui.add_space(20.0);
         ui.spinner();
         ui.add_space(20.0);
-        
-        if ui.add_sized(egui::vec2(150.0, self.ui_settings.button_height), egui::Button::new(egui::RichText::new("Cancel").size(self.ui_settings.font_size * 0.8))).clicked() {
+
+        // Ensure the Cancel button never goes off-screen: shrink if needed
+        let mut cancel_h = self.ui_settings.button_height;
+        let avail_h = ui.available_height();
+        if avail_h < cancel_h + 12.0 {
+            cancel_h = (avail_h - 12.0).max(36.0);
+        }
+        if ui.add_sized(egui::vec2(150.0, cancel_h), egui::Button::new(egui::RichText::new("Cancel").size((self.ui_settings.font_size * 0.8).min(cancel_h * 0.6)))).clicked() {
             self.is_rfid_mode = false;
             self.rfid_input.clear();
             self.error_message = None;
@@ -300,8 +306,13 @@ impl KioskLoginView {
             }
             
             let result = ui.horizontal(|ui| {
-                // Align buttons to bottom/center with larger size
-                let btn_size = egui::vec2(150.0, self.ui_settings.button_height);
+                // Align buttons to bottom/center; shrink if needed to keep on-screen
+                let mut btn_h = self.ui_settings.button_height;
+                let avail_h = ui.available_height();
+                if avail_h < btn_h + 12.0 {
+                    btn_h = (avail_h - 12.0).max(36.0);
+                }
+                let btn_size = egui::vec2(150.0, btn_h);
                 let total_width = btn_size.x * 2.0 + 20.0; // 2 buttons + spacing
                 let available_width = ui.available_width();
                 let margin = (available_width - total_width) / 2.0;
@@ -310,7 +321,7 @@ impl KioskLoginView {
                     ui.add_space(margin);
                 }
                 
-                if ui.add_sized(btn_size, egui::Button::new(egui::RichText::new("Back").size(self.ui_settings.font_size * 0.8))).clicked() {
+                if ui.add_sized(btn_size, egui::Button::new(egui::RichText::new("Back").size((self.ui_settings.font_size * 0.8).min(btn_h * 0.6)))).clicked() {
                     self.selected_user = None;
                     self.pin_input.clear();
                     self.error_message = None;
@@ -318,7 +329,7 @@ impl KioskLoginView {
                 
                 ui.add_space(20.0);
 
-                if ui.add_sized(btn_size, egui::Button::new(egui::RichText::new("Login").size(self.ui_settings.font_size * 0.8))).clicked() {
+                if ui.add_sized(btn_size, egui::Button::new(egui::RichText::new("Login").size((self.ui_settings.font_size * 0.8).min(btn_h * 0.6)))).clicked() {
                     return self.attempt_login(client);
                 }
                 
@@ -343,7 +354,18 @@ impl KioskLoginView {
             ["CLR", "0", "DEL"],
         ];
 
-        let btn_size = egui::vec2(80.0, 80.0); // Large touch targets
+        // Adaptive key size to ensure keypad never goes off-screen
+        let rows = 4.0;
+        let cols = 3.0;
+        let spacing = ui.style().spacing.item_spacing;
+        let avail_h = ui.available_height();
+        let avail_w = ui.available_width();
+        // Reserve space for bottom action buttons and padding after OSK
+        let reserved_bottom = self.ui_settings.button_height + 120.0;
+        let max_h_per_key = ((avail_h - reserved_bottom) - spacing.y * (rows - 1.0)) / rows;
+        let max_w_per_key = (avail_w - spacing.x * (cols - 1.0)) / cols;
+        let key_edge = max_h_per_key.min(max_w_per_key).clamp(48.0, 80.0);
+        let btn_size = egui::vec2(key_edge, key_edge);
 
         ui.vertical_centered(|ui| {
             for row in keys {
@@ -357,7 +379,8 @@ impl KioskLoginView {
                     }
 
                     for key in row {
-                        if ui.add_sized(btn_size, egui::Button::new(egui::RichText::new(key).size(32.0))).clicked() {
+                        let key_font = (self.ui_settings.font_size * 0.8).min(btn_size.y * 0.6).max(16.0);
+                        if ui.add_sized(btn_size, egui::Button::new(egui::RichText::new(key).size(key_font))).clicked() {
                             match key {
                                 "CLR" => self.pin_input.clear(),
                                 "DEL" => { self.pin_input.pop(); },