macro for rwlock
This commit is contained in:
parent
231ab35f7b
commit
44a3956a31
|
|
@ -171,7 +171,7 @@ impl ConfigFile {
|
||||||
None => HashMap::new(),
|
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))
|
let config_name = if (map.len() > 1 || !map.contains_key(&default_config))
|
||||||
&& map.len() != 0
|
&& map.len() != 0
|
||||||
{
|
{
|
||||||
|
|
@ -186,7 +186,7 @@ impl ConfigFile {
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Some(config) = map.get(&config_name) {
|
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();
|
return config.to_owned();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -194,7 +194,7 @@ impl ConfigFile {
|
||||||
let config = Self::default();
|
let config = Self::default();
|
||||||
let mut configs = HashMap::new();
|
let mut configs = HashMap::new();
|
||||||
configs.insert(
|
configs.insert(
|
||||||
(&*globals::CONFIG_NAME.read().unwrap()).to_owned(),
|
(&*rw_read!(globals::CONFIG_NAME)).to_owned(),
|
||||||
config.clone(),
|
config.clone(),
|
||||||
);
|
);
|
||||||
save_configs(configs);
|
save_configs(configs);
|
||||||
|
|
|
||||||
|
|
@ -510,7 +510,7 @@ impl ConfigWindow {
|
||||||
|
|
||||||
// Show to edit config
|
// Show to edit config
|
||||||
pub(crate) fn show(&mut self) -> bool {
|
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();
|
self.browse.clear();
|
||||||
for (idx, name) in self.configs.borrow().keys().enumerate() {
|
for (idx, name) in self.configs.borrow().keys().enumerate() {
|
||||||
self.browse.add(name);
|
self.browse.add(name);
|
||||||
|
|
@ -519,7 +519,7 @@ impl ConfigWindow {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*self.selected_browse_line.borrow_mut() = self.browse.value();
|
*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.quote_font.set_value(config.quote_font.as_str());
|
||||||
self.subquote_font.set_value(config.subquote_font.as_str());
|
self.subquote_font.set_value(config.subquote_font.as_str());
|
||||||
self.subquote2_font
|
self.subquote2_font
|
||||||
|
|
@ -1232,8 +1232,8 @@ impl ConfigWindow {
|
||||||
self.save_btn.set_callback(move |_| {
|
self.save_btn.set_callback(move |_| {
|
||||||
config::save_configs((*configs.borrow()).clone());
|
config::save_configs((*configs.borrow()).clone());
|
||||||
|
|
||||||
if let Some(c) = configs.borrow().get(&*globals::CONFIG_NAME.read().unwrap()) {
|
if let Some(c) = configs.borrow().get(&*rw_read!(globals::CONFIG_NAME)) {
|
||||||
*globals::CONFIG.write().unwrap() = c.to_owned();
|
*rw_write!(globals::CONFIG) = c.to_owned();
|
||||||
}
|
}
|
||||||
*did_save.borrow_mut() = true;
|
*did_save.borrow_mut() = true;
|
||||||
win.hide();
|
win.hide();
|
||||||
|
|
|
||||||
|
|
@ -113,7 +113,7 @@ impl CropWindow {
|
||||||
let mut container =
|
let mut container =
|
||||||
ImageContainer::new(path, Arc::new(RwLock::new(ImageProperties::default())));
|
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.dimension = prop.original_dimension;
|
||||||
prop.crop_position = match crop_pos {
|
prop.crop_position = match crop_pos {
|
||||||
Some(a) => Some(a),
|
Some(a) => Some(a),
|
||||||
|
|
@ -145,7 +145,7 @@ impl CropWindow {
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(cont) = &*self.container.borrow() {
|
if let Some(cont) = &*self.container.borrow() {
|
||||||
cont.properties.read().unwrap().crop_position
|
rw_read!(cont.properties).crop_position
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
@ -168,7 +168,7 @@ impl CropWindow {
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let prop = cont.properties.read().unwrap();
|
let prop = rw_read!(cont.properties);
|
||||||
let (original_width, original_height) = prop.original_dimension;
|
let (original_width, original_height) = prop.original_dimension;
|
||||||
let (original_x, original_y) = prop.crop_position.unwrap();
|
let (original_x, original_y) = prop.crop_position.unwrap();
|
||||||
let (resized_width, resized_height) = (image.width() as f64, image.height() as f64);
|
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() {
|
if let Some(cont) = &*container.borrow_mut() {
|
||||||
let image = &cont.buffer;
|
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 {
|
let (original_x, original_y) = match prop.crop_position {
|
||||||
Some(v) => v,
|
Some(v) => v,
|
||||||
|
|
@ -271,7 +271,7 @@ impl CropWindow {
|
||||||
let container = Rc::clone(&self.container);
|
let container = Rc::clone(&self.container);
|
||||||
self.win.set_callback(move |f| {
|
self.win.set_callback(move |f| {
|
||||||
if let Some(cont) = &*container.borrow_mut() {
|
if let Some(cont) = &*container.borrow_mut() {
|
||||||
cont.properties.write().unwrap().crop_position = None;
|
rw_write!(cont.properties).crop_position = None;
|
||||||
}
|
}
|
||||||
f.hide();
|
f.hide();
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -185,7 +185,7 @@ pub(crate) fn spawn_image_thread(
|
||||||
win.deactivate();
|
win.deactivate();
|
||||||
if let Some(image_info) = cont.clone_img() {
|
if let Some(image_info) = cont.clone_img() {
|
||||||
let idx = file_choice.value();
|
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());
|
imgs.insert(idx as usize, image_info.clone());
|
||||||
file_choice.insert(
|
file_choice.insert(
|
||||||
idx,
|
idx,
|
||||||
|
|
@ -207,7 +207,7 @@ pub(crate) fn spawn_image_thread(
|
||||||
status.set_label("Deleting...");
|
status.set_label("Deleting...");
|
||||||
win.deactivate();
|
win.deactivate();
|
||||||
cont.delete();
|
cont.delete();
|
||||||
let mut imgs = images_list.write().unwrap();
|
let mut imgs = rw_write!(images_list);
|
||||||
imgs.remove(file_choice.value() as usize);
|
imgs.remove(file_choice.value() as usize);
|
||||||
file_choice.remove(file_choice.value());
|
file_choice.remove(file_choice.value());
|
||||||
if file_choice.value() != imgs.len() as i32 {
|
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::ShowImagesDetails => show_images_details(Arc::clone(&images_list)),
|
||||||
DrawMessage::CheckImage => {
|
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) {
|
if utils::is_too_small(width, height) {
|
||||||
let a = globals::MAIN_SENDER.read().unwrap();
|
if let Some(a) = &*rw_read!(globals::MAIN_SENDER) {
|
||||||
if let Some(a) = &*a {
|
|
||||||
a.send(crate::AppMessage::DeleteImage);
|
a.send(crate::AppMessage::DeleteImage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -265,7 +264,7 @@ fn load_image(
|
||||||
properties: Arc<RwLock<ImageProperties>>,
|
properties: Arc<RwLock<ImageProperties>>,
|
||||||
container: &mut Option<ImageContainer>,
|
container: &mut Option<ImageContainer>,
|
||||||
) {
|
) {
|
||||||
let imgs = images_list.read().unwrap();
|
let imgs = rw_read!(images_list);
|
||||||
if imgs.len() == 0 {
|
if imgs.len() == 0 {
|
||||||
*container = None;
|
*container = None;
|
||||||
flush_buffer(app_sender, container);
|
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.merge(read, &tag.value(), &tag2.value());
|
||||||
properties.is_saved = true;
|
properties.is_saved = true;
|
||||||
|
|
||||||
|
|
@ -344,7 +343,7 @@ fn load_image(
|
||||||
}
|
}
|
||||||
|
|
||||||
cont.apply_resize();
|
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.col_flex.set_size(&page.image, height as i32);
|
||||||
page.row_flex.set_size(&page.col_flex, width as i32);
|
page.row_flex.set_size(&page.col_flex, width as i32);
|
||||||
page.col_flex.recalc();
|
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_with_quote: usize = 0;
|
||||||
let mut image_without_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() {
|
for image_info in list.iter() {
|
||||||
let properties_file = utils::get_properties_path(&image_info);
|
let properties_file = utils::get_properties_path(&image_info);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ lazy_static! {
|
||||||
/// TTF Font for Quote
|
/// TTF Font for Quote
|
||||||
pub(crate) static ref FONT_QUOTE: Font<'static> = {
|
pub(crate) static ref FONT_QUOTE: Font<'static> = {
|
||||||
let mut buffer = Vec::new();
|
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 Ok(_) = file.read_to_end(&mut buffer) {
|
||||||
if let Some(out) = rusttype::Font::try_from_vec(buffer) {
|
if let Some(out) = rusttype::Font::try_from_vec(buffer) {
|
||||||
return out;
|
return out;
|
||||||
|
|
@ -51,7 +51,7 @@ lazy_static! {
|
||||||
/// TTF Font for Subquote
|
/// TTF Font for Subquote
|
||||||
pub(crate) static ref FONT_SUBQUOTE: Font<'static> = {
|
pub(crate) static ref FONT_SUBQUOTE: Font<'static> = {
|
||||||
let mut buffer = Vec::new();
|
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 Ok(_) = file.read_to_end(&mut buffer) {
|
||||||
if let Some(out) = rusttype::Font::try_from_vec(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> = {
|
pub(crate) static ref FONT_SUBQUOTE2: Font<'static> = {
|
||||||
let mut buffer = Vec::new();
|
let mut buffer = Vec::new();
|
||||||
if let Ok(mut file) =
|
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 Ok(_) = file.read_to_end(&mut buffer) {
|
||||||
if let Some(out) = rusttype::Font::try_from_vec(buffer) {
|
if let Some(out) = rusttype::Font::try_from_vec(buffer) {
|
||||||
|
|
@ -86,7 +86,7 @@ lazy_static! {
|
||||||
/// TTF Font for Tag
|
/// TTF Font for Tag
|
||||||
pub(crate) static ref FONT_TAG: Font<'static> = {
|
pub(crate) static ref FONT_TAG: Font<'static> = {
|
||||||
let mut buffer = Vec::new();
|
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 Ok(_) = file.read_to_end(&mut buffer) {
|
||||||
if let Some(out) = rusttype::Font::try_from_vec(buffer) {
|
if let Some(out) = rusttype::Font::try_from_vec(buffer) {
|
||||||
return out;
|
return out;
|
||||||
|
|
@ -100,7 +100,7 @@ lazy_static! {
|
||||||
/// TTF Font for Tag 2
|
/// TTF Font for Tag 2
|
||||||
pub(crate) static ref FONT_TAG2: Font<'static> = {
|
pub(crate) static ref FONT_TAG2: Font<'static> = {
|
||||||
let mut buffer = Vec::new();
|
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 Ok(_) = file.read_to_end(&mut buffer) {
|
||||||
if let Some(out) = rusttype::Font::try_from_vec(buffer) {
|
if let Some(out) = rusttype::Font::try_from_vec(buffer) {
|
||||||
return out;
|
return out;
|
||||||
|
|
|
||||||
|
|
@ -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!")
|
||||||
|
};
|
||||||
|
}
|
||||||
27
src/main.rs
27
src/main.rs
|
|
@ -17,17 +17,20 @@
|
||||||
extern crate log;
|
extern crate log;
|
||||||
extern crate simplelog;
|
extern crate simplelog;
|
||||||
|
|
||||||
mod dialog;
|
#[macro_use]
|
||||||
|
mod macros;
|
||||||
|
|
||||||
mod about_window;
|
mod about_window;
|
||||||
mod config;
|
mod config;
|
||||||
mod config_picker;
|
mod config_picker;
|
||||||
mod config_window;
|
mod config_window;
|
||||||
mod crop_window;
|
mod crop_window;
|
||||||
|
mod dialog;
|
||||||
mod draw_thread;
|
mod draw_thread;
|
||||||
mod globals;
|
mod globals;
|
||||||
mod main_window;
|
mod main_window;
|
||||||
mod utils;
|
|
||||||
mod result_ext;
|
mod result_ext;
|
||||||
|
mod utils;
|
||||||
|
|
||||||
use fltk::{
|
use fltk::{
|
||||||
app::{channel, App},
|
app::{channel, App},
|
||||||
|
|
@ -47,7 +50,7 @@ pub(crate) enum AppMessage {
|
||||||
Alert(String),
|
Alert(String),
|
||||||
|
|
||||||
// Only for Main windows
|
// Only for Main windows
|
||||||
DeleteImage
|
DeleteImage,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
|
@ -73,28 +76,32 @@ fn main() {
|
||||||
let draw_buff: Arc<RwLock<Option<Vec<u8>>>> = Arc::new(RwLock::new(None));
|
let draw_buff: Arc<RwLock<Option<Vec<u8>>>> = Arc::new(RwLock::new(None));
|
||||||
|
|
||||||
let (main_sender, main_receiver) = channel::<AppMessage>();
|
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));
|
let mut main_window = MainWindow::new(Arc::clone(&draw_buff));
|
||||||
|
|
||||||
while app.wait() {
|
while app.wait() {
|
||||||
if let Some(msg) = main_receiver.recv() {
|
if let Some(msg) = main_receiver.recv() {
|
||||||
match msg {
|
match msg {
|
||||||
AppMessage::RedrawMainWindowImage(data) => {
|
AppMessage::RedrawMainWindowImage(data) => {
|
||||||
let mut buff = draw_buff.write().unwrap();
|
let mut buff = rw_write!(draw_buff);
|
||||||
*buff = data;
|
*buff = data;
|
||||||
main_window.win.redraw();
|
main_window.win.redraw();
|
||||||
}
|
}
|
||||||
AppMessage::Message(msg) => {
|
AppMessage::Message(msg) => {
|
||||||
dialog::message_default(&msg);
|
dialog::message_default(&msg);
|
||||||
}
|
}
|
||||||
AppMessage::Alert(msg) => {
|
AppMessage::Alert(msg) => dialog::alert_default(&msg),
|
||||||
dialog::alert_default(&msg)
|
|
||||||
}
|
|
||||||
AppMessage::DeleteImage => {
|
AppMessage::DeleteImage => {
|
||||||
let ch = dialog::choice_default("Image is too small", "Delete", "Keep");
|
let ch = dialog::choice_default("Image is too small", "Delete", "Keep");
|
||||||
if ch == 0 {
|
if ch == 0 {
|
||||||
main_window.sender.send(draw_thread::DrawMessage::Delete).unwrap();
|
main_window
|
||||||
main_window.sender.send(draw_thread::DrawMessage::Open).unwrap();
|
.sender
|
||||||
|
.send(draw_thread::DrawMessage::Delete)
|
||||||
|
.unwrap();
|
||||||
|
main_window
|
||||||
|
.sender
|
||||||
|
.send(draw_thread::DrawMessage::Open)
|
||||||
|
.unwrap();
|
||||||
main_window.page.image.redraw();
|
main_window.page.image.redraw();
|
||||||
main_window.file_choice.redraw();
|
main_window.file_choice.redraw();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -397,8 +397,7 @@ impl MainWindow {
|
||||||
sender: rx,
|
sender: rx,
|
||||||
};
|
};
|
||||||
|
|
||||||
let a = globals::MAIN_SENDER.read().unwrap();
|
if let Some(a) = &*rw_read!(globals::MAIN_SENDER) {
|
||||||
if let Some(a) = &*a {
|
|
||||||
spawn_image_thread(tx, a.to_owned(), Arc::clone(&properties), &main_win);
|
spawn_image_thread(tx, a.to_owned(), Arc::clone(&properties), &main_win);
|
||||||
}
|
}
|
||||||
main_win.menu();
|
main_win.menu();
|
||||||
|
|
@ -450,7 +449,7 @@ impl MainWindow {
|
||||||
Shortcut::Ctrl | 's',
|
Shortcut::Ctrl | 's',
|
||||||
menu::MenuFlag::Normal,
|
menu::MenuFlag::Normal,
|
||||||
move |_| {
|
move |_| {
|
||||||
let mut prop = properties.write().unwrap();
|
let mut prop = rw_write!(properties);
|
||||||
prop.is_saved = true;
|
prop.is_saved = true;
|
||||||
sender.send(DrawMessage::Save).unwrap();
|
sender.send(DrawMessage::Save).unwrap();
|
||||||
},
|
},
|
||||||
|
|
@ -498,8 +497,8 @@ impl MainWindow {
|
||||||
let buff = Arc::clone(&self.draw_buff);
|
let buff = Arc::clone(&self.draw_buff);
|
||||||
let properties = Arc::clone(&self.properties);
|
let properties = Arc::clone(&self.properties);
|
||||||
self.page.image.draw(move |f| {
|
self.page.image.draw(move |f| {
|
||||||
let (width, height) = properties.read().unwrap().dimension;
|
let (width, height) = rw_read!(properties).dimension;
|
||||||
if let Some(image) = &*buff.read().unwrap() {
|
if let Some(image) = &*rw_read!(buff) {
|
||||||
dr::draw_image(
|
dr::draw_image(
|
||||||
&image,
|
&image,
|
||||||
f.x(),
|
f.x(),
|
||||||
|
|
@ -520,7 +519,7 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
let imgs = Arc::clone(&self.images_list);
|
let imgs = Arc::clone(&self.images_list);
|
||||||
self.reset_file_choice.set_callback(move |_| {
|
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(),
|
Some(image_info) => image_info.path.parent().unwrap().to_path_buf(),
|
||||||
None => return,
|
None => return,
|
||||||
};
|
};
|
||||||
|
|
@ -534,8 +533,8 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
let properties = Arc::clone(&self.properties);
|
let properties = Arc::clone(&self.properties);
|
||||||
self.reset_translucent_layer_btn.set_callback(move |_| {
|
self.reset_translucent_layer_btn.set_callback(move |_| {
|
||||||
let mut prop = properties.write().unwrap();
|
let mut prop = rw_write!(properties);
|
||||||
let color = globals::CONFIG.read().unwrap().color_layer;
|
let color = rw_read!(globals::CONFIG).color_layer;
|
||||||
prop.translucent_layer_color = color;
|
prop.translucent_layer_color = color;
|
||||||
prop.is_saved = false;
|
prop.is_saved = false;
|
||||||
utils::set_color_btn_rgba(color, &mut layer_rgb);
|
utils::set_color_btn_rgba(color, &mut layer_rgb);
|
||||||
|
|
@ -552,9 +551,9 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
let properties = Arc::clone(&self.properties);
|
let properties = Arc::clone(&self.properties);
|
||||||
self.reset_quote_position_btn.set_callback(move |_| {
|
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 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.quote_position = pos;
|
||||||
prop.is_saved = false;
|
prop.is_saved = false;
|
||||||
quote_position.set_value(pos);
|
quote_position.set_value(pos);
|
||||||
|
|
@ -572,9 +571,9 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
let properties = Arc::clone(&self.properties);
|
let properties = Arc::clone(&self.properties);
|
||||||
self.reset_subquote_position_btn.set_callback(move |_| {
|
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 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.subquote_position = pos;
|
||||||
prop.is_saved = false;
|
prop.is_saved = false;
|
||||||
subquote_position.set_value(pos);
|
subquote_position.set_value(pos);
|
||||||
|
|
@ -592,9 +591,9 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
let properties = Arc::clone(&self.properties);
|
let properties = Arc::clone(&self.properties);
|
||||||
self.reset_subquote2_position_btn.set_callback(move |_| {
|
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 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.subquote2_position = pos;
|
||||||
prop.is_saved = false;
|
prop.is_saved = false;
|
||||||
subquote2_position.set_value(pos);
|
subquote2_position.set_value(pos);
|
||||||
|
|
@ -612,9 +611,9 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
let properties = Arc::clone(&self.properties);
|
let properties = Arc::clone(&self.properties);
|
||||||
self.reset_tag_position_btn.set_callback(move |_| {
|
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 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.tag_position = pos;
|
||||||
prop.is_saved = false;
|
prop.is_saved = false;
|
||||||
tag_position.set_value(pos);
|
tag_position.set_value(pos);
|
||||||
|
|
@ -632,9 +631,9 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
let properties = Arc::clone(&self.properties);
|
let properties = Arc::clone(&self.properties);
|
||||||
self.reset_tag2_position_btn.set_callback(move |_| {
|
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 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.tag2_position = pos;
|
||||||
prop.is_saved = false;
|
prop.is_saved = false;
|
||||||
tag2_position.set_value(pos);
|
tag2_position.set_value(pos);
|
||||||
|
|
@ -649,7 +648,7 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
let properties = Arc::clone(&self.properties);
|
let properties = Arc::clone(&self.properties);
|
||||||
self.save_btn.set_callback(move |_| {
|
self.save_btn.set_callback(move |_| {
|
||||||
let mut prop = properties.write().unwrap();
|
let mut prop = rw_write!(properties);
|
||||||
prop.is_saved = true;
|
prop.is_saved = true;
|
||||||
sender.send(DrawMessage::Save).unwrap()
|
sender.send(DrawMessage::Save).unwrap()
|
||||||
});
|
});
|
||||||
|
|
@ -689,7 +688,7 @@ impl MainWindow {
|
||||||
let mut crop_win = CropWindow::new();
|
let mut crop_win = CropWindow::new();
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
self.crop_btn.set_callback(move |_| {
|
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(image_info) = &prop.image_info {
|
||||||
if let Some((x, y)) = crop_win.load_to_crop(&image_info, prop.crop_position) {
|
if let Some((x, y)) = crop_win.load_to_crop(&image_info, prop.crop_position) {
|
||||||
sender.send(DrawMessage::ChangeCrop((x, y))).unwrap();
|
sender.send(DrawMessage::ChangeCrop((x, y))).unwrap();
|
||||||
|
|
@ -703,7 +702,7 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
let properties = Arc::clone(&self.properties);
|
let properties = Arc::clone(&self.properties);
|
||||||
self.next_btn.set_callback(move |_| {
|
self.next_btn.set_callback(move |_| {
|
||||||
let prop = properties.read().unwrap();
|
let prop = rw_read!(properties);
|
||||||
if !prop.is_saved {
|
if !prop.is_saved {
|
||||||
let save = fltk::dialog::choice_default("Save?", "yes", "no", "cancel");
|
let save = fltk::dialog::choice_default("Save?", "yes", "no", "cancel");
|
||||||
match save {
|
match save {
|
||||||
|
|
@ -727,7 +726,7 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
let properties = Arc::clone(&self.properties);
|
let properties = Arc::clone(&self.properties);
|
||||||
self.back_btn.set_callback(move |_| {
|
self.back_btn.set_callback(move |_| {
|
||||||
let prop = properties.read().unwrap();
|
let prop = rw_read!(properties);
|
||||||
if !prop.is_saved {
|
if !prop.is_saved {
|
||||||
let save = fltk::dialog::choice_default("Save?", "yes", "no", "cancel");
|
let save = fltk::dialog::choice_default("Save?", "yes", "no", "cancel");
|
||||||
match save {
|
match save {
|
||||||
|
|
@ -750,7 +749,7 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
let properties = Arc::clone(&self.properties);
|
let properties = Arc::clone(&self.properties);
|
||||||
self.file_choice.set_callback(move |_| {
|
self.file_choice.set_callback(move |_| {
|
||||||
let prop = properties.read().unwrap();
|
let prop = rw_read!(properties);
|
||||||
if !prop.is_saved {
|
if !prop.is_saved {
|
||||||
let save = fltk::dialog::choice_default("Save?", "yes", "no", "cancel");
|
let save = fltk::dialog::choice_default("Save?", "yes", "no", "cancel");
|
||||||
match save {
|
match save {
|
||||||
|
|
@ -769,7 +768,7 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
self.quote.handle(move |f, ev| {
|
self.quote.handle(move |f, ev| {
|
||||||
if ev == enums::Event::KeyUp {
|
if ev == enums::Event::KeyUp {
|
||||||
let mut prop = properties.write().unwrap();
|
let mut prop = rw_write!(properties);
|
||||||
prop.quote = f.value();
|
prop.quote = f.value();
|
||||||
prop.is_saved = false;
|
prop.is_saved = false;
|
||||||
sender.send(DrawMessage::RedrawToBuffer).unwrap();
|
sender.send(DrawMessage::RedrawToBuffer).unwrap();
|
||||||
|
|
@ -785,7 +784,7 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
self.subquote.handle(move |f, ev| {
|
self.subquote.handle(move |f, ev| {
|
||||||
if ev == enums::Event::KeyUp {
|
if ev == enums::Event::KeyUp {
|
||||||
let mut prop = properties.write().unwrap();
|
let mut prop = rw_write!(properties);
|
||||||
prop.subquote = f.value();
|
prop.subquote = f.value();
|
||||||
prop.is_saved = false;
|
prop.is_saved = false;
|
||||||
sender.send(DrawMessage::RedrawToBuffer).unwrap();
|
sender.send(DrawMessage::RedrawToBuffer).unwrap();
|
||||||
|
|
@ -801,7 +800,7 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
self.subquote2.handle(move |f, ev| {
|
self.subquote2.handle(move |f, ev| {
|
||||||
if ev == enums::Event::KeyUp {
|
if ev == enums::Event::KeyUp {
|
||||||
let mut prop = properties.write().unwrap();
|
let mut prop = rw_write!(properties);
|
||||||
prop.subquote2 = f.value();
|
prop.subquote2 = f.value();
|
||||||
prop.is_saved = false;
|
prop.is_saved = false;
|
||||||
sender.send(DrawMessage::RedrawToBuffer).unwrap();
|
sender.send(DrawMessage::RedrawToBuffer).unwrap();
|
||||||
|
|
@ -817,7 +816,7 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
self.tag.handle(move |f, ev| {
|
self.tag.handle(move |f, ev| {
|
||||||
if ev == enums::Event::KeyUp {
|
if ev == enums::Event::KeyUp {
|
||||||
let mut prop = properties.write().unwrap();
|
let mut prop = rw_write!(properties);
|
||||||
prop.tag = f.value();
|
prop.tag = f.value();
|
||||||
prop.is_saved = false;
|
prop.is_saved = false;
|
||||||
sender.send(DrawMessage::RedrawToBuffer).unwrap();
|
sender.send(DrawMessage::RedrawToBuffer).unwrap();
|
||||||
|
|
@ -833,7 +832,7 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
self.tag2.handle(move |f, ev| {
|
self.tag2.handle(move |f, ev| {
|
||||||
if ev == enums::Event::KeyUp {
|
if ev == enums::Event::KeyUp {
|
||||||
let mut prop = properties.write().unwrap();
|
let mut prop = rw_write!(properties);
|
||||||
prop.tag2 = f.value();
|
prop.tag2 = f.value();
|
||||||
prop.is_saved = false;
|
prop.is_saved = false;
|
||||||
sender.send(DrawMessage::RedrawToBuffer).unwrap();
|
sender.send(DrawMessage::RedrawToBuffer).unwrap();
|
||||||
|
|
@ -849,7 +848,7 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
let mut quote_position_slider = self.quote_position_slider.clone();
|
let mut quote_position_slider = self.quote_position_slider.clone();
|
||||||
self.quote_position.set_callback(move |f| {
|
self.quote_position.set_callback(move |f| {
|
||||||
let mut prop = properties.write().unwrap();
|
let mut prop = rw_write!(properties);
|
||||||
prop.quote_position = f.value();
|
prop.quote_position = f.value();
|
||||||
quote_position_slider.set_value(f.value());
|
quote_position_slider.set_value(f.value());
|
||||||
prop.is_saved = false;
|
prop.is_saved = false;
|
||||||
|
|
@ -864,7 +863,7 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
let mut quote_position = self.quote_position.clone();
|
let mut quote_position = self.quote_position.clone();
|
||||||
self.quote_position_slider.set_callback(move |f| {
|
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();
|
prop.quote_position = f.value();
|
||||||
quote_position.set_value(f.value());
|
quote_position.set_value(f.value());
|
||||||
prop.is_saved = false;
|
prop.is_saved = false;
|
||||||
|
|
@ -879,7 +878,7 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
let mut subquote_position_slider = self.subquote_position_slider.clone();
|
let mut subquote_position_slider = self.subquote_position_slider.clone();
|
||||||
self.subquote_position.set_callback(move |f| {
|
self.subquote_position.set_callback(move |f| {
|
||||||
let mut prop = properties.write().unwrap();
|
let mut prop = rw_write!(properties);
|
||||||
prop.subquote_position = f.value();
|
prop.subquote_position = f.value();
|
||||||
subquote_position_slider.set_value(f.value());
|
subquote_position_slider.set_value(f.value());
|
||||||
prop.is_saved = false;
|
prop.is_saved = false;
|
||||||
|
|
@ -894,7 +893,7 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
let mut subquote_position = self.subquote_position.clone();
|
let mut subquote_position = self.subquote_position.clone();
|
||||||
self.subquote_position_slider.set_callback(move |f| {
|
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();
|
prop.subquote_position = f.value();
|
||||||
subquote_position.set_value(f.value());
|
subquote_position.set_value(f.value());
|
||||||
prop.is_saved = false;
|
prop.is_saved = false;
|
||||||
|
|
@ -909,7 +908,7 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
let mut subquote2_position_slider = self.subquote2_position_slider.clone();
|
let mut subquote2_position_slider = self.subquote2_position_slider.clone();
|
||||||
self.subquote2_position.set_callback(move |f| {
|
self.subquote2_position.set_callback(move |f| {
|
||||||
let mut prop = properties.write().unwrap();
|
let mut prop = rw_write!(properties);
|
||||||
prop.subquote2_position = f.value();
|
prop.subquote2_position = f.value();
|
||||||
subquote2_position_slider.set_value(f.value());
|
subquote2_position_slider.set_value(f.value());
|
||||||
prop.is_saved = false;
|
prop.is_saved = false;
|
||||||
|
|
@ -924,7 +923,7 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
let mut subquote2_position = self.subquote2_position.clone();
|
let mut subquote2_position = self.subquote2_position.clone();
|
||||||
self.subquote2_position_slider.set_callback(move |f| {
|
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();
|
prop.subquote2_position = f.value();
|
||||||
subquote2_position.set_value(f.value());
|
subquote2_position.set_value(f.value());
|
||||||
prop.is_saved = false;
|
prop.is_saved = false;
|
||||||
|
|
@ -939,7 +938,7 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
let mut tag_position_slider = self.tag_position_slider.clone();
|
let mut tag_position_slider = self.tag_position_slider.clone();
|
||||||
self.tag_position.set_callback(move |f| {
|
self.tag_position.set_callback(move |f| {
|
||||||
let mut prop = properties.write().unwrap();
|
let mut prop = rw_write!(properties);
|
||||||
prop.tag_position = f.value();
|
prop.tag_position = f.value();
|
||||||
tag_position_slider.set_value(f.value());
|
tag_position_slider.set_value(f.value());
|
||||||
prop.is_saved = false;
|
prop.is_saved = false;
|
||||||
|
|
@ -954,7 +953,7 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
let mut tag_position = self.tag_position.clone();
|
let mut tag_position = self.tag_position.clone();
|
||||||
self.tag_position_slider.set_callback(move |f| {
|
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();
|
prop.tag_position = f.value();
|
||||||
tag_position.set_value(f.value());
|
tag_position.set_value(f.value());
|
||||||
prop.is_saved = false;
|
prop.is_saved = false;
|
||||||
|
|
@ -969,7 +968,7 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
let mut tag2_position_slider = self.tag2_position_slider.clone();
|
let mut tag2_position_slider = self.tag2_position_slider.clone();
|
||||||
self.tag2_position.set_callback(move |f| {
|
self.tag2_position.set_callback(move |f| {
|
||||||
let mut prop = properties.write().unwrap();
|
let mut prop = rw_write!(properties);
|
||||||
prop.tag2_position = f.value();
|
prop.tag2_position = f.value();
|
||||||
tag2_position_slider.set_value(f.value());
|
tag2_position_slider.set_value(f.value());
|
||||||
prop.is_saved = false;
|
prop.is_saved = false;
|
||||||
|
|
@ -984,7 +983,7 @@ impl MainWindow {
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
let mut tag2_position = self.tag2_position.clone();
|
let mut tag2_position = self.tag2_position.clone();
|
||||||
self.tag2_position_slider.set_callback(move |f| {
|
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();
|
prop.tag2_position = f.value();
|
||||||
tag2_position.set_value(f.value());
|
tag2_position.set_value(f.value());
|
||||||
prop.is_saved = false;
|
prop.is_saved = false;
|
||||||
|
|
@ -998,7 +997,7 @@ impl MainWindow {
|
||||||
let properties = Arc::clone(&self.properties);
|
let properties = Arc::clone(&self.properties);
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
self.translucent_layer_rgb.set_callback(move |mut f| {
|
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(
|
let (r, g, b) = dialog::color_chooser_with_default(
|
||||||
"Pick a colour",
|
"Pick a colour",
|
||||||
dialog::ColorMode::Byte,
|
dialog::ColorMode::Byte,
|
||||||
|
|
@ -1022,7 +1021,7 @@ impl MainWindow {
|
||||||
let properties = Arc::clone(&self.properties);
|
let properties = Arc::clone(&self.properties);
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
self.translucent_layer_alpha.set_callback(move |f| {
|
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.translucent_layer_color[3] = f.value() as u8;
|
||||||
prop.is_saved = false;
|
prop.is_saved = false;
|
||||||
sender.send(DrawMessage::RedrawToBuffer).unwrap();
|
sender.send(DrawMessage::RedrawToBuffer).unwrap();
|
||||||
|
|
@ -1045,7 +1044,7 @@ fn load_dir(
|
||||||
.collect::<Vec<fs::DirEntry>>();
|
.collect::<Vec<fs::DirEntry>>();
|
||||||
files.sort_by_key(|i| i.file_name());
|
files.sort_by_key(|i| i.file_name());
|
||||||
let mut text = String::new();
|
let mut text = String::new();
|
||||||
let mut imgs_b = imgs.write().unwrap();
|
let mut imgs_b = rw_write!(imgs);
|
||||||
*imgs_b = vec![];
|
*imgs_b = vec![];
|
||||||
for file in files {
|
for file in files {
|
||||||
let path = file.path();
|
let path = file.path();
|
||||||
|
|
|
||||||
44
src/utils.rs
44
src/utils.rs
|
|
@ -119,8 +119,8 @@ impl ImageContainer {
|
||||||
let img = load_image(&image_info);
|
let img = load_image(&image_info);
|
||||||
let (width, height): (f64, f64) = Coord::from(img.dimensions()).into();
|
let (width, height): (f64, f64) = Coord::from(img.dimensions()).into();
|
||||||
|
|
||||||
let config = globals::CONFIG.read().unwrap();
|
let config = rw_read!(globals::CONFIG);
|
||||||
let mut prop = properties.write().unwrap();
|
let mut prop = rw_write!(properties);
|
||||||
prop.image_info = Some(image_info.to_owned());
|
prop.image_info = Some(image_info.to_owned());
|
||||||
prop.original_dimension = (width, height);
|
prop.original_dimension = (width, height);
|
||||||
prop.quote_position = height * config.quote_position_ratio;
|
prop.quote_position = height * config.quote_position_ratio;
|
||||||
|
|
@ -138,7 +138,7 @@ impl ImageContainer {
|
||||||
|
|
||||||
/// Resize image
|
/// Resize image
|
||||||
pub(crate) fn apply_resize(&mut self) {
|
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 (width, height) = prop.dimension;
|
||||||
let (s_width, s_height) = ((width * 500.0) / height, 500.0);
|
let (s_width, s_height) = ((width * 500.0) / height, 500.0);
|
||||||
|
|
||||||
|
|
@ -150,7 +150,7 @@ impl ImageContainer {
|
||||||
|
|
||||||
/// Crop Image
|
/// Crop Image
|
||||||
pub(crate) fn apply_crop(&mut self) {
|
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 (original_width, original_height) = prop.original_dimension;
|
||||||
let (origina_crop_width, origina_crop_height) =
|
let (origina_crop_width, origina_crop_height) =
|
||||||
croped_ratio(original_width, original_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) {
|
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;
|
let (original_width, original_height) = prop.original_dimension;
|
||||||
prop.crop_position = Some((original_x, original_y));
|
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
|
/// Redraw: Copy image from main image to buffer and draw text and all on it
|
||||||
pub(crate) fn redraw_to_buffer(&mut self) {
|
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();
|
let mut tmp = self.image.clone();
|
||||||
|
|
||||||
draw_layer_and_text(
|
draw_layer_and_text(
|
||||||
|
|
@ -219,7 +219,7 @@ impl ImageContainer {
|
||||||
|
|
||||||
/// Save image and properities
|
/// Save image and properities
|
||||||
pub(crate) fn save(&self) {
|
pub(crate) fn save(&self) {
|
||||||
let prop = self.properties.read().unwrap();
|
let prop = rw_read!(self.properties);
|
||||||
let image_info = &prop.image_info;
|
let image_info = &prop.image_info;
|
||||||
let (export_path, path_properties, mut original_image) = match image_info {
|
let (export_path, path_properties, mut original_image) = match image_info {
|
||||||
Some(p) => (
|
Some(p) => (
|
||||||
|
|
@ -229,7 +229,7 @@ impl ImageContainer {
|
||||||
),
|
),
|
||||||
None => return,
|
None => return,
|
||||||
};
|
};
|
||||||
let config = globals::CONFIG.read().unwrap();
|
let config = rw_read!(globals::CONFIG);
|
||||||
let export_format = &config.image_format;
|
let export_format = &config.image_format;
|
||||||
|
|
||||||
let mut prop = prop.clone();
|
let mut prop = prop.clone();
|
||||||
|
|
@ -327,7 +327,7 @@ impl ImageContainer {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn clone_img(&self) -> Option<ImageInfo> {
|
pub(crate) fn clone_img(&self) -> Option<ImageInfo> {
|
||||||
let prop = self.properties.read().unwrap();
|
let prop = rw_read!(self.properties);
|
||||||
|
|
||||||
match &prop.image_info {
|
match &prop.image_info {
|
||||||
Some(image_info) => {
|
Some(image_info) => {
|
||||||
|
|
@ -360,7 +360,7 @@ impl ImageContainer {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn delete(&self) {
|
pub(crate) fn delete(&self) {
|
||||||
let prop = self.properties.read().unwrap();
|
let prop = rw_read!(self.properties);
|
||||||
|
|
||||||
let image_info = &prop.image_info;
|
let image_info = &prop.image_info;
|
||||||
let (export_path, path_image, path_properties) = match 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.tag2_position = props.tag2_position.unwrap_or(self.tag2_position);
|
||||||
self.translucent_layer_color = props
|
self.translucent_layer_color = props
|
||||||
.translucent_layer_color
|
.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
|
/// path of properties files
|
||||||
pub(crate) fn get_export_image_path(image_info: &ImageInfo) -> PathBuf {
|
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 export_format = &config.image_format;
|
||||||
let mut export = image_info
|
let mut export = image_info
|
||||||
.path
|
.path
|
||||||
|
|
@ -740,7 +740,7 @@ pub(crate) fn set_color_btn_rgba(rgba: [u8; 4], btn: &mut Button) {
|
||||||
/// Check if image is too small
|
/// Check if image is too small
|
||||||
pub(crate) fn is_too_small(width: f64, height: f64) -> bool {
|
pub(crate) fn is_too_small(width: f64, height: f64) -> bool {
|
||||||
let (crop_width, _) = croped_ratio(width, height);
|
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
|
true
|
||||||
} else {
|
} else {
|
||||||
false
|
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
|
/// Get required witdh to crop image from height as per image ratio
|
||||||
pub(crate) fn width_from_height(height: f64) -> f64 {
|
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
|
(w * height) / h
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get required height to crop image from width as per image ratio
|
/// Get required height to crop image from width as per image ratio
|
||||||
pub(crate) fn height_from_width(width: f64) -> f64 {
|
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
|
(h * width) / w
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get required quote size for crop image from height as per image ratio
|
/// Get required quote size for crop image from height as per image ratio
|
||||||
pub(crate) fn quote_from_height(height: f64) -> f64 {
|
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
|
/// Get required subquote size for crop image from height as per image ratio
|
||||||
pub(crate) fn subquote_from_height(height: f64) -> f64 {
|
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
|
/// Get required subquote2 size for crop image from height as per image ratio
|
||||||
pub(crate) fn subquote2_from_height(height: f64) -> f64 {
|
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
|
/// Get required tag size for crop image from height as per image ratio
|
||||||
pub(crate) fn tag_from_height(height: f64) -> f64 {
|
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
|
/// Get required tag2 size for crop image from height as per image ratio
|
||||||
pub(crate) fn tag2_from_height(height: f64) -> f64 {
|
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) {
|
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 {
|
if let Some(a) = &*a {
|
||||||
a.send(crate::AppMessage::Message(msg.to_owned()));
|
a.send(crate::AppMessage::Message(msg.to_owned()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn show_alert(msg: &str) {
|
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 {
|
if let Some(a) = &*a {
|
||||||
a.send(crate::AppMessage::Alert(msg.to_owned()));
|
a.send(crate::AppMessage::Alert(msg.to_owned()));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue