aboutsummaryrefslogtreecommitdiff
path: root/alacritty/src/event.rs
diff options
context:
space:
mode:
authorKirill Chibisov <contact@kchibisov.com>2023-12-08 01:33:33 +0400
committerGitHub <noreply@github.com>2023-12-08 01:33:33 +0400
commite34762beae5d5b6b261a2a61433761f9dbd45d37 (patch)
tree4b8758a21e6c1639db8a7858eb6d59beb52d7b67 /alacritty/src/event.rs
parentcb03806e2ab85674c45e87e1bb24dfe2fd1a918c (diff)
downloadr-alacritty-e34762beae5d5b6b261a2a61433761f9dbd45d37.tar.gz
r-alacritty-e34762beae5d5b6b261a2a61433761f9dbd45d37.tar.bz2
r-alacritty-e34762beae5d5b6b261a2a61433761f9dbd45d37.zip
Update to crossfont 0.6.0
Diffstat (limited to 'alacritty/src/event.rs')
-rw-r--r--alacritty/src/event.rs32
1 files changed, 20 insertions, 12 deletions
diff --git a/alacritty/src/event.rs b/alacritty/src/event.rs
index f19aa2f9..cf77e309 100644
--- a/alacritty/src/event.rs
+++ b/alacritty/src/event.rs
@@ -1,7 +1,7 @@
//! Process window events.
use std::borrow::Cow;
-use std::cmp::{max, min};
+use std::cmp::min;
use std::collections::{HashMap, HashSet, VecDeque};
use std::error::Error;
use std::ffi::OsStr;
@@ -14,7 +14,7 @@ use std::time::{Duration, Instant};
use std::{env, f32, mem};
use ahash::RandomState;
-use crossfont::{self, Size};
+use crossfont::Size as FontSize;
use glutin::display::{Display as GlutinDisplay, GetGlDisplay};
use log::{debug, error, info, warn};
use raw_window_handle::HasRawDisplayHandle;
@@ -222,7 +222,6 @@ pub struct ActionContext<'a, N, T> {
pub scheduler: &'a mut Scheduler,
pub search_state: &'a mut SearchState,
pub inline_search_state: &'a mut InlineSearchState,
- pub font_size: &'a mut Size,
pub dirty: &'a mut bool,
pub occluded: &'a mut bool,
pub preserve_title: bool,
@@ -464,15 +463,19 @@ impl<'a, N: Notify + 'a, T: EventListener> input::ActionContext<T> for ActionCon
}
}
- fn change_font_size(&mut self, delta: f32) {
- *self.font_size = max(*self.font_size + delta, Size::new(FONT_SIZE_STEP));
- let font = self.config.font.clone().with_size(*self.font_size);
+ fn change_font_size(&mut self, delta: i32) {
+ let new_size = (self.display.font_size.as_px() as i32 + delta).clamp(1, u16::MAX as i32);
+ self.display.font_size = FontSize::from_px(new_size as u16);
+ let font = self.config.font.clone().with_size(self.display.font_size);
self.display.pending_update.set_font(font);
}
fn reset_font_size(&mut self) {
- *self.font_size = self.config.font.size();
- self.display.pending_update.set_font(self.config.font.clone());
+ let scale_factor = self.display.window.scale_factor as f32;
+ self.display.font_size = self.config.font.size().scale(scale_factor);
+ self.display
+ .pending_update
+ .set_font(self.config.font.clone().with_size(self.display.font_size));
}
#[inline]
@@ -1165,7 +1168,8 @@ impl TouchZoom {
// Calculate font change in `FONT_SIZE_STEP` increments.
let delta = (self.distance() - old_distance) * TOUCH_ZOOM_FACTOR + self.fractions;
- let font_delta = (delta.abs() / FONT_SIZE_STEP).floor() * FONT_SIZE_STEP * delta.signum();
+ let font_delta =
+ (delta.abs() / FONT_SIZE_STEP as f32).floor() * FONT_SIZE_STEP as f32 * delta.signum();
self.fractions = delta - font_delta;
font_delta
@@ -1354,13 +1358,17 @@ impl input::Processor<EventProxy, ActionContext<'_, Notifier, EventProxy>> {
match event {
WindowEvent::CloseRequested => self.ctx.terminal.exit(),
WindowEvent::ScaleFactorChanged { scale_factor, .. } => {
- self.ctx.window().scale_factor = scale_factor;
+ let old_scale_factor =
+ mem::replace(&mut self.ctx.window().scale_factor, scale_factor);
let display_update_pending = &mut self.ctx.display.pending_update;
- // Push current font to update its scale factor.
+ // Rescale font size for the new factor.
+ let font_scale = scale_factor as f32 / old_scale_factor as f32;
+ self.ctx.display.font_size = self.ctx.display.font_size.scale(font_scale);
+
let font = self.ctx.config.font.clone();
- display_update_pending.set_font(font.with_size(*self.ctx.font_size));
+ display_update_pending.set_font(font.with_size(self.ctx.display.font_size));
},
WindowEvent::Resized(size) => {
// Ignore resize events to zero in any dimension, to avoid issues with Winit