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 {
288288
         }
289289
 
290290
         // Handle dropdown events
291
+        let was_expanded = self.dropdown_profiles.is_expanded();
291292
         if let Some(action) = self.dropdown_profiles.handle_event(event) {
292293
             match action {
293294
                 DropdownAction::Select(_idx) => {
@@ -312,6 +313,10 @@ impl App {
312313
             }
313314
             return EventResult::Redraw;
314315
         }
316
+        // Check if dropdown state changed (expand/collapse toggle)
317
+        if was_expanded != self.dropdown_profiles.is_expanded() {
318
+            return EventResult::Redraw;
319
+        }
315320
 
316321
         // Handle button clicks
317322
         if self.btn_apply.handle_event(event) {
gardisplay/src/ui/widgets/dropdown.rsmodified
@@ -286,10 +286,9 @@ impl Dropdown {
286286
         renderer.fill_rounded_rect(self.rect, 6.0, bg)?;
287287
         renderer.stroke_rounded_rect(self.rect, 6.0, theme.border, 1.0)?;
288288
 
289
-        // Draw selected item text + dropdown indicator
289
+        // Draw selected item text (left-aligned)
290290
         let text = self.selected_item().unwrap_or("(none)");
291
-        let display_text = format!("{} \u{25BC}", text); // ▼
292
-        let style = TextStyle::new()
291
+        let text_style = TextStyle::new()
293292
             .font_family(&theme.font_family)
294293
             .font_size(theme.font_size)
295294
             .color(theme.foreground)
@@ -297,10 +296,24 @@ impl Dropdown {
297296
         let text_rect = Rect::new(
298297
             self.rect.x + 8,
299298
             self.rect.y,
300
-            self.rect.width - 16,
299
+            self.rect.width - 28, // Leave room for arrow
301300
             self.rect.height,
302301
         );
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)?; // ▼
304317
 
305318
         // Draw expanded list
306319
         if self.expanded {