macro for rwlock

This commit is contained in:
Piyush मिश्रः 2022-03-27 00:48:33 +05:30
parent 231ab35f7b
commit 44a3956a31
9 changed files with 118 additions and 100 deletions

View File

@ -171,7 +171,7 @@ impl ConfigFile {
None => HashMap::new(),
};
let default_config = (&*globals::CONFIG_NAME.read().unwrap()).to_string();
let default_config = (&*rw_read!(globals::CONFIG_NAME)).to_string();
let config_name = if (map.len() > 1 || !map.contains_key(&default_config))
&& map.len() != 0
{
@ -186,7 +186,7 @@ impl ConfigFile {
};
if let Some(config) = map.get(&config_name) {
*globals::CONFIG_NAME.write().unwrap() = config_name;
*rw_write!(globals::CONFIG_NAME) = config_name;
return config.to_owned();
}
}
@ -194,7 +194,7 @@ impl ConfigFile {
let config = Self::default();
let mut configs = HashMap::new();
configs.insert(
(&*globals::CONFIG_NAME.read().unwrap()).to_owned(),
(&*rw_read!(globals::CONFIG_NAME)).to_owned(),
config.clone(),
);
save_configs(configs);

View File

@ -510,7 +510,7 @@ impl ConfigWindow {
// Show to edit config
pub(crate) fn show(&mut self) -> bool {
let config_name = &*globals::CONFIG_NAME.read().unwrap();
let config_name = &*rw_read!(globals::CONFIG_NAME);
self.browse.clear();
for (idx, name) in self.configs.borrow().keys().enumerate() {
self.browse.add(name);
@ -519,7 +519,7 @@ impl ConfigWindow {
}
}
*self.selected_browse_line.borrow_mut() = self.browse.value();
let config = globals::CONFIG.read().unwrap();
let config = rw_read!(globals::CONFIG);
self.quote_font.set_value(config.quote_font.as_str());
self.subquote_font.set_value(config.subquote_font.as_str());
self.subquote2_font
@ -1232,8 +1232,8 @@ impl ConfigWindow {
self.save_btn.set_callback(move |_| {
config::save_configs((*configs.borrow()).clone());
if let Some(c) = configs.borrow().get(&*globals::CONFIG_NAME.read().unwrap()) {
*globals::CONFIG.write().unwrap() = c.to_owned();
if let Some(c) = configs.borrow().get(&*rw_read!(globals::CONFIG_NAME)) {
*rw_write!(globals::CONFIG) = c.to_owned();
}
*did_save.borrow_mut() = true;
win.hide();

View File

@ -113,7 +113,7 @@ impl CropWindow {
let mut container =
ImageContainer::new(path, Arc::new(RwLock::new(ImageProperties::default())));
{
let prop = &mut container.properties.write().unwrap();
let prop = &mut rw_write!(container.properties);
prop.dimension = prop.original_dimension;
prop.crop_position = match crop_pos {
Some(a) => Some(a),
@ -145,7 +145,7 @@ impl CropWindow {
}
if let Some(cont) = &*self.container.borrow() {
cont.properties.read().unwrap().crop_position
rw_read!(cont.properties).crop_position
} else {
None
}
@ -168,7 +168,7 @@ impl CropWindow {
)
.unwrap();
let prop = cont.properties.read().unwrap();
let prop = rw_read!(cont.properties);
let (original_width, original_height) = prop.original_dimension;
let (original_x, original_y) = prop.crop_position.unwrap();
let (resized_width, resized_height) = (image.width() as f64, image.height() as f64);
@ -200,7 +200,7 @@ impl CropWindow {
if let Some(cont) = &*container.borrow_mut() {
let image = &cont.buffer;
let mut prop = cont.properties.write().unwrap();
let mut prop = rw_write!(cont.properties);
let (original_x, original_y) = match prop.crop_position {
Some(v) => v,
@ -271,7 +271,7 @@ impl CropWindow {
let container = Rc::clone(&self.container);
self.win.set_callback(move |f| {
if let Some(cont) = &*container.borrow_mut() {
cont.properties.write().unwrap().crop_position = None;
rw_write!(cont.properties).crop_position = None;
}
f.hide();
});

View File

@ -185,7 +185,7 @@ pub(crate) fn spawn_image_thread(
win.deactivate();
if let Some(image_info) = cont.clone_img() {
let idx = file_choice.value();
let mut imgs = images_list.write().unwrap();
let mut imgs = rw_write!(images_list);
imgs.insert(idx as usize, image_info.clone());
file_choice.insert(
idx,
@ -207,7 +207,7 @@ pub(crate) fn spawn_image_thread(
status.set_label("Deleting...");
win.deactivate();
cont.delete();
let mut imgs = images_list.write().unwrap();
let mut imgs = rw_write!(images_list);
imgs.remove(file_choice.value() as usize);
file_choice.remove(file_choice.value());
if file_choice.value() != imgs.len() as i32 {
@ -223,10 +223,9 @@ pub(crate) fn spawn_image_thread(
}
DrawMessage::ShowImagesDetails => show_images_details(Arc::clone(&images_list)),
DrawMessage::CheckImage => {
let (width, height) = properties.read().unwrap().original_dimension;
let (width, height) = rw_read!(properties).original_dimension;
if utils::is_too_small(width, height) {
let a = globals::MAIN_SENDER.read().unwrap();
if let Some(a) = &*a {
if let Some(a) = &*rw_read!(globals::MAIN_SENDER) {
a.send(crate::AppMessage::DeleteImage);
}
}
@ -265,7 +264,7 @@ fn load_image(
properties: Arc<RwLock<ImageProperties>>,
container: &mut Option<ImageContainer>,
) {
let imgs = images_list.read().unwrap();
let imgs = rw_read!(images_list);
if imgs.len() == 0 {
*container = None;
flush_buffer(app_sender, container);
@ -290,7 +289,7 @@ fn load_image(
}
};
let mut properties = cont.properties.write().unwrap();
let mut properties = rw_write!(cont.properties);
properties.merge(read, &tag.value(), &tag2.value());
properties.is_saved = true;
@ -344,7 +343,7 @@ fn load_image(
}
cont.apply_resize();
let (width, height) = cont.properties.read().unwrap().dimension;
let (width, height) = rw_read!(cont.properties).dimension;
page.col_flex.set_size(&page.image, height as i32);
page.row_flex.set_size(&page.col_flex, width as i32);
page.col_flex.recalc();
@ -358,7 +357,7 @@ fn show_images_details(images_list: Arc<RwLock<Vec<ImageInfo>>>) {
let mut image_with_quote: usize = 0;
let mut image_without_quote: usize = 0;
let list = images_list.read().unwrap();
let list = rw_read!(images_list);
for image_info in list.iter() {
let properties_file = utils::get_properties_path(&image_info);

View File

@ -35,7 +35,7 @@ lazy_static! {
/// TTF Font for Quote
pub(crate) static ref FONT_QUOTE: Font<'static> = {
let mut buffer = Vec::new();
if let Ok(mut file) = std::fs::File::open(CONFIG.read().unwrap().quote_font.as_str()) {
if let Ok(mut file) = std::fs::File::open(rw_read!(CONFIG).quote_font.as_str()) {
if let Ok(_) = file.read_to_end(&mut buffer) {
if let Some(out) = rusttype::Font::try_from_vec(buffer) {
return out;
@ -51,7 +51,7 @@ lazy_static! {
/// TTF Font for Subquote
pub(crate) static ref FONT_SUBQUOTE: Font<'static> = {
let mut buffer = Vec::new();
if let Ok(mut file) = std::fs::File::open(CONFIG.read().unwrap().subquote_font.as_str())
if let Ok(mut file) = std::fs::File::open(rw_read!(CONFIG).subquote_font.as_str())
{
if let Ok(_) = file.read_to_end(&mut buffer) {
if let Some(out) = rusttype::Font::try_from_vec(buffer) {
@ -69,7 +69,7 @@ lazy_static! {
pub(crate) static ref FONT_SUBQUOTE2: Font<'static> = {
let mut buffer = Vec::new();
if let Ok(mut file) =
std::fs::File::open(CONFIG.read().unwrap().subquote2_font.as_str())
std::fs::File::open(rw_read!(CONFIG).subquote2_font.as_str())
{
if let Ok(_) = file.read_to_end(&mut buffer) {
if let Some(out) = rusttype::Font::try_from_vec(buffer) {
@ -86,7 +86,7 @@ lazy_static! {
/// TTF Font for Tag
pub(crate) static ref FONT_TAG: Font<'static> = {
let mut buffer = Vec::new();
if let Ok(mut file) = std::fs::File::open(&CONFIG.read().unwrap().tag_font.as_str()) {
if let Ok(mut file) = std::fs::File::open(&rw_read!(CONFIG).tag_font.as_str()) {
if let Ok(_) = file.read_to_end(&mut buffer) {
if let Some(out) = rusttype::Font::try_from_vec(buffer) {
return out;
@ -100,7 +100,7 @@ lazy_static! {
/// TTF Font for Tag 2
pub(crate) static ref FONT_TAG2: Font<'static> = {
let mut buffer = Vec::new();
if let Ok(mut file) = std::fs::File::open(&CONFIG.read().unwrap().tag2_font.as_str()) {
if let Ok(mut file) = std::fs::File::open(&rw_read!(CONFIG).tag2_font.as_str()) {
if let Ok(_) = file.read_to_end(&mut buffer) {
if let Some(out) = rusttype::Font::try_from_vec(buffer) {
return out;

13
src/macros.rs Normal file
View File

@ -0,0 +1,13 @@
#[macro_export]
macro_rules! rw_read {
($var:expr) => {
$var.read().expect("Program got panic!")
};
}
#[macro_export]
macro_rules! rw_write {
($var:expr) => {
$var.write().expect("Program got panic!")
};
}

View File

@ -17,17 +17,20 @@
extern crate log;
extern crate simplelog;
mod dialog;
#[macro_use]
mod macros;
mod about_window;
mod config;
mod config_picker;
mod config_window;
mod crop_window;
mod dialog;
mod draw_thread;
mod globals;
mod main_window;
mod utils;
mod result_ext;
mod utils;
use fltk::{
app::{channel, App},
@ -47,7 +50,7 @@ pub(crate) enum AppMessage {
Alert(String),
// Only for Main windows
DeleteImage
DeleteImage,
}
fn main() {
@ -73,28 +76,32 @@ fn main() {
let draw_buff: Arc<RwLock<Option<Vec<u8>>>> = Arc::new(RwLock::new(None));
let (main_sender, main_receiver) = channel::<AppMessage>();
*globals::MAIN_SENDER.write().unwrap() = Some(main_sender);
*rw_write!(globals::MAIN_SENDER) = Some(main_sender);
let mut main_window = MainWindow::new(Arc::clone(&draw_buff));
while app.wait() {
if let Some(msg) = main_receiver.recv() {
match msg {
AppMessage::RedrawMainWindowImage(data) => {
let mut buff = draw_buff.write().unwrap();
let mut buff = rw_write!(draw_buff);
*buff = data;
main_window.win.redraw();
}
AppMessage::Message(msg) => {
dialog::message_default(&msg);
}
AppMessage::Alert(msg) => {
dialog::alert_default(&msg)
}
AppMessage::Alert(msg) => dialog::alert_default(&msg),
AppMessage::DeleteImage => {
let ch = dialog::choice_default("Image is too small", "Delete", "Keep");
if ch == 0 {
main_window.sender.send(draw_thread::DrawMessage::Delete).unwrap();
main_window.sender.send(draw_thread::DrawMessage::Open).unwrap();
main_window
.sender
.send(draw_thread::DrawMessage::Delete)
.unwrap();
main_window
.sender
.send(draw_thread::DrawMessage::Open)
.unwrap();
main_window.page.image.redraw();
main_window.file_choice.redraw();
}

View File

@ -397,8 +397,7 @@ impl MainWindow {
sender: rx,
};
let a = globals::MAIN_SENDER.read().unwrap();
if let Some(a) = &*a {
if let Some(a) = &*rw_read!(globals::MAIN_SENDER) {
spawn_image_thread(tx, a.to_owned(), Arc::clone(&properties), &main_win);
}
main_win.menu();
@ -450,7 +449,7 @@ impl MainWindow {
Shortcut::Ctrl | 's',
menu::MenuFlag::Normal,
move |_| {
let mut prop = properties.write().unwrap();
let mut prop = rw_write!(properties);
prop.is_saved = true;
sender.send(DrawMessage::Save).unwrap();
},
@ -498,8 +497,8 @@ impl MainWindow {
let buff = Arc::clone(&self.draw_buff);
let properties = Arc::clone(&self.properties);
self.page.image.draw(move |f| {
let (width, height) = properties.read().unwrap().dimension;
if let Some(image) = &*buff.read().unwrap() {
let (width, height) = rw_read!(properties).dimension;
if let Some(image) = &*rw_read!(buff) {
dr::draw_image(
&image,
f.x(),
@ -520,7 +519,7 @@ impl MainWindow {
let sender = self.sender.clone();
let imgs = Arc::clone(&self.images_list);
self.reset_file_choice.set_callback(move |_| {
let path = match imgs.read().unwrap().first() {
let path = match rw_read!(imgs).first() {
Some(image_info) => image_info.path.parent().unwrap().to_path_buf(),
None => return,
};
@ -534,8 +533,8 @@ impl MainWindow {
let sender = self.sender.clone();
let properties = Arc::clone(&self.properties);
self.reset_translucent_layer_btn.set_callback(move |_| {
let mut prop = properties.write().unwrap();
let color = globals::CONFIG.read().unwrap().color_layer;
let mut prop = rw_write!(properties);
let color = rw_read!(globals::CONFIG).color_layer;
prop.translucent_layer_color = color;
prop.is_saved = false;
utils::set_color_btn_rgba(color, &mut layer_rgb);
@ -552,9 +551,9 @@ impl MainWindow {
let sender = self.sender.clone();
let properties = Arc::clone(&self.properties);
self.reset_quote_position_btn.set_callback(move |_| {
let mut prop = properties.write().unwrap();
let mut prop = rw_write!(properties);
let height = prop.original_dimension.1;
let pos = height * globals::CONFIG.read().unwrap().quote_position_ratio;
let pos = height * rw_read!(globals::CONFIG).quote_position_ratio;
prop.quote_position = pos;
prop.is_saved = false;
quote_position.set_value(pos);
@ -572,9 +571,9 @@ impl MainWindow {
let sender = self.sender.clone();
let properties = Arc::clone(&self.properties);
self.reset_subquote_position_btn.set_callback(move |_| {
let mut prop = properties.write().unwrap();
let mut prop = rw_write!(properties);
let height = prop.original_dimension.1;
let pos = height * globals::CONFIG.read().unwrap().subquote_position_ratio;
let pos = height * rw_read!(globals::CONFIG).subquote_position_ratio;
prop.subquote_position = pos;
prop.is_saved = false;
subquote_position.set_value(pos);
@ -592,9 +591,9 @@ impl MainWindow {
let sender = self.sender.clone();
let properties = Arc::clone(&self.properties);
self.reset_subquote2_position_btn.set_callback(move |_| {
let mut prop = properties.write().unwrap();
let mut prop = rw_write!(properties);
let height = prop.original_dimension.1;
let pos = height * globals::CONFIG.read().unwrap().subquote2_position_ratio;
let pos = height * rw_read!(globals::CONFIG).subquote2_position_ratio;
prop.subquote2_position = pos;
prop.is_saved = false;
subquote2_position.set_value(pos);
@ -612,9 +611,9 @@ impl MainWindow {
let sender = self.sender.clone();
let properties = Arc::clone(&self.properties);
self.reset_tag_position_btn.set_callback(move |_| {
let mut prop = properties.write().unwrap();
let mut prop = rw_write!(properties);
let height = prop.original_dimension.1;
let pos = height * globals::CONFIG.read().unwrap().tag_position_ratio;
let pos = height * rw_read!(globals::CONFIG).tag_position_ratio;
prop.tag_position = pos;
prop.is_saved = false;
tag_position.set_value(pos);
@ -632,9 +631,9 @@ impl MainWindow {
let sender = self.sender.clone();
let properties = Arc::clone(&self.properties);
self.reset_tag2_position_btn.set_callback(move |_| {
let mut prop = properties.write().unwrap();
let mut prop = rw_write!(properties);
let height = prop.original_dimension.1;
let pos = height * globals::CONFIG.read().unwrap().tag2_position_ratio;
let pos = height * rw_read!(globals::CONFIG).tag2_position_ratio;
prop.tag2_position = pos;
prop.is_saved = false;
tag2_position.set_value(pos);
@ -649,7 +648,7 @@ impl MainWindow {
let sender = self.sender.clone();
let properties = Arc::clone(&self.properties);
self.save_btn.set_callback(move |_| {
let mut prop = properties.write().unwrap();
let mut prop = rw_write!(properties);
prop.is_saved = true;
sender.send(DrawMessage::Save).unwrap()
});
@ -689,7 +688,7 @@ impl MainWindow {
let mut crop_win = CropWindow::new();
let sender = self.sender.clone();
self.crop_btn.set_callback(move |_| {
let mut prop = properties.write().unwrap();
let mut prop = rw_write!(properties);
if let Some(image_info) = &prop.image_info {
if let Some((x, y)) = crop_win.load_to_crop(&image_info, prop.crop_position) {
sender.send(DrawMessage::ChangeCrop((x, y))).unwrap();
@ -703,7 +702,7 @@ impl MainWindow {
let sender = self.sender.clone();
let properties = Arc::clone(&self.properties);
self.next_btn.set_callback(move |_| {
let prop = properties.read().unwrap();
let prop = rw_read!(properties);
if !prop.is_saved {
let save = fltk::dialog::choice_default("Save?", "yes", "no", "cancel");
match save {
@ -727,7 +726,7 @@ impl MainWindow {
let sender = self.sender.clone();
let properties = Arc::clone(&self.properties);
self.back_btn.set_callback(move |_| {
let prop = properties.read().unwrap();
let prop = rw_read!(properties);
if !prop.is_saved {
let save = fltk::dialog::choice_default("Save?", "yes", "no", "cancel");
match save {
@ -750,7 +749,7 @@ impl MainWindow {
let sender = self.sender.clone();
let properties = Arc::clone(&self.properties);
self.file_choice.set_callback(move |_| {
let prop = properties.read().unwrap();
let prop = rw_read!(properties);
if !prop.is_saved {
let save = fltk::dialog::choice_default("Save?", "yes", "no", "cancel");
match save {
@ -769,7 +768,7 @@ impl MainWindow {
let sender = self.sender.clone();
self.quote.handle(move |f, ev| {
if ev == enums::Event::KeyUp {
let mut prop = properties.write().unwrap();
let mut prop = rw_write!(properties);
prop.quote = f.value();
prop.is_saved = false;
sender.send(DrawMessage::RedrawToBuffer).unwrap();
@ -785,7 +784,7 @@ impl MainWindow {
let sender = self.sender.clone();
self.subquote.handle(move |f, ev| {
if ev == enums::Event::KeyUp {
let mut prop = properties.write().unwrap();
let mut prop = rw_write!(properties);
prop.subquote = f.value();
prop.is_saved = false;
sender.send(DrawMessage::RedrawToBuffer).unwrap();
@ -801,7 +800,7 @@ impl MainWindow {
let sender = self.sender.clone();
self.subquote2.handle(move |f, ev| {
if ev == enums::Event::KeyUp {
let mut prop = properties.write().unwrap();
let mut prop = rw_write!(properties);
prop.subquote2 = f.value();
prop.is_saved = false;
sender.send(DrawMessage::RedrawToBuffer).unwrap();
@ -817,7 +816,7 @@ impl MainWindow {
let sender = self.sender.clone();
self.tag.handle(move |f, ev| {
if ev == enums::Event::KeyUp {
let mut prop = properties.write().unwrap();
let mut prop = rw_write!(properties);
prop.tag = f.value();
prop.is_saved = false;
sender.send(DrawMessage::RedrawToBuffer).unwrap();
@ -833,7 +832,7 @@ impl MainWindow {
let sender = self.sender.clone();
self.tag2.handle(move |f, ev| {
if ev == enums::Event::KeyUp {
let mut prop = properties.write().unwrap();
let mut prop = rw_write!(properties);
prop.tag2 = f.value();
prop.is_saved = false;
sender.send(DrawMessage::RedrawToBuffer).unwrap();
@ -849,7 +848,7 @@ impl MainWindow {
let sender = self.sender.clone();
let mut quote_position_slider = self.quote_position_slider.clone();
self.quote_position.set_callback(move |f| {
let mut prop = properties.write().unwrap();
let mut prop = rw_write!(properties);
prop.quote_position = f.value();
quote_position_slider.set_value(f.value());
prop.is_saved = false;
@ -864,7 +863,7 @@ impl MainWindow {
let sender = self.sender.clone();
let mut quote_position = self.quote_position.clone();
self.quote_position_slider.set_callback(move |f| {
let mut prop = properties.write().unwrap();
let mut prop = rw_write!(properties);
prop.quote_position = f.value();
quote_position.set_value(f.value());
prop.is_saved = false;
@ -879,7 +878,7 @@ impl MainWindow {
let sender = self.sender.clone();
let mut subquote_position_slider = self.subquote_position_slider.clone();
self.subquote_position.set_callback(move |f| {
let mut prop = properties.write().unwrap();
let mut prop = rw_write!(properties);
prop.subquote_position = f.value();
subquote_position_slider.set_value(f.value());
prop.is_saved = false;
@ -894,7 +893,7 @@ impl MainWindow {
let sender = self.sender.clone();
let mut subquote_position = self.subquote_position.clone();
self.subquote_position_slider.set_callback(move |f| {
let mut prop = properties.write().unwrap();
let mut prop = rw_write!(properties);
prop.subquote_position = f.value();
subquote_position.set_value(f.value());
prop.is_saved = false;
@ -909,7 +908,7 @@ impl MainWindow {
let sender = self.sender.clone();
let mut subquote2_position_slider = self.subquote2_position_slider.clone();
self.subquote2_position.set_callback(move |f| {
let mut prop = properties.write().unwrap();
let mut prop = rw_write!(properties);
prop.subquote2_position = f.value();
subquote2_position_slider.set_value(f.value());
prop.is_saved = false;
@ -924,7 +923,7 @@ impl MainWindow {
let sender = self.sender.clone();
let mut subquote2_position = self.subquote2_position.clone();
self.subquote2_position_slider.set_callback(move |f| {
let mut prop = properties.write().unwrap();
let mut prop = rw_write!(properties);
prop.subquote2_position = f.value();
subquote2_position.set_value(f.value());
prop.is_saved = false;
@ -939,7 +938,7 @@ impl MainWindow {
let sender = self.sender.clone();
let mut tag_position_slider = self.tag_position_slider.clone();
self.tag_position.set_callback(move |f| {
let mut prop = properties.write().unwrap();
let mut prop = rw_write!(properties);
prop.tag_position = f.value();
tag_position_slider.set_value(f.value());
prop.is_saved = false;
@ -954,7 +953,7 @@ impl MainWindow {
let sender = self.sender.clone();
let mut tag_position = self.tag_position.clone();
self.tag_position_slider.set_callback(move |f| {
let mut prop = properties.write().unwrap();
let mut prop = rw_write!(properties);
prop.tag_position = f.value();
tag_position.set_value(f.value());
prop.is_saved = false;
@ -969,7 +968,7 @@ impl MainWindow {
let sender = self.sender.clone();
let mut tag2_position_slider = self.tag2_position_slider.clone();
self.tag2_position.set_callback(move |f| {
let mut prop = properties.write().unwrap();
let mut prop = rw_write!(properties);
prop.tag2_position = f.value();
tag2_position_slider.set_value(f.value());
prop.is_saved = false;
@ -984,7 +983,7 @@ impl MainWindow {
let sender = self.sender.clone();
let mut tag2_position = self.tag2_position.clone();
self.tag2_position_slider.set_callback(move |f| {
let mut prop = properties.write().unwrap();
let mut prop = rw_write!(properties);
prop.tag2_position = f.value();
tag2_position.set_value(f.value());
prop.is_saved = false;
@ -998,7 +997,7 @@ impl MainWindow {
let properties = Arc::clone(&self.properties);
let sender = self.sender.clone();
self.translucent_layer_rgb.set_callback(move |mut f| {
let mut prop = properties.write().unwrap();
let mut prop = rw_write!(properties);
let (r, g, b) = dialog::color_chooser_with_default(
"Pick a colour",
dialog::ColorMode::Byte,
@ -1022,7 +1021,7 @@ impl MainWindow {
let properties = Arc::clone(&self.properties);
let sender = self.sender.clone();
self.translucent_layer_alpha.set_callback(move |f| {
let mut prop = properties.write().unwrap();
let mut prop = rw_write!(properties);
prop.translucent_layer_color[3] = f.value() as u8;
prop.is_saved = false;
sender.send(DrawMessage::RedrawToBuffer).unwrap();
@ -1045,7 +1044,7 @@ fn load_dir(
.collect::<Vec<fs::DirEntry>>();
files.sort_by_key(|i| i.file_name());
let mut text = String::new();
let mut imgs_b = imgs.write().unwrap();
let mut imgs_b = rw_write!(imgs);
*imgs_b = vec![];
for file in files {
let path = file.path();

View File

@ -119,8 +119,8 @@ impl ImageContainer {
let img = load_image(&image_info);
let (width, height): (f64, f64) = Coord::from(img.dimensions()).into();
let config = globals::CONFIG.read().unwrap();
let mut prop = properties.write().unwrap();
let config = rw_read!(globals::CONFIG);
let mut prop = rw_write!(properties);
prop.image_info = Some(image_info.to_owned());
prop.original_dimension = (width, height);
prop.quote_position = height * config.quote_position_ratio;
@ -138,7 +138,7 @@ impl ImageContainer {
/// Resize image
pub(crate) fn apply_resize(&mut self) {
let mut prop = self.properties.write().unwrap();
let mut prop = rw_write!(self.properties);
let (width, height) = prop.dimension;
let (s_width, s_height) = ((width * 500.0) / height, 500.0);
@ -150,7 +150,7 @@ impl ImageContainer {
/// Crop Image
pub(crate) fn apply_crop(&mut self) {
let mut prop = self.properties.write().unwrap();
let mut prop = rw_write!(self.properties);
let (original_width, original_height) = prop.original_dimension;
let (origina_crop_width, origina_crop_height) =
croped_ratio(original_width, original_height);
@ -173,7 +173,7 @@ impl ImageContainer {
}
pub(crate) fn apply_crop_position(&mut self, original_x: f64, original_y: f64) {
let mut prop = self.properties.write().unwrap();
let mut prop = rw_write!(self.properties);
let (original_width, original_height) = prop.original_dimension;
prop.crop_position = Some((original_x, original_y));
@ -195,7 +195,7 @@ impl ImageContainer {
/// Redraw: Copy image from main image to buffer and draw text and all on it
pub(crate) fn redraw_to_buffer(&mut self) {
let prop = self.properties.read().unwrap();
let prop = rw_read!(self.properties);
let mut tmp = self.image.clone();
draw_layer_and_text(
@ -219,7 +219,7 @@ impl ImageContainer {
/// Save image and properities
pub(crate) fn save(&self) {
let prop = self.properties.read().unwrap();
let prop = rw_read!(self.properties);
let image_info = &prop.image_info;
let (export_path, path_properties, mut original_image) = match image_info {
Some(p) => (
@ -229,7 +229,7 @@ impl ImageContainer {
),
None => return,
};
let config = globals::CONFIG.read().unwrap();
let config = rw_read!(globals::CONFIG);
let export_format = &config.image_format;
let mut prop = prop.clone();
@ -327,7 +327,7 @@ impl ImageContainer {
}
pub(crate) fn clone_img(&self) -> Option<ImageInfo> {
let prop = self.properties.read().unwrap();
let prop = rw_read!(self.properties);
match &prop.image_info {
Some(image_info) => {
@ -360,7 +360,7 @@ impl ImageContainer {
}
pub(crate) fn delete(&self) {
let prop = self.properties.read().unwrap();
let prop = rw_read!(self.properties);
let image_info = &prop.image_info;
let (export_path, path_image, path_properties) = match image_info {
@ -505,7 +505,7 @@ impl ImageProperties {
self.tag2_position = props.tag2_position.unwrap_or(self.tag2_position);
self.translucent_layer_color = props
.translucent_layer_color
.unwrap_or(globals::CONFIG.read().unwrap().color_layer);
.unwrap_or(rw_read!(globals::CONFIG).color_layer);
}
}
@ -704,7 +704,7 @@ pub(crate) fn get_properties_path(image_info: &ImageInfo) -> PathBuf {
/// path of properties files
pub(crate) fn get_export_image_path(image_info: &ImageInfo) -> PathBuf {
let config = globals::CONFIG.read().unwrap();
let config = rw_read!(globals::CONFIG);
let export_format = &config.image_format;
let mut export = image_info
.path
@ -740,7 +740,7 @@ pub(crate) fn set_color_btn_rgba(rgba: [u8; 4], btn: &mut Button) {
/// Check if image is too small
pub(crate) fn is_too_small(width: f64, height: f64) -> bool {
let (crop_width, _) = croped_ratio(width, height);
if crop_width < globals::CONFIG.read().unwrap().minimum_width_limit {
if crop_width < rw_read!(globals::CONFIG).minimum_width_limit {
true
} else {
false
@ -758,50 +758,50 @@ pub(crate) fn croped_ratio(width: f64, height: f64) -> (f64, f64) {
/// Get required witdh to crop image from height as per image ratio
pub(crate) fn width_from_height(height: f64) -> f64 {
let (w, h) = globals::CONFIG.read().unwrap().image_ratio;
let (w, h) = rw_read!(globals::CONFIG).image_ratio;
(w * height) / h
}
/// Get required height to crop image from width as per image ratio
pub(crate) fn height_from_width(width: f64) -> f64 {
let (w, h) = globals::CONFIG.read().unwrap().image_ratio;
let (w, h) = rw_read!(globals::CONFIG).image_ratio;
(h * width) / w
}
/// Get required quote size for crop image from height as per image ratio
pub(crate) fn quote_from_height(height: f64) -> f64 {
(height * globals::CONFIG.read().unwrap().quote_font_ratio) / 5000.0
(height * rw_read!(globals::CONFIG).quote_font_ratio) / 5000.0
}
/// Get required subquote size for crop image from height as per image ratio
pub(crate) fn subquote_from_height(height: f64) -> f64 {
(height * globals::CONFIG.read().unwrap().subquote_font_ratio) / 5000.0
(height * rw_read!(globals::CONFIG).subquote_font_ratio) / 5000.0
}
/// Get required subquote2 size for crop image from height as per image ratio
pub(crate) fn subquote2_from_height(height: f64) -> f64 {
(height * globals::CONFIG.read().unwrap().subquote2_font_ratio) / 5000.0
(height * rw_read!(globals::CONFIG).subquote2_font_ratio) / 5000.0
}
/// Get required tag size for crop image from height as per image ratio
pub(crate) fn tag_from_height(height: f64) -> f64 {
(height * globals::CONFIG.read().unwrap().tag_font_ratio) / 5000.0
(height * rw_read!(globals::CONFIG).tag_font_ratio) / 5000.0
}
/// Get required tag2 size for crop image from height as per image ratio
pub(crate) fn tag2_from_height(height: f64) -> f64 {
(height * globals::CONFIG.read().unwrap().tag2_font_ratio) / 5000.0
(height * rw_read!(globals::CONFIG).tag2_font_ratio) / 5000.0
}
pub(crate) fn show_message(msg: &str) {
let a = globals::MAIN_SENDER.read().unwrap();
let a = rw_read!(globals::MAIN_SENDER);
if let Some(a) = &*a {
a.send(crate::AppMessage::Message(msg.to_owned()));
}
}
pub(crate) fn show_alert(msg: &str) {
let a = globals::MAIN_SENDER.read().unwrap();
let a = rw_read!(globals::MAIN_SENDER);
if let Some(a) = &*a {
a.send(crate::AppMessage::Alert(msg.to_owned()));
}