magnifique
This commit is contained in:
@@ -5,7 +5,7 @@ use client_network::{
|
||||
};
|
||||
use crossbeam_channel::{Receiver, Sender};
|
||||
use egui::{
|
||||
Align, CentralPanel, CollapsingHeader, Color32, Context, CornerRadius, Frame, Layout,
|
||||
Align, CentralPanel, CollapsingHeader, Color32, Context, CornerRadius, Frame, Id, Layout,
|
||||
ProgressBar, Response, ScrollArea, SidePanel, Stroke, TopBottomPanel, Ui, Vec2,
|
||||
ViewportCommand,
|
||||
};
|
||||
@@ -372,8 +372,28 @@ impl eframe::App for P2PClientApp {
|
||||
}
|
||||
|
||||
if self.show_choose_server_window {
|
||||
let full_rect = ctx.input(|i| i.screen_rect());
|
||||
let modal_size = egui::vec2(400.0, 160.0);
|
||||
let modal_pos = (full_rect.center() - modal_size * 0.5).to_vec2();
|
||||
|
||||
// 1) blocker (background order) — captures input except modal area
|
||||
egui::Area::new(Id::new("modal_blocker_bg"))
|
||||
.order(egui::Order::Background)
|
||||
.show(ctx, |ui| {
|
||||
let painter = ui.painter();
|
||||
painter.rect_filled(full_rect, 0.0, egui::Color32::from_black_alpha(160));
|
||||
|
||||
// create an interactable that covers the full rect so clicks are eaten
|
||||
// but leave the modal rect uncovered by marking it non-interactive below.
|
||||
let sense = egui::Sense::click_and_drag();
|
||||
ui.allocate_exact_size(full_rect.size(), sense);
|
||||
});
|
||||
egui::Window::new("Choose the server")
|
||||
.resizable(false)
|
||||
.collapsible(false)
|
||||
.title_bar(true)
|
||||
.anchor(egui::Align2::CENTER_CENTER, egui::Vec2::ZERO)
|
||||
.fixed_size(modal_size)
|
||||
.show(ctx, |ui| {
|
||||
ScrollArea::vertical()
|
||||
.auto_shrink([false; 2])
|
||||
|
||||
Reference in New Issue
Block a user