mirror of
https://github.com/alacritty/alacritty.git
synced 2024-11-18 13:55:23 -05:00
Scale IME position by hidpi_factor
Since the IME was positioned using physical coordinates, the location would be incorrect with monitors using a DPR other than 1.0. This has been resolved by converting the physical position to a logical position using the methods built into winit. Fixes #2056.
This commit is contained in:
parent
851e77383e
commit
879ea05b66
2 changed files with 16 additions and 11 deletions
|
@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
- Remove error message when reloading an empty config
|
- Remove error message when reloading an empty config
|
||||||
- Allow disabling URL launching by setting the value of `mouse.url.launcher` to `None`
|
- Allow disabling URL launching by setting the value of `mouse.url.launcher` to `None`
|
||||||
- Corrected the `window.decorations` config documentation for macOS
|
- Corrected the `window.decorations` config documentation for macOS
|
||||||
|
- Fix IME position on HiDPI displays
|
||||||
|
|
||||||
## Version 0.2.7
|
## Version 0.2.7
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ use std::sync::mpsc;
|
||||||
use std::f64;
|
use std::f64;
|
||||||
|
|
||||||
use parking_lot::MutexGuard;
|
use parking_lot::MutexGuard;
|
||||||
use glutin::dpi::{LogicalPosition, PhysicalSize};
|
use glutin::dpi::{PhysicalPosition, PhysicalSize};
|
||||||
|
|
||||||
use crate::cli;
|
use crate::cli;
|
||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
|
@ -488,15 +488,19 @@ impl Display {
|
||||||
|
|
||||||
/// Adjust the IME editor position according to the new location of the cursor
|
/// Adjust the IME editor position according to the new location of the cursor
|
||||||
pub fn update_ime_position(&mut self, terminal: &Term) {
|
pub fn update_ime_position(&mut self, terminal: &Term) {
|
||||||
use crate::index::{Column, Line, Point};
|
let point = terminal.cursor().point;
|
||||||
use crate::term::SizeInfo;
|
let SizeInfo {
|
||||||
let Point{line: Line(row), col: Column(col)} = terminal.cursor().point;
|
cell_width: cw,
|
||||||
let SizeInfo{cell_width: cw,
|
cell_height: ch,
|
||||||
cell_height: ch,
|
padding_x: px,
|
||||||
padding_x: px,
|
padding_y: py,
|
||||||
padding_y: py, ..} = *terminal.size_info();
|
..
|
||||||
let nspot_y = (py + (row + 1) as f32 * ch) as i32;
|
} = *terminal.size_info();
|
||||||
let nspot_x = (px + col as f32 * cw) as i32;
|
|
||||||
self.window().set_ime_spot(LogicalPosition::from((nspot_x, nspot_y)));
|
let dpr = self.window().hidpi_factor();
|
||||||
|
let nspot_x = f64::from(px + point.col.0 as f32 * cw);
|
||||||
|
let nspot_y = f64::from(py + (point.line.0 + 1) as f32 * ch);
|
||||||
|
|
||||||
|
self.window().set_ime_spot(PhysicalPosition::from((nspot_x, nspot_y)).to_logical(dpr));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue