gardesk/gardisplay / 089d473

Browse files

fix dropdown arrow positioning and click handling

Authored by mfwolffe <wolffemf@dukes.jmu.edu>
SHA
089d47304bdd08bcbf5169ad76ab9743f7bf8f54
Parents
15e78ec
Tree
4ded523

2 changed files

StatusFile+-
M gardisplay/src/app.rs 5 0
M gardisplay/src/ui/widgets/dropdown.rs 18 5
gardisplay/src/app.rsmodified
@@ -288,6 +288,7 @@ impl App {
288
         }
288
         }
289
 
289
 
290
         // Handle dropdown events
290
         // Handle dropdown events
291
+        let was_expanded = self.dropdown_profiles.is_expanded();
291
         if let Some(action) = self.dropdown_profiles.handle_event(event) {
292
         if let Some(action) = self.dropdown_profiles.handle_event(event) {
292
             match action {
293
             match action {
293
                 DropdownAction::Select(_idx) => {
294
                 DropdownAction::Select(_idx) => {
@@ -312,6 +313,10 @@ impl App {
312
             }
313
             }
313
             return EventResult::Redraw;
314
             return EventResult::Redraw;
314
         }
315
         }
316
+        // Check if dropdown state changed (expand/collapse toggle)
317
+        if was_expanded != self.dropdown_profiles.is_expanded() {
318
+            return EventResult::Redraw;
319
+        }
315
 
320
 
316
         // Handle button clicks
321
         // Handle button clicks
317
         if self.btn_apply.handle_event(event) {
322
         if self.btn_apply.handle_event(event) {
gardisplay/src/ui/widgets/dropdown.rsmodified
@@ -286,10 +286,9 @@ impl Dropdown {
286
         renderer.fill_rounded_rect(self.rect, 6.0, bg)?;
286
         renderer.fill_rounded_rect(self.rect, 6.0, bg)?;
287
         renderer.stroke_rounded_rect(self.rect, 6.0, theme.border, 1.0)?;
287
         renderer.stroke_rounded_rect(self.rect, 6.0, theme.border, 1.0)?;
288
 
288
 
289
-        // Draw selected item text + dropdown indicator
289
+        // Draw selected item text (left-aligned)
290
         let text = self.selected_item().unwrap_or("(none)");
290
         let text = self.selected_item().unwrap_or("(none)");
291
-        let display_text = format!("{} \u{25BC}", text); // ▼
291
+        let text_style = TextStyle::new()
292
-        let style = TextStyle::new()
293
             .font_family(&theme.font_family)
292
             .font_family(&theme.font_family)
294
             .font_size(theme.font_size)
293
             .font_size(theme.font_size)
295
             .color(theme.foreground)
294
             .color(theme.foreground)
@@ -297,10 +296,24 @@ impl Dropdown {
297
         let text_rect = Rect::new(
296
         let text_rect = Rect::new(
298
             self.rect.x + 8,
297
             self.rect.x + 8,
299
             self.rect.y,
298
             self.rect.y,
300
-            self.rect.width - 16,
299
+            self.rect.width - 28, // Leave room for arrow
301
             self.rect.height,
300
             self.rect.height,
302
         );
301
         );
303
-        renderer.text_in_rect(&display_text, text_rect, &style)?;
302
+        renderer.text_in_rect(text, text_rect, &text_style)?;
303
+
304
+        // Draw dropdown arrow (fixed position on right)
305
+        let arrow_style = TextStyle::new()
306
+            .font_family(&theme.font_family)
307
+            .font_size(theme.font_size)
308
+            .color(theme.foreground)
309
+            .align(TextAlign::Center);
310
+        let arrow_rect = Rect::new(
311
+            self.rect.x + self.rect.width as i32 - 20,
312
+            self.rect.y,
313
+            16,
314
+            self.rect.height,
315
+        );
316
+        renderer.text_in_rect("\u{25BC}", arrow_rect, &arrow_style)?; // ▼
304
 
317
 
305
         // Draw expanded list
318
         // Draw expanded list
306
         if self.expanded {
319
         if self.expanded {