From 6270b3418f294c8a1d067b96d62e54b290c76104 Mon Sep 17 00:00:00 2001 From: Alexandre Bury Date: Wed, 27 Mar 2024 11:19:36 -0400 Subject: [PATCH] Remove owning-ref dependency --- cursive-core/Cargo.toml | 1 - cursive-core/src/views/text_view.rs | 24 ++++++++---------------- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/cursive-core/Cargo.toml b/cursive-core/Cargo.toml index d80079e0..034db7f6 100644 --- a/cursive-core/Cargo.toml +++ b/cursive-core/Cargo.toml @@ -25,7 +25,6 @@ repository = "gyscos/cursive" enum-map = "2.0" enumset = "1.0.4" log = "0.4" -owning_ref = "0.4" unicode-segmentation = "1" unicode-width = "0.1" xi-unicode = "0.3" diff --git a/cursive-core/src/views/text_view.rs b/cursive-core/src/views/text_view.rs index d1b36a88..5534b858 100644 --- a/cursive-core/src/views/text_view.rs +++ b/cursive-core/src/views/text_view.rs @@ -1,8 +1,7 @@ +use parking_lot::Mutex; use std::ops::Deref; use std::sync::Arc; -use std::sync::{Mutex, MutexGuard}; -use owning_ref::{ArcRef, OwningHandle}; use unicode_width::UnicodeWidthStr; use crate::align::*; @@ -65,7 +64,6 @@ impl TextContent { /// /// This keeps the content locked. Do not store this! pub struct TextContentRef { - _handle: OwningHandle>, MutexGuard<'static, TextContentInner>>, // We also need to keep a copy of Arc so `deref` can return // a reference to the `StyledString` data: Arc, @@ -123,7 +121,7 @@ impl TextContent { where F: FnOnce(&mut TextContentInner) -> O, { - let mut content = self.content.lock().unwrap(); + let mut content = self.content.lock(); let out = f(&mut content); @@ -150,14 +148,8 @@ struct TextContentInner { impl TextContentInner { /// From a shareable content (Arc + Mutex), return a fn get_content(content: &Arc>) -> TextContentRef { - let arc_ref: ArcRef> = ArcRef::new(Arc::clone(content)); - - let _handle = - OwningHandle::new_with_fn(arc_ref, |mutex| unsafe { (*mutex).lock().unwrap() }); - - let data = Arc::clone(&_handle.content_value); - - TextContentRef { _handle, data } + let data = Arc::clone(&content.lock().content_value); + TextContentRef { data } } fn is_cache_valid(&self, size: Vec2) -> bool { @@ -360,7 +352,7 @@ impl TextView { fn compute_rows(&mut self, size: Vec2) { let size = if self.wrap { size } else { Vec2::max_value() }; - let mut content = self.content.content.lock().unwrap(); + let mut content = self.content.content.lock(); if content.is_cache_valid(size) { return; } @@ -394,7 +386,7 @@ impl View for TextView { let offset = self.align.v.get_offset(h, printer.size.y); let printer = &printer.offset((0, offset)); - let content = self.content.content.lock().unwrap(); + let content = self.content.content.lock(); printer.with_style(self.style, |printer| { for (y, row) in self @@ -418,7 +410,7 @@ impl View for TextView { } fn needs_relayout(&self) -> bool { - let content = self.content.content.lock().unwrap(); + let content = self.content.content.lock(); content.size_cache.is_none() } @@ -436,7 +428,7 @@ impl View for TextView { let my_size = Vec2::new(self.width.unwrap_or(0), self.rows.len()); // Build a fresh cache. - let mut content = self.content.content.lock().unwrap(); + let mut content = self.content.content.lock(); content.size_cache = Some(SizeCache::build(my_size, size)); } }