aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Duerr <chrisduerr@users.noreply.github.com>2018-11-13 06:32:40 +0000
committerGitHub <noreply@github.com>2018-11-13 06:32:40 +0000
commita68ce7a0e4fd231aae721acd6a742c66d581fd37 (patch)
treeafd4dafce9eef52bd509b9e4c32f100cde215ff8
parentd05d16f023b27fc4707478668db73d6860918956 (diff)
downloadalacritty-a68ce7a0e4fd231aae721acd6a742c66d581fd37.tar.gz
alacritty-a68ce7a0e4fd231aae721acd6a742c66d581fd37.zip
Fix specifying 0 lines/columns in config file
The logic during the initial spawning of the window was a bit twisted up. This has been resolved and it should all work properly now, even without a resize event at startup. This fixes #1781.
-rw-r--r--src/display.rs36
1 files changed, 21 insertions, 15 deletions
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,