egui icon indicating copy to clipboard operation
egui copied to clipboard

Centering of children in horizontal() is broken

Open Sebastian-0 opened this issue 2 years ago • 0 comments

Describe the bug

In a ui.horizontal(...) block, child components are only centered when they are sorted by decreasing size. See this image for an example: image

In the above example there are six small buttons, one medium sized and one large, they are all in a single horizontal block (see source code below).

To Reproduce Compile and run the following MRE on v0.19.0 or latest master:

use egui::{self, RichText};

fn main() {
    let options = eframe::NativeOptions::default();
    eframe::run_native(
        "Horizontal bug",
        options,
        Box::new(|_cc| Box::new(Test::default()))
    );
}

#[derive(Default)]
struct Test;

impl eframe::App for Test {
    fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
        egui::CentralPanel::default().show(ctx, |ui| {
            ui.horizontal(|ui| {
                ui.button("S");
                ui.button("S");
                ui.button(RichText::new("M").size(24.));
                ui.button("S");
                ui.button("S");
                ui.button(RichText::new("L").size(32.));
                ui.button("S");
                ui.button("S");
            })
        });
    }
}

Expected behavior

All the child components should be centered regardless of their sizes and ordering. If this isn't possible to fix (due to limitations with immediate mode UIs?) the documentation should be clarified regarding its limitations, and point to a workaround. Currently I overcome this by using set_height() but that feels like a brittle solution.

Desktop (please complete the following information):

  • OS: Ubuntu
  • Version: 22.04.1 LTS

Sebastian-0 avatar Sep 02 '22 09:09 Sebastian-0