Added reset button and minor typo in draw threads
This commit is contained in:
parent
750998b987
commit
3b0c3088fb
|
|
@ -161,7 +161,7 @@ fn load_image(
|
||||||
prop.quote = saved_prop.quote;
|
prop.quote = saved_prop.quote;
|
||||||
prop.tag = saved_prop.tag;
|
prop.tag = saved_prop.tag;
|
||||||
prop.quote_position = saved_prop.quote_position;
|
prop.quote_position = saved_prop.quote_position;
|
||||||
prop.tag_position = saved_prop.quote_position;
|
prop.tag_position = saved_prop.tag_position;
|
||||||
prop.rgba = saved_prop.rgba;
|
prop.rgba = saved_prop.rgba;
|
||||||
prop.is_saved = true;
|
prop.is_saved = true;
|
||||||
use_defaults = false;
|
use_defaults = false;
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,9 @@ pub(crate) struct MainWindow {
|
||||||
pub(crate) layer_alpha: Spinner,
|
pub(crate) layer_alpha: Spinner,
|
||||||
pub(crate) quote_position: Spinner,
|
pub(crate) quote_position: Spinner,
|
||||||
pub(crate) tag_position: Spinner,
|
pub(crate) tag_position: Spinner,
|
||||||
|
pub(crate) reset_darklayer_btn: Button,
|
||||||
|
pub(crate) reset_quote_position_btn: Button,
|
||||||
|
pub(crate) reset_tag_position_btn: Button,
|
||||||
pub(crate) crop_btn: Button,
|
pub(crate) crop_btn: Button,
|
||||||
pub(crate) status: Frame,
|
pub(crate) status: Frame,
|
||||||
pub(crate) page: Page,
|
pub(crate) page: Page,
|
||||||
|
|
@ -82,7 +85,7 @@ impl MainWindow {
|
||||||
&Frame::default()
|
&Frame::default()
|
||||||
.with_label("Quote:")
|
.with_label("Quote:")
|
||||||
.with_align(enums::Align::Left | enums::Align::Inside),
|
.with_align(enums::Align::Left | enums::Align::Inside),
|
||||||
20,
|
30,
|
||||||
);
|
);
|
||||||
let quote = MultilineInput::default();
|
let quote = MultilineInput::default();
|
||||||
controls_flex.set_size("e, 90);
|
controls_flex.set_size("e, 90);
|
||||||
|
|
@ -90,50 +93,58 @@ impl MainWindow {
|
||||||
&Frame::default()
|
&Frame::default()
|
||||||
.with_label("Tag:")
|
.with_label("Tag:")
|
||||||
.with_align(enums::Align::Left | enums::Align::Inside),
|
.with_align(enums::Align::Left | enums::Align::Inside),
|
||||||
20,
|
30,
|
||||||
);
|
);
|
||||||
let tag = Input::default();
|
let tag = Input::default();
|
||||||
controls_flex.set_size(&tag, 30);
|
controls_flex.set_size(&tag, 30);
|
||||||
controls_flex.set_size(
|
|
||||||
&Frame::default()
|
let mut darklayer_head_flex = Flex::default().row();
|
||||||
.with_label("Dark Layer (RGBA):")
|
Frame::default()
|
||||||
.with_align(enums::Align::Left | enums::Align::Inside),
|
.with_label("Dark Layer (RGBA):")
|
||||||
20,
|
.with_align(enums::Align::Left | enums::Align::Inside);
|
||||||
);
|
let reset_darklayer_btn = Button::default().with_label("@returnarrow");
|
||||||
|
darklayer_head_flex.set_size(&reset_darklayer_btn, 30);
|
||||||
|
darklayer_head_flex.end();
|
||||||
|
controls_flex.set_size(&darklayer_head_flex, 30);
|
||||||
|
|
||||||
let mut darklayer_flex = Flex::default().row();
|
let mut darklayer_flex = Flex::default().row();
|
||||||
darklayer_flex.set_pad(2);
|
darklayer_flex.set_pad(2);
|
||||||
darklayer_flex.set_size(&Frame::default().with_label("Red"), 30);
|
darklayer_flex.set_size(&Frame::default().with_label("Red"), 30);
|
||||||
let mut layer_red = Spinner::default();
|
let mut layer_red = Spinner::default();
|
||||||
layer_red.set_range(0.0, 255.0);
|
layer_red.set_range(0.0, 255.0);
|
||||||
darklayer_flex.set_size(&layer_red, 50);
|
// darklayer_flex.set_size(&layer_red, 50);
|
||||||
darklayer_flex.set_size(&Frame::default().with_label("Green"), 40);
|
darklayer_flex.set_size(&Frame::default().with_label("Green"), 40);
|
||||||
let mut layer_green = Spinner::default();
|
let mut layer_green = Spinner::default();
|
||||||
layer_green.set_range(0.0, 255.0);
|
layer_green.set_range(0.0, 255.0);
|
||||||
darklayer_flex.set_size(&layer_green, 50);
|
// darklayer_flex.set_size(&layer_green, 50);
|
||||||
darklayer_flex.set_size(&Frame::default().with_label("Blue"), 30);
|
darklayer_flex.set_size(&Frame::default().with_label("Blue"), 30);
|
||||||
let mut layer_blue = Spinner::default();
|
let mut layer_blue = Spinner::default();
|
||||||
layer_blue.set_range(0.0, 255.0);
|
layer_blue.set_range(0.0, 255.0);
|
||||||
darklayer_flex.set_size(&layer_blue, 50);
|
// darklayer_flex.set_size(&layer_blue, 50);
|
||||||
darklayer_flex.set_size(&Frame::default().with_label("Alpha"), 40);
|
darklayer_flex.set_size(&Frame::default().with_label("Alpha"), 40);
|
||||||
let mut layer_alpha = Spinner::default();
|
let mut layer_alpha = Spinner::default();
|
||||||
layer_alpha.set_range(0.0, 255.0);
|
layer_alpha.set_range(0.0, 255.0);
|
||||||
darklayer_flex.set_size(&layer_alpha, 50);
|
// darklayer_flex.set_size(&layer_alpha, 50);
|
||||||
darklayer_flex.end();
|
darklayer_flex.end();
|
||||||
controls_flex.set_size(&darklayer_flex, 30);
|
controls_flex.set_size(&darklayer_flex, 30);
|
||||||
|
|
||||||
let quote_position_flex = Flex::default().row();
|
let mut quote_position_flex = Flex::default().row();
|
||||||
Frame::default()
|
Frame::default()
|
||||||
.with_label("Quote Position:")
|
.with_label("Quote Position:")
|
||||||
.with_align(enums::Align::Left | enums::Align::Inside);
|
.with_align(enums::Align::Left | enums::Align::Inside);
|
||||||
let quote_position = fltk::misc::Spinner::default();
|
let quote_position = fltk::misc::Spinner::default();
|
||||||
|
let reset_quote_position_btn = Button::default().with_label("@returnarrow");
|
||||||
|
quote_position_flex.set_size(&reset_quote_position_btn, 30);
|
||||||
quote_position_flex.end();
|
quote_position_flex.end();
|
||||||
controls_flex.set_size("e_position_flex, 30);
|
controls_flex.set_size("e_position_flex, 30);
|
||||||
|
|
||||||
let tag_position_flex = Flex::default().row();
|
let mut tag_position_flex = Flex::default().row();
|
||||||
Frame::default()
|
Frame::default()
|
||||||
.with_label("Tag Position:")
|
.with_label("Tag Position:")
|
||||||
.with_align(enums::Align::Left | enums::Align::Inside);
|
.with_align(enums::Align::Left | enums::Align::Inside);
|
||||||
let tag_position = fltk::misc::Spinner::default();
|
let tag_position = fltk::misc::Spinner::default();
|
||||||
|
let reset_tag_position_btn = Button::default().with_label("@returnarrow");
|
||||||
|
tag_position_flex.set_size(&reset_tag_position_btn, 30);
|
||||||
tag_position_flex.end();
|
tag_position_flex.end();
|
||||||
controls_flex.set_size(&tag_position_flex, 30);
|
controls_flex.set_size(&tag_position_flex, 30);
|
||||||
|
|
||||||
|
|
@ -190,6 +201,9 @@ impl MainWindow {
|
||||||
layer_alpha,
|
layer_alpha,
|
||||||
quote_position,
|
quote_position,
|
||||||
tag_position,
|
tag_position,
|
||||||
|
reset_darklayer_btn,
|
||||||
|
reset_quote_position_btn,
|
||||||
|
reset_tag_position_btn,
|
||||||
crop_btn,
|
crop_btn,
|
||||||
status,
|
status,
|
||||||
draw_buff,
|
draw_buff,
|
||||||
|
|
@ -254,15 +268,21 @@ impl MainWindow {
|
||||||
);
|
);
|
||||||
|
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
|
let properties = Arc::clone(&self.properties);
|
||||||
self.menubar.add(
|
self.menubar.add(
|
||||||
"&File/Save...\t",
|
"&File/Save...\t",
|
||||||
Shortcut::Ctrl | 's',
|
Shortcut::Ctrl | 's',
|
||||||
menu::MenuFlag::Normal,
|
menu::MenuFlag::Normal,
|
||||||
move |_| sender.send(DrawMessage::Save).unwrap(),
|
move |_| {
|
||||||
|
let mut prop = properties.write().unwrap();
|
||||||
|
prop.is_saved = true;
|
||||||
|
sender.send(DrawMessage::Save).unwrap();
|
||||||
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
let mut config_window = ConfigWindow::new();
|
let mut config_window = ConfigWindow::new();
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
|
let mut image = self.page.image.clone();
|
||||||
self.menubar.add(
|
self.menubar.add(
|
||||||
"&Edit/Configure...\t",
|
"&Edit/Configure...\t",
|
||||||
Shortcut::None,
|
Shortcut::None,
|
||||||
|
|
@ -270,6 +290,8 @@ impl MainWindow {
|
||||||
move |_| {
|
move |_| {
|
||||||
if config_window.show() {
|
if config_window.show() {
|
||||||
sender.send(DrawMessage::Recalc).unwrap();
|
sender.send(DrawMessage::Recalc).unwrap();
|
||||||
|
sender.send(DrawMessage::Flush).unwrap();
|
||||||
|
image.redraw();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
@ -294,9 +316,68 @@ impl MainWindow {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn events(&mut self) {
|
fn events(&mut self) {
|
||||||
|
let mut layer_red = self.layer_red.clone();
|
||||||
|
let mut layer_green = self.layer_green.clone();
|
||||||
|
let mut layer_blue = self.layer_blue.clone();
|
||||||
|
let mut layer_alpha = self.layer_alpha.clone();
|
||||||
|
let mut image = self.page.image.clone();
|
||||||
let sender = self.sender.clone();
|
let sender = self.sender.clone();
|
||||||
self.save_btn
|
let properties = Arc::clone(&self.properties);
|
||||||
.set_callback(move |_| sender.send(DrawMessage::Save).unwrap());
|
self.reset_darklayer_btn.set_callback(move |_| {
|
||||||
|
let mut prop = properties.write().unwrap();
|
||||||
|
let color = globals::CONFIG.read().unwrap().color_layer;
|
||||||
|
prop.rgba = color;
|
||||||
|
prop.is_saved = false;
|
||||||
|
layer_red.set_value(color[0] as f64);
|
||||||
|
layer_green.set_value(color[1] as f64);
|
||||||
|
layer_blue.set_value(color[2] as f64);
|
||||||
|
layer_alpha.set_value(color[3] as f64);
|
||||||
|
sender.send(DrawMessage::Recalc).unwrap();
|
||||||
|
sender.send(DrawMessage::Flush).unwrap();
|
||||||
|
image.redraw();
|
||||||
|
});
|
||||||
|
|
||||||
|
let mut quote_position = self.quote_position.clone();
|
||||||
|
let mut image = self.page.image.clone();
|
||||||
|
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 height = prop.original_dimension.1;
|
||||||
|
let pos = (height * 2.0) / 3.0;
|
||||||
|
prop.quote_position = pos;
|
||||||
|
prop.is_saved = false;
|
||||||
|
quote_position.set_value(pos);
|
||||||
|
|
||||||
|
sender.send(DrawMessage::Recalc).unwrap();
|
||||||
|
sender.send(DrawMessage::Flush).unwrap();
|
||||||
|
image.redraw();
|
||||||
|
});
|
||||||
|
|
||||||
|
let mut tag_position = self.tag_position.clone();
|
||||||
|
let mut image = self.page.image.clone();
|
||||||
|
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 height = prop.original_dimension.1;
|
||||||
|
let pos = height / 2.0;
|
||||||
|
prop.tag_position = pos;
|
||||||
|
prop.is_saved = false;
|
||||||
|
tag_position.set_value(pos);
|
||||||
|
|
||||||
|
sender.send(DrawMessage::Recalc).unwrap();
|
||||||
|
sender.send(DrawMessage::Flush).unwrap();
|
||||||
|
image.redraw();
|
||||||
|
});
|
||||||
|
|
||||||
|
let sender = self.sender.clone();
|
||||||
|
let properties = Arc::clone(&self.properties);
|
||||||
|
self.save_btn.set_callback(move |_| {
|
||||||
|
let mut prop = properties.write().unwrap();
|
||||||
|
prop.is_saved = true;
|
||||||
|
sender.send(DrawMessage::Save).unwrap()
|
||||||
|
});
|
||||||
|
|
||||||
let properties = Arc::clone(&self.properties);
|
let properties = Arc::clone(&self.properties);
|
||||||
let mut crop_win = CropWindow::new();
|
let mut crop_win = CropWindow::new();
|
||||||
|
|
|
||||||
98
src/utils.rs
98
src/utils.rs
|
|
@ -139,54 +139,6 @@ impl ImageContainer {
|
||||||
prop.original_dimension.1,
|
prop.original_dimension.1,
|
||||||
);
|
);
|
||||||
|
|
||||||
// let layer =
|
|
||||||
// DynamicImage::ImageRgba8(ImageBuffer::from_fn(width as u32, height as u32, |_, _| {
|
|
||||||
// image::Rgba(prop.rgba)
|
|
||||||
// }));
|
|
||||||
// image::imageops::overlay(&mut tmp, &layer, 0, 0);
|
|
||||||
|
|
||||||
// let size = quote_from_height(height);
|
|
||||||
// for (index, line) in prop.quote.lines().enumerate() {
|
|
||||||
// let (text_width, text_height) = measure_line(
|
|
||||||
// &globals::FONT_QUOTE,
|
|
||||||
// line,
|
|
||||||
// rusttype::Scale::uniform(size as f32),
|
|
||||||
// );
|
|
||||||
|
|
||||||
// imageproc::drawing::draw_text_mut(
|
|
||||||
// &mut tmp,
|
|
||||||
// image::Rgba([255, 255, 255, 255]),
|
|
||||||
// ((width - text_width) / 2.0) as u32,
|
|
||||||
// ((prop.quote_position * height) / prop.original_dimension.1
|
|
||||||
// + (text_height / 2.0)
|
|
||||||
// + index as f64 * (text_height * 1.2)) as u32,
|
|
||||||
// rusttype::Scale::uniform(size as f32),
|
|
||||||
// &globals::FONT_QUOTE,
|
|
||||||
// line,
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
|
|
||||||
// let size = tag_from_height(height);
|
|
||||||
// for (index, line) in prop.tag.lines().enumerate() {
|
|
||||||
// let (text_width, text_height) = measure_line(
|
|
||||||
// &globals::FONT_TAG,
|
|
||||||
// line,
|
|
||||||
// rusttype::Scale::uniform(size as f32),
|
|
||||||
// );
|
|
||||||
|
|
||||||
// imageproc::drawing::draw_text_mut(
|
|
||||||
// &mut tmp,
|
|
||||||
// image::Rgba([255, 255, 255, 255]),
|
|
||||||
// (width * 0.99 - text_width) as u32,
|
|
||||||
// ((prop.tag_position * height) / prop.original_dimension.1
|
|
||||||
// + (text_height / 2.0)
|
|
||||||
// + index as f64 * (text_height * 1.2)) as u32,
|
|
||||||
// rusttype::Scale::uniform(size as f32),
|
|
||||||
// &globals::FONT_TAG,
|
|
||||||
// line,
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
|
|
||||||
self.buffer = tmp;
|
self.buffer = tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -226,56 +178,6 @@ impl ImageContainer {
|
||||||
prop.tag_position,
|
prop.tag_position,
|
||||||
prop.original_dimension.1,
|
prop.original_dimension.1,
|
||||||
);
|
);
|
||||||
|
|
||||||
// let layer = DynamicImage::ImageRgba8(ImageBuffer::from_fn(
|
|
||||||
// crop_width as u32,
|
|
||||||
// crop_height as u32,
|
|
||||||
// |_, _| image::Rgba(prop.rgba),
|
|
||||||
// ));
|
|
||||||
// image::imageops::overlay(&mut img, &layer, 0, 0);
|
|
||||||
|
|
||||||
// let size = quote_from_height(crop_height);
|
|
||||||
// for (index, line) in prop.quote.lines().enumerate() {
|
|
||||||
// let (text_width, text_height) = measure_line(
|
|
||||||
// &globals::FONT_QUOTE,
|
|
||||||
// line,
|
|
||||||
// rusttype::Scale::uniform(size as f32),
|
|
||||||
// );
|
|
||||||
|
|
||||||
// imageproc::drawing::draw_text_mut(
|
|
||||||
// &mut img,
|
|
||||||
// image::Rgba([255, 255, 255, 255]),
|
|
||||||
// ((crop_width - text_width) / 2.0) as u32,
|
|
||||||
// ((prop.quote_position * crop_height) / prop.original_dimension.1
|
|
||||||
// + (text_height / 2.0)
|
|
||||||
// + index as f64 * (text_height * 1.2)) as u32,
|
|
||||||
// rusttype::Scale::uniform(size as f32),
|
|
||||||
// &globals::FONT_QUOTE,
|
|
||||||
// line,
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
|
|
||||||
// let size = tag_from_height(crop_height);
|
|
||||||
// for (index, line) in prop.tag.lines().enumerate() {
|
|
||||||
// let (text_width, text_height) = measure_line(
|
|
||||||
// &globals::FONT_TAG,
|
|
||||||
// line,
|
|
||||||
// rusttype::Scale::uniform(size as f32),
|
|
||||||
// );
|
|
||||||
|
|
||||||
// imageproc::drawing::draw_text_mut(
|
|
||||||
// &mut img,
|
|
||||||
// image::Rgba([255, 255, 255, 255]),
|
|
||||||
// (crop_width * 0.99 - text_width) as u32,
|
|
||||||
// ((prop.tag_position * crop_height) / prop.original_dimension.1
|
|
||||||
// + (text_height / 2.0)
|
|
||||||
// + index as f64 * (text_height * 1.2)) as u32,
|
|
||||||
// rusttype::Scale::uniform(size as f32),
|
|
||||||
// &globals::FONT_TAG,
|
|
||||||
// line,
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
|
|
||||||
image::save_buffer(
|
image::save_buffer(
|
||||||
export,
|
export,
|
||||||
img.as_rgb8().unwrap().as_raw(),
|
img.as_rgb8().unwrap().as_raw(),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue