From 75cf7edc965d7dceb2a7a25816cb900e99c892ef Mon Sep 17 00:00:00 2001 From: ardocrat Date: Sat, 26 Oct 2024 23:23:39 +0300 Subject: [PATCH] fix: modal padding and window border on desktop --- src/gui/app.rs | 44 +++++++++++++++++++++--------------------- src/gui/colors.rs | 4 ++-- src/gui/views/modal.rs | 16 ++++++++++----- 3 files changed, 35 insertions(+), 29 deletions(-) diff --git a/src/gui/app.rs b/src/gui/app.rs index 6e5d6d1..6cef329 100644 --- a/src/gui/app.rs +++ b/src/gui/app.rs @@ -14,7 +14,7 @@ use std::sync::atomic::{AtomicBool, Ordering}; use lazy_static::lazy_static; -use egui::{Align, Context, CursorIcon, Layout, Modifiers, ResizeDirection, Rounding, UiBuilder, ViewportCommand}; +use egui::{Align, Context, CursorIcon, Layout, Modifiers, ResizeDirection, Rounding, Stroke, UiBuilder, ViewportCommand}; use egui::epaint::{RectShape}; use egui::os::OperatingSystem; @@ -114,7 +114,7 @@ impl App { } else { self.window_title_ui(ui, is_fullscreen); ui.add_space(-1.0); - Self::title_panel_bg(ui, is_fullscreen); + Self::title_panel_bg(ui); self.content.ui(ui, &self.platform); } } else { @@ -138,29 +138,24 @@ impl App { /// Draw mobile platform window content. fn mobile_window_ui(&mut self, ui: &mut egui::Ui) { - Self::title_panel_bg(ui, true); + Self::title_panel_bg(ui); self.content.ui(ui, &self.platform); } /// Draw desktop platform window content. fn desktop_window_ui(&mut self, ui: &mut egui::Ui, is_fullscreen: bool) { - Self::title_panel_bg(ui, is_fullscreen); - let rect = ui.max_rect(); - let content_bg_rect = { - let mut r = rect.clone(); + let mut r = ui.max_rect(); if !is_fullscreen { r = r.shrink(Content::WINDOW_FRAME_MARGIN); } - let top = Content::WINDOW_TITLE_HEIGHT + TitlePanel::HEIGHT + if !is_fullscreen { - Content::WINDOW_FRAME_MARGIN - } else { - 0.0 - }; - r.min.y = top; + r.min.y += Content::WINDOW_TITLE_HEIGHT + TitlePanel::HEIGHT; r }; - let content_bg = RectShape::filled(content_bg_rect, Rounding::ZERO, Colors::fill_lite()); + let content_bg = RectShape::new(content_bg_rect, + Rounding::ZERO, + Colors::fill_lite(), + View::default_stroke()); // Draw content background. ui.painter().add(content_bg); @@ -172,6 +167,10 @@ impl App { ui.allocate_new_ui(UiBuilder::new().max_rect(content_rect), |ui| { // Draw window title. self.window_title_ui(ui, is_fullscreen); + ui.add_space(-1.0); + + // Draw title panel background. + Self::title_panel_bg(ui); let content_rect = { let mut rect = ui.max_rect(); @@ -199,15 +198,11 @@ impl App { } /// Draw title panel background. - fn title_panel_bg(ui: &mut egui::Ui, is_fullscreen: bool) { + fn title_panel_bg(ui: &mut egui::Ui) { let title_rect = { let mut rect = ui.max_rect(); if View::is_desktop() { - let is_mac = OperatingSystem::from_target_os() == OperatingSystem::Mac; - if !is_mac && !is_fullscreen { - rect = rect.shrink(Content::WINDOW_FRAME_MARGIN) - } - rect.min.y += Content::WINDOW_TITLE_HEIGHT; + rect.min.y += Content::WINDOW_TITLE_HEIGHT - 0.5; } rect.max.y = rect.min.y + View::get_top_inset() + TitlePanel::HEIGHT; rect @@ -224,8 +219,13 @@ impl App { rect }; + let title_bg_rect = { + let mut r = title_rect.clone(); + r.max.y += TitlePanel::HEIGHT - 1.0; + r + }; let is_mac = OperatingSystem::from_target_os() == OperatingSystem::Mac; - let window_title_bg = RectShape::filled(title_rect, if is_fullscreen || is_mac { + let window_title_bg = RectShape::new(title_bg_rect, if is_fullscreen || is_mac { Rounding::ZERO } else { Rounding { @@ -234,7 +234,7 @@ impl App { sw: 0.0, se: 0.0, } - }, Colors::yellow_dark()); + }, Colors::yellow_dark(), Stroke::new(1.0, Colors::STROKE)); // Draw title background. ui.painter().add(window_title_bg); diff --git a/src/gui/colors.rs b/src/gui/colors.rs index e56d3c9..58c4518 100644 --- a/src/gui/colors.rs +++ b/src/gui/colors.rs @@ -64,7 +64,6 @@ const TITLE_DARK: Color32 = Color32::from_gray(205); const GRAY: Color32 = Color32::from_gray(120); const GRAY_DARK: Color32 = Color32::from_gray(145); -const STROKE: Color32 = Color32::from_gray(200); const STROKE_DARK: Color32 = Color32::from_gray(50); const INACTIVE_TEXT: Color32 = Color32::from_gray(150); @@ -86,6 +85,7 @@ fn use_dark() -> bool { impl Colors { pub const TRANSPARENT: Color32 = Color32::from_rgba_premultiplied(0, 0, 0, 0); + pub const STROKE: Color32 = Color32::from_gray(200); pub fn white_or_black(black_in_white: bool) -> Color32 { if use_dark() { @@ -219,7 +219,7 @@ impl Colors { if use_dark() { STROKE_DARK } else { - STROKE + Self::STROKE } } diff --git a/src/gui/views/modal.rs b/src/gui/views/modal.rs index 485d74d..b1089d4 100644 --- a/src/gui/views/modal.rs +++ b/src/gui/views/modal.rs @@ -185,10 +185,11 @@ impl Modal { }); // Setup background rect. - let bg_rect = if View::is_desktop() && !is_fullscreen { + let bg_rect = if View::is_desktop() { let mut r = ctx.screen_rect(); - if OperatingSystem::Mac != OperatingSystem::from_target_os() { - r = r.shrink(Content::WINDOW_FRAME_MARGIN); + let is_mac = OperatingSystem::Mac == OperatingSystem::from_target_os(); + if !is_mac && !is_fullscreen { + r = r.shrink(Content::WINDOW_FRAME_MARGIN - 1.0); } r.min.y += Content::WINDOW_TITLE_HEIGHT; r @@ -253,12 +254,17 @@ impl Modal { }; let x_align = View::get_left_inset() - View::get_right_inset(); + let is_mac = OperatingSystem::Mac == OperatingSystem::from_target_os(); let extra_y = if View::is_desktop() { - Content::WINDOW_TITLE_HEIGHT - Self::DEFAULT_MARGIN / 2.0 + Content::WINDOW_TITLE_HEIGHT + if !is_mac { + Content::WINDOW_FRAME_MARGIN + } else { + 0.0 + } } else { 0.0 }; - let y_align = View::get_top_inset() + Self::DEFAULT_MARGIN + extra_y; + let y_align = View::get_top_inset() + Self::DEFAULT_MARGIN / 2.0 + extra_y; let offset = match self.position { ModalPosition::CenterTop => Vec2::new(x_align, y_align),