diff --git a/src/display.rs b/src/display.rs index e170c152..a664b4a2 100644 --- a/src/display.rs +++ b/src/display.rs @@ -152,28 +152,34 @@ impl Display { let dimensions = options.dimensions() .unwrap_or_else(|| config.dimensions()); - debug_assert!(dimensions.columns_u32() > 0); - debug_assert!(dimensions.lines_u32() > 0); - - let width = cell_width as u32 * dimensions.columns_u32(); - let height = cell_height as u32 * dimensions.lines_u32(); - let mut padding_x = f64::from(config.padding().x) * dpr; let mut padding_y = f64::from(config.padding().y) * dpr; - padding_x = padding_x + (f64::from(width) - 2. * padding_x) % f64::from(cell_width) / 2.; - padding_y = padding_y + (f64::from(height) - 2. * padding_y) % f64::from(cell_height) / 2.; - padding_x = padding_x.floor(); - padding_y = padding_y.floor(); - viewport_size = PhysicalSize::new( - f64::from(width) + 2. * padding_x, - f64::from(height) + 2. * padding_y, - ); + if dimensions.columns_u32() > 0 && dimensions.lines_u32() > 0 { + // Calculate new size based on cols/lines specified in config + let width = cell_width as u32 * dimensions.columns_u32(); + let height = cell_height as u32 * dimensions.lines_u32(); + + padding_x = padding_x.floor(); + padding_y = padding_y.floor(); + + viewport_size = PhysicalSize::new( + f64::from(width) + 2. * padding_x, + f64::from(height) + 2. * padding_y, + ); + } else { + // Make sure additional padding is spread evenly + let cw = f64::from(cell_width); + let ch = f64::from(cell_height); + padding_x = (padding_x + (viewport_size.width - 2. * padding_x) % cw / 2.).floor(); + padding_y = (padding_y + (viewport_size.height - 2. * padding_y) % ch / 2.).floor(); + } window.set_inner_size(viewport_size.to_logical(dpr)); renderer.resize(viewport_size, padding_x as f32, padding_y as f32); info!("Cell Size: ({} x {})", cell_width, cell_height); + info!("Padding: ({} x {})", padding_x, padding_y); let size_info = SizeInfo { dpr,