input: Adjust blink cursor height. (#1704)

This commit is contained in:
Jason Lee 2025-11-28 17:54:48 +08:00 committed by GitHub
parent 6505be409b
commit df9655e80a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 17 additions and 8 deletions

View file

@ -1,20 +1,20 @@
use std::{ops::Range, rc::Rc}; use std::{ops::Range, rc::Rc};
use gpui::{ use gpui::{
fill, point, px, relative, size, App, Bounds, Corners, Element, ElementId, ElementInputHandler, App, Bounds, Corners, Element, ElementId, ElementInputHandler, Entity, GlobalElementId, Half,
Entity, GlobalElementId, Half, HighlightStyle, Hitbox, Hsla, IntoElement, LayoutId, HighlightStyle, Hitbox, Hsla, IntoElement, LayoutId, MouseButton, MouseMoveEvent, Path, Pixels,
MouseButton, MouseMoveEvent, Path, Pixels, Point, ShapedLine, SharedString, Size, Style, Point, ShapedLine, SharedString, Size, Style, TextRun, TextStyle, UnderlineStyle, Window, fill,
TextRun, TextStyle, UnderlineStyle, Window, point, px, relative, size,
}; };
use ropey::Rope; use ropey::Rope;
use smallvec::SmallVec; use smallvec::SmallVec;
use crate::{ use crate::{
input::{blink_cursor::CURSOR_WIDTH, text_wrapper::LineLayout, RopeExt as _},
ActiveTheme as _, Colorize, PixelsExt, Root, ActiveTheme as _, Colorize, PixelsExt, Root,
input::{RopeExt as _, blink_cursor::CURSOR_WIDTH, text_wrapper::LineLayout},
}; };
use super::{mode::InputMode, InputState, LastLayout}; use super::{InputState, LastLayout, mode::InputMode};
const BOTTOM_MARGIN_ROWS: usize = 3; const BOTTOM_MARGIN_ROWS: usize = 3;
pub(super) const RIGHT_MARGIN: Pixels = px(10.); pub(super) const RIGHT_MARGIN: Pixels = px(10.);
@ -222,7 +222,12 @@ impl TextElement {
} }
// cursor bounds // cursor bounds
let cursor_height = line_height; let cursor_height = match state.size {
crate::Size::Large => 1.,
crate::Size::Small => 0.75,
_ => 0.85,
} * line_height;
cursor_bounds = Some(Bounds::new( cursor_bounds = Some(Bounds::new(
point( point(
bounds.left() + cursor_pos.x + line_number_width + scroll_offset.x, bounds.left() + cursor_pos.x + line_number_width + scroll_offset.x,

View file

@ -252,6 +252,7 @@ impl RenderOnce for Input {
state.text_wrapper.set_font(font, font_size, cx); state.text_wrapper.set_font(font, font_size, cx);
state.text_wrapper.prepare_if_need(&state.text, cx); state.text_wrapper.prepare_if_need(&state.text, cx);
state.disabled = self.disabled; state.disabled = self.disabled;
state.size = self.size;
}); });
let state = self.state.read(cx); let state = self.state.read(cx);

View file

@ -22,6 +22,7 @@ use super::{
TabSize, blink_cursor::BlinkCursor, change::Change, element::TextElement, TabSize, blink_cursor::BlinkCursor, change::Change, element::TextElement,
mask_pattern::MaskPattern, mode::InputMode, number_input, text_wrapper::TextWrapper, mask_pattern::MaskPattern, mode::InputMode, number_input, text_wrapper::TextWrapper,
}; };
use crate::Size;
use crate::actions::{SelectDown, SelectLeft, SelectRight, SelectUp}; use crate::actions::{SelectDown, SelectLeft, SelectRight, SelectUp};
use crate::input::movement::MoveDirection; use crate::input::movement::MoveDirection;
use crate::input::{ use crate::input::{
@ -286,6 +287,7 @@ pub struct InputState {
pub(super) last_bounds: Option<Bounds<Pixels>>, pub(super) last_bounds: Option<Bounds<Pixels>>,
pub(super) last_selected_range: Option<Selection>, pub(super) last_selected_range: Option<Selection>,
pub(super) selecting: bool, pub(super) selecting: bool,
pub(super) size: Size,
pub(super) disabled: bool, pub(super) disabled: bool,
pub(super) masked: bool, pub(super) masked: bool,
pub(super) clean_on_escape: bool, pub(super) clean_on_escape: bool,
@ -408,6 +410,7 @@ impl InputState {
hover_popover: None, hover_popover: None,
hover_definition: HoverDefinition::default(), hover_definition: HoverDefinition::default(),
silent_replace_text: false, silent_replace_text: false,
size: Size::default(),
_subscriptions, _subscriptions,
_context_menu_task: Task::ready(Ok(())), _context_menu_task: Task::ready(Ok(())),
_pending_update: false, _pending_update: false,

View file

@ -340,7 +340,7 @@ impl Size {
match self { match self {
Self::Large => px(16.), Self::Large => px(16.),
Self::Medium => px(12.), Self::Medium => px(12.),
Self::Small => px(6.), Self::Small => px(8.),
Self::XSmall => px(4.), Self::XSmall => px(4.),
_ => px(8.), _ => px(8.),
} }