From fa00813c0b344fa8542883cdcf07991559ec2343 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Wed, 19 Oct 2022 08:05:22 -0600 Subject: [PATCH] Remove Arc wrapper for text buffer when using iced --- examples/editor-libcosmic/src/main.rs | 10 ++++----- examples/editor-libcosmic/src/text_box.rs | 27 ++++++++++++++++------- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/examples/editor-libcosmic/src/main.rs b/examples/editor-libcosmic/src/main.rs index 5f47d23..eebf009 100644 --- a/examples/editor-libcosmic/src/main.rs +++ b/examples/editor-libcosmic/src/main.rs @@ -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>>, + buffer: Mutex>, } #[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) diff --git a/examples/editor-libcosmic/src/text_box.rs b/examples/editor-libcosmic/src/text_box.rs index 0e87c52..28afa35 100644 --- a/examples/editor-libcosmic/src/text_box.rs +++ b/examples/editor-libcosmic/src/text_box.rs @@ -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>>, + buffer: &'a Mutex>, } impl<'a> TextBox<'a> { - pub fn new(buffer: Arc>>) -> Self { + pub fn new(buffer: &'a Mutex>) -> Self { Self { buffer } } } -pub fn text_box<'a>(buffer: Arc>>) -> TextBox<'a> { +pub fn text_box<'a>(buffer: &'a Mutex>) -> 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));