URI: 
       Fixes issue Text in color menu overlaps hotkey shortcuts #20 - icy_draw - icy_draw is the successor to mystic draw. fork / mirror
  HTML git clone https://git.drkhsh.at/icy_draw.git
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit e3b8bc3cd0cfc714aa3bd7e246c04b1e5efe26a1
   DIR parent f81428a1a205a3267ce9985aae9a0cffae2145cb
  HTML Author: Mike Krüger <mkrueger@posteo.de>
       Date:   Mon, 18 Sep 2023 06:50:26 +0200
       
       Fixes issue Text in color menu overlaps hotkey shortcuts #20
       
       Diffstat:
         M i18n/de/icy_draw.ftl                |       2 +-
         M i18n/en/icy_draw.ftl                |       2 +-
         M src/ui/main_window.rs               |      27 +++++----------------------
         M src/ui/tools/char_table.rs          |      10 ++++++----
         M src/ui/top_bar.rs                   |      38 ++++++++++++++++++++++++++++---
       
       5 files changed, 48 insertions(+), 31 deletions(-)
       ---
   DIR diff --git a/i18n/de/icy_draw.ftl b/i18n/de/icy_draw.ftl
       @@ -88,7 +88,7 @@ menu-zoom-fit_size=Größe anpassen
        menu-show_layer_borders=Ebenenrahmen anzeigen
        menu-show_line_numbers=Zeilennummern anzeigen
        
       -menu-pick_attribute_under_caret=Attribut unter Cursor aufhebn
       +menu-pick_attribute_under_caret=Attribut aufheben
        menu-default_color=Standardfarbe
        menu-toggle_color=Farbe umschalten
        
   DIR diff --git a/i18n/en/icy_draw.ftl b/i18n/en/icy_draw.ftl
       @@ -87,7 +87,7 @@ menu-zoom-fit_size=Fit Size
        menu-show_layer_borders=Show Layer Borders
        menu-show_line_numbers=Show Line Numbers
        
       -menu-pick_attribute_under_caret=Use Attribute Under Caret
       +menu-pick_attribute_under_caret=Pick up Attribute
        menu-default_color=Default Color
        menu-toggle_color=Switch Foreground/Background
        menu-fonts=Fonts
   DIR diff --git a/src/ui/main_window.rs b/src/ui/main_window.rs
       @@ -14,6 +14,8 @@ use crate::{
            ToolTab, TopBar,
        };
        use directories::UserDirs;
       +use eframe::egui::accesskit::Role::MenuItem;
       +use eframe::egui::{Button, Sense};
        use eframe::{
            egui::{self, Key, Response, SidePanel, TextStyle, Ui},
            epaint::{pos2, FontId},
       @@ -496,28 +498,9 @@ pub fn button_with_shortcut(
            label: impl Into<String>,
            shortcut: impl Into<String>,
        ) -> Response {
       -    ui.set_width(280.0);
       -    let btn_re = ui.add_enabled(enabled, egui::Button::new(label.into()));
       -    let font_id = TextStyle::Body.resolve(ui.style());
       -    let color = ui.style().visuals.noninteractive().fg_stroke.color;
       -
       -    let galley = ui.fonts(|f| {
       -        f.layout_job(egui::text::LayoutJob::simple_singleline(
       -            shortcut.into(),
       -            font_id,
       -            color,
       -        ))
       -    });
       -
       -    ui.painter().galley(
       -        pos2(
       -            btn_re.rect.right() - galley.size().x - 2.0,
       -            btn_re.rect.top() + 2.0,
       -        ),
       -        galley,
       -    );
       -
       -    btn_re
       +    let title = label.into();
       +    let mut button = Button::new(title).shortcut_text(shortcut.into());
       +    ui.add_enabled(enabled, button)
        }
        
        impl eframe::App for MainWindow {
   DIR diff --git a/src/ui/tools/char_table.rs b/src/ui/tools/char_table.rs
       @@ -38,8 +38,7 @@ impl CharTableToolWindow {
                if let Some(cur_font) = editor.buffer_view.lock().get_buffer().get_font(font_page) {
                    if cur_font.name != self.font.name {
                        self.font = cur_font.clone();
       -                self.char_table =
       -                    create_font_image(&self.font).with_options(TextureOptions::NEAREST);
       +                self.char_table = create_font_image(&self.font);
                        self.hover_char = None;
                    }
                }
       @@ -62,7 +61,10 @@ impl CharTableToolWindow {
                            let response = ui.interact(rect, id, Sense::click());
                            ui.painter().image(
                                self.char_table.texture_id(ui.ctx()),
       -                        rect,
       +                        Rect::from_min_size(
       +                            Pos2::new(rect.left(), rect.top()),
       +                            Vec2::new(width, height),
       +                        ),
                                Rect::from_min_max(Pos2::new(0.0, 0.0), Pos2::new(1.0, 1.0)),
                                Color32::WHITE,
                            );
       @@ -150,7 +152,7 @@ fn create_font_image(font: &BitFont) -> RetainedImage {
                    ),
                );
            }
       -    create_retained_image(&buffer)
       +    create_retained_image(&buffer).with_options(TextureOptions::NEAREST)
        }
        
        fn create_hover_image(font: &BitFont, ch: char) -> RetainedImage {
   DIR diff --git a/src/ui/top_bar.rs b/src/ui/top_bar.rs
       @@ -58,11 +58,15 @@ impl MainWindow {
                    }
        
                    ui.menu_button(fl!(crate::LANGUAGE_LOADER, "menu-file"), |ui| {
       +                ui.set_min_width(300.0);
       +
                        self.commands.new_file.ui(ui, &mut result);
                        self.commands.open_file.ui(ui, &mut result);
                        ui.menu_button(
                            fl!(crate::LANGUAGE_LOADER, "menu-open_recent"),
                            |ui| unsafe {
       +                        ui.style_mut().wrap = Some(false);
       +
                                let get_recent_files = SETTINGS.get_recent_files();
                                if !get_recent_files.is_empty() {
                                    for file in get_recent_files.iter().rev() {
       @@ -92,7 +96,8 @@ impl MainWindow {
                    });
        
                    ui.menu_button(fl!(crate::LANGUAGE_LOADER, "menu-edit"), |ui| {
       -                ui.set_width(250.0);
       +                ui.style_mut().wrap = Some(false);
       +                ui.set_min_width(200.0);
                        if let Some(doc) = self.get_active_document() {
                            if doc.lock().unwrap().can_undo() {
                                let enabled = doc.lock().unwrap().can_undo();
       @@ -153,6 +158,9 @@ impl MainWindow {
                        }
        
                        ui.menu_button(fl!(crate::LANGUAGE_LOADER, "menu-paste-as"), |ui| {
       +                    ui.style_mut().wrap = Some(false);
       +                    ui.set_min_width(200.0);
       +
                            let button = button_with_shortcut(
                                ui,
                                pop_data(BUFFER_DATA).is_some(),
       @@ -177,6 +185,9 @@ impl MainWindow {
                        });
                        ui.separator();
                        ui.menu_button(fl!(crate::LANGUAGE_LOADER, "menu-area_operations"), |ui| {
       +                    ui.style_mut().wrap = Some(false);
       +                    ui.set_min_width(300.0);
       +
                            self.commands
                                .justify_line_left
                                .ui_enabled(ui, has_buffer, &mut result);
       @@ -265,6 +276,8 @@ impl MainWindow {
                    });
        
                    ui.menu_button(fl!(crate::LANGUAGE_LOADER, "menu-selection"), |ui| {
       +                ui.style_mut().wrap = Some(false);
       +                ui.set_min_width(200.0);
                        self.commands
                            .select_all
                            .ui_enabled(ui, has_buffer, &mut result);
       @@ -292,6 +305,8 @@ impl MainWindow {
                        self.commands.crop.ui_enabled(ui, has_buffer, &mut result);
                    });
                    ui.menu_button(fl!(crate::LANGUAGE_LOADER, "menu-colors"), |ui| {
       +                ui.style_mut().wrap = Some(false);
       +                ui.set_min_width(300.0);
                        if has_buffer {
                            if let Some(pane) = self.get_active_pane() {
                                if let Ok(doc) = &mut pane.doc.lock() {
       @@ -299,6 +314,9 @@ impl MainWindow {
                                    let lock = &mut editor.buffer_view.lock();
        
                                    ui.menu_button(fl!(crate::LANGUAGE_LOADER, "menu-color-mode"), |ui| {
       +                                ui.style_mut().wrap = Some(false);
       +                                ui.set_min_width(240.0);
       +
                                        if ui
                                            .selectable_label(
                                                lock.get_buffer().buffer_type == BufferType::NoLimits,
       @@ -367,8 +385,8 @@ impl MainWindow {
                                    });
                                }
                            }
       +                    ui.separator();
                        }
       -                ui.separator();
                        self.commands
                            .select_palette
                            .ui_enabled(ui, has_buffer, &mut result);
       @@ -388,6 +406,8 @@ impl MainWindow {
                            .ui_enabled(ui, has_buffer, &mut result);
                    });
                    ui.menu_button(fl!(crate::LANGUAGE_LOADER, "menu-fonts"), |ui| {
       +                ui.style_mut().wrap = Some(false);
       +                ui.set_min_width(220.0);
                        self.commands
                            .open_font_selector
                            .ui_enabled(ui, has_buffer, &mut result);
       @@ -399,7 +419,8 @@ impl MainWindow {
                        self.commands.open_tdf_directory.ui(ui, &mut result);
                    });
                    ui.menu_button(fl!(crate::LANGUAGE_LOADER, "menu-view"), |ui| {
       -                ui.set_width(250.);
       +                ui.style_mut().wrap = Some(false);
       +                ui.set_min_width(320.0);
                        ui.menu_button(
                            fl!(
                                crate::LANGUAGE_LOADER,
       @@ -410,6 +431,9 @@ impl MainWindow {
                                )
                            ),
                            |ui| {
       +                        ui.style_mut().wrap = Some(false);
       +                        ui.set_min_width(270.0);
       +
                                self.commands.zoom_reset.ui(ui, &mut result);
                                self.commands.zoom_in.ui(ui, &mut result);
        
       @@ -465,6 +489,8 @@ impl MainWindow {
                        );
        
                        ui.menu_button(fl!(crate::LANGUAGE_LOADER, "menu-guides"), |ui| {
       +                    ui.style_mut().wrap = Some(false);
       +                    ui.set_min_width(200.0);
                            if ui.button("Smallscale 80x25").clicked() {
                                result = Some(Message::SetGuide(80, 25));
                                ui.close_menu();
       @@ -492,6 +518,8 @@ impl MainWindow {
                        });
        
                        ui.menu_button(fl!(crate::LANGUAGE_LOADER, "menu-raster"), |ui| {
       +                    ui.style_mut().wrap = Some(false);
       +                    ui.set_min_width(100.0);
                            if ui.button("1x1").clicked() {
                                result = Some(Message::SetRaster(1, 1));
                                ui.close_menu();
       @@ -547,6 +575,8 @@ impl MainWindow {
                    unsafe {
                        if !PLUGINS.is_empty() {
                            ui.menu_button(fl!(crate::LANGUAGE_LOADER, "menu-plugins"), |ui| {
       +                        ui.style_mut().wrap = Some(false);
       +                        ui.set_min_width(250.0);
                                for (i, p) in PLUGINS.iter().enumerate() {
                                    if ui
                                        .add_enabled(
       @@ -567,6 +597,8 @@ impl MainWindow {
                    }
        
                    ui.menu_button(fl!(crate::LANGUAGE_LOADER, "menu-help"), |ui| {
       +                ui.style_mut().wrap = Some(false);
       +                ui.set_min_width(170.0);
                        let r = ui.hyperlink_to(
                            fl!(crate::LANGUAGE_LOADER, "menu-discuss"),
                            "https://github.com/mkrueger/icy_draw/discussions",