Remove Arc wrapper for text buffer when using iced
This commit is contained in:
parent
021782b92b
commit
fa00813c0b
2 changed files with 24 additions and 13 deletions
|
|
@ -24,7 +24,7 @@ use cosmic_text::{
|
|||
use std::{
|
||||
env,
|
||||
fs,
|
||||
sync::{Arc, Mutex},
|
||||
sync::Mutex,
|
||||
};
|
||||
|
||||
use self::text_box::text_box;
|
||||
|
|
@ -88,7 +88,7 @@ fn main() -> cosmic::iced::Result {
|
|||
|
||||
pub struct Window {
|
||||
theme: Theme,
|
||||
buffer: Arc<Mutex<TextBuffer<'static>>>,
|
||||
buffer: Mutex<TextBuffer<'static>>,
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
|
|
@ -116,11 +116,11 @@ impl Application for Window {
|
|||
};
|
||||
|
||||
let font_size_i = 1; // Body
|
||||
let buffer = Arc::new(Mutex::new(TextBuffer::new(
|
||||
let buffer = Mutex::new(TextBuffer::new(
|
||||
unsafe { FONT_MATCHES.as_ref().unwrap() },
|
||||
&text,
|
||||
FONT_SIZES[font_size_i],
|
||||
)));
|
||||
));
|
||||
|
||||
let window = Window {
|
||||
theme: Theme::Dark,
|
||||
|
|
@ -183,7 +183,7 @@ impl Application for Window {
|
|||
.align_items(Alignment::Center)
|
||||
.spacing(8)
|
||||
,
|
||||
text_box(self.buffer.clone())
|
||||
text_box(&self.buffer)
|
||||
]
|
||||
.spacing(8)
|
||||
.padding(16)
|
||||
|
|
|
|||
|
|
@ -7,18 +7,17 @@ use cosmic::iced_native::{
|
|||
},
|
||||
keyboard::{Event as KeyEvent, KeyCode},
|
||||
layout::{self, Layout},
|
||||
mouse::{Event as MouseEvent, ScrollDelta},
|
||||
mouse::{Button, Event as MouseEvent, ScrollDelta},
|
||||
renderer,
|
||||
widget::{self, Widget},
|
||||
};
|
||||
use cosmic_text::{
|
||||
TextLineIndex,
|
||||
TextAction,
|
||||
TextBuffer,
|
||||
};
|
||||
use std::{
|
||||
cmp,
|
||||
sync::{Arc, Mutex},
|
||||
sync::Mutex,
|
||||
time::Instant,
|
||||
};
|
||||
|
||||
|
|
@ -60,16 +59,16 @@ impl StyleSheet for Theme {
|
|||
}
|
||||
|
||||
pub struct TextBox<'a> {
|
||||
buffer: Arc<Mutex<TextBuffer<'a>>>,
|
||||
buffer: &'a Mutex<TextBuffer<'static>>,
|
||||
}
|
||||
|
||||
impl<'a> TextBox<'a> {
|
||||
pub fn new(buffer: Arc<Mutex<TextBuffer<'a>>>) -> Self {
|
||||
pub fn new(buffer: &'a Mutex<TextBuffer<'static>>) -> Self {
|
||||
Self { buffer }
|
||||
}
|
||||
}
|
||||
|
||||
pub fn text_box<'a>(buffer: Arc<Mutex<TextBuffer<'a>>>) -> TextBox<'a> {
|
||||
pub fn text_box<'a>(buffer: &'a Mutex<TextBuffer<'static>>) -> TextBox<'a> {
|
||||
TextBox::new(buffer)
|
||||
}
|
||||
|
||||
|
|
@ -182,8 +181,8 @@ where
|
|||
&mut self,
|
||||
_state: &mut widget::Tree,
|
||||
event: Event,
|
||||
_layout: Layout<'_>,
|
||||
_cursor_position: Point,
|
||||
layout: Layout<'_>,
|
||||
cursor_position: Point,
|
||||
_renderer: &Renderer,
|
||||
_clipboard: &mut dyn Clipboard,
|
||||
_shell: &mut Shell<'_, Message>,
|
||||
|
|
@ -236,6 +235,18 @@ where
|
|||
_ => Status::Ignored,
|
||||
},
|
||||
Event::Mouse(mouse_event) => match mouse_event {
|
||||
MouseEvent::ButtonPressed(button) => match button {
|
||||
Button::Left => if layout.bounds().contains(cursor_position) {
|
||||
buffer.action(TextAction::Click {
|
||||
x: (cursor_position.x - layout.bounds().x) as i32,
|
||||
y: (cursor_position.y - layout.bounds().y) as i32,
|
||||
});
|
||||
Status::Captured
|
||||
} else {
|
||||
Status::Ignored
|
||||
},
|
||||
_ => Status::Ignored,
|
||||
},
|
||||
MouseEvent::WheelScrolled { delta } => match delta {
|
||||
ScrollDelta::Lines { x, y } => {
|
||||
buffer.action(TextAction::Scroll((-y * 6.0) as i32));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue