summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-05-31 16:23:09 +0200
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-05-31 16:23:09 +0200
commit3312dc808012e2c049fb2f178d51bfe0b4e30399 (patch)
tree5dbfe97e50662cdaf396427d7793c4f03fc159c6
parent8cfa8149f56a0e58eb0257ebb181c69bec5c095f (diff)
downloadiced-3312dc808012e2c049fb2f178d51bfe0b4e30399.tar.gz
iced-3312dc808012e2c049fb2f178d51bfe0b4e30399.tar.bz2
iced-3312dc808012e2c049fb2f178d51bfe0b4e30399.zip
Create `jump` and `macos_command` methods in `keyboard::Modifiers`
-rw-r--r--core/src/keyboard/modifiers.rs24
-rw-r--r--widget/src/text_editor.rs33
-rw-r--r--widget/src/text_input.rs45
3 files changed, 32 insertions, 70 deletions
diff --git a/core/src/keyboard/modifiers.rs b/core/src/keyboard/modifiers.rs
index e531510f..edbf6d38 100644
--- a/core/src/keyboard/modifiers.rs
+++ b/core/src/keyboard/modifiers.rs
@@ -84,4 +84,28 @@ impl Modifiers {
is_pressed
}
+
+ /// Returns true if the "jump key" is pressed in the [`Modifiers`].
+ ///
+ /// The "jump key" is the modifier key used to widen text motions. It is the `Alt`
+ /// key in macOS and the `Ctrl` key in other platforms.
+ pub fn jump(self) -> bool {
+ if cfg!(target_os = "macos") {
+ self.alt()
+ } else {
+ self.control()
+ }
+ }
+
+ /// Returns true if the "command key" is pressed on a macOS device.
+ ///
+ /// This is relevant for macOS-specific actions (e.g. `⌘ + ArrowLeft` moves the cursor
+ /// to the beginning of the line).
+ pub fn macos_command(self) -> bool {
+ if cfg!(target_os = "macos") {
+ self.logo()
+ } else {
+ false
+ }
+ }
}
diff --git a/widget/src/text_editor.rs b/widget/src/text_editor.rs
index 9e494394..41b058af 100644
--- a/widget/src/text_editor.rs
+++ b/widget/src/text_editor.rs
@@ -768,9 +768,7 @@ impl Update {
if let keyboard::Key::Named(named_key) = key.as_ref() {
if let Some(motion) = motion(named_key) {
- let motion = if platform::is_macos_command_pressed(
- modifiers,
- ) {
+ let motion = if modifiers.macos_command() {
match motion {
Motion::Left => Motion::Home,
Motion::Right => Motion::End,
@@ -780,9 +778,7 @@ impl Update {
motion
};
- let motion = if platform::is_jump_modifier_pressed(
- modifiers,
- ) {
+ let motion = if modifiers.jump() {
motion.widen()
} else {
motion
@@ -819,31 +815,6 @@ fn motion(key: key::Named) -> Option<Motion> {
}
}
-mod platform {
- use crate::core::keyboard;
-
- pub fn is_jump_modifier_pressed(modifiers: keyboard::Modifiers) -> bool {
- if cfg!(target_os = "macos") {
- modifiers.alt()
- } else {
- modifiers.control()
- }
- }
-
- /// Whether the command key is pressed on a macOS device.
- ///
- /// This is relevant for actions like ⌘ + ArrowLeft to move to the beginning of the
- /// line where the equivalent behavior for `modifiers.command()` is instead a jump on
- /// other platforms.
- pub fn is_macos_command_pressed(modifiers: keyboard::Modifiers) -> bool {
- if cfg!(target_os = "macos") {
- modifiers.logo()
- } else {
- false
- }
- }
-}
-
/// The possible status of a [`TextEditor`].
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Status {
diff --git a/widget/src/text_input.rs b/widget/src/text_input.rs
index 2c951c12..941e9bde 100644
--- a/widget/src/text_input.rs
+++ b/widget/src/text_input.rs
@@ -826,7 +826,7 @@ where
}
}
keyboard::Key::Named(key::Named::Backspace) => {
- if platform::is_jump_modifier_pressed(modifiers)
+ if modifiers.jump()
&& state.cursor.selection(&self.value).is_none()
{
if self.is_secure {
@@ -850,7 +850,7 @@ where
update_cache(state, &self.value);
}
keyboard::Key::Named(key::Named::Delete) => {
- if platform::is_jump_modifier_pressed(modifiers)
+ if modifiers.jump()
&& state.cursor.selection(&self.value).is_none()
{
if self.is_secure {
@@ -897,9 +897,7 @@ where
}
}
keyboard::Key::Named(key::Named::ArrowLeft)
- if platform::is_macos_command_pressed(
- modifiers,
- ) =>
+ if modifiers.macos_command() =>
{
if modifiers.shift() {
state.cursor.select_range(
@@ -911,9 +909,7 @@ where
}
}
keyboard::Key::Named(key::Named::ArrowRight)
- if platform::is_macos_command_pressed(
- modifiers,
- ) =>
+ if modifiers.macos_command() =>
{
if modifiers.shift() {
state.cursor.select_range(
@@ -925,9 +921,7 @@ where
}
}
keyboard::Key::Named(key::Named::ArrowLeft) => {
- if platform::is_jump_modifier_pressed(modifiers)
- && !self.is_secure
- {
+ if modifiers.jump() && !self.is_secure {
if modifiers.shift() {
state
.cursor
@@ -944,9 +938,7 @@ where
}
}
keyboard::Key::Named(key::Named::ArrowRight) => {
- if platform::is_jump_modifier_pressed(modifiers)
- && !self.is_secure
- {
+ if modifiers.jump() && !self.is_secure {
if modifiers.shift() {
state
.cursor
@@ -1309,31 +1301,6 @@ impl<P: text::Paragraph> operation::TextInput for State<P> {
}
}
-mod platform {
- use crate::core::keyboard;
-
- pub fn is_jump_modifier_pressed(modifiers: keyboard::Modifiers) -> bool {
- if cfg!(target_os = "macos") {
- modifiers.alt()
- } else {
- modifiers.control()
- }
- }
-
- /// Whether the command key is pressed on a macOS device.
- ///
- /// This is relevant for actions like ⌘ + ArrowLeft to move to the beginning of the
- /// line where the equivalent behavior for `modifiers.command()` is instead a jump on
- /// other platforms.
- pub fn is_macos_command_pressed(modifiers: keyboard::Modifiers) -> bool {
- if cfg!(target_os = "macos") {
- modifiers.logo()
- } else {
- false
- }
- }
-}
-
fn offset<P: text::Paragraph>(
text_bounds: Rectangle,
value: &Value,