Minimum and maximum image size limit with config

This commit is contained in:
Piyush मिश्रः 2022-03-26 20:23:47 +05:30
parent c2dd76aef1
commit 4b0466eb7a
3 changed files with 116 additions and 6 deletions

View File

@ -128,6 +128,8 @@ pub(crate) struct ConfigFile {
pub(crate) tag2_position_ratio: f64,
pub(crate) image_ratio: (f64, f64),
pub(crate) color_layer: [u8; 4],
pub(crate) minimum_width_limit: f64, // for export of image
pub(crate) maximum_width_limit: f64, // for export of image
pub(crate) image_format: ImageType,
}
@ -151,6 +153,8 @@ impl Default for ConfigFile {
tag2_position_ratio: 0.95,
image_ratio: (4.0, 5.0),
color_layer: [20, 22, 25, 197],
minimum_width_limit: 650.0,
maximum_width_limit: 1080.0,
image_format: ImageType::Png,
}
}

View File

@ -64,6 +64,8 @@ pub(crate) struct ConfigWindow {
pub(crate) tag2_position_ratio: ValueInput,
pub(crate) image_ratio_width: ValueInput,
pub(crate) image_ratio_height: ValueInput,
pub(crate) minimum_width_limit: ValueInput,
pub(crate) maximum_width_limit: ValueInput,
/// RGB value of top translucent layer
pub(crate) translucent_layer_rgb: Button,
/// opacity value of top translucent layer
@ -130,7 +132,7 @@ impl ConfigWindow {
.with_pos(205, 5);
let mut col = Flex::default()
.with_size(scroll.width() - 35, 700)
.with_size(scroll.width() - 35, 850)
.column()
.with_pos(100, 0);
@ -375,6 +377,55 @@ impl ConfigWindow {
image_ratio_grp.end();
col.set_size(&image_ratio_grp, 30);
let mut label = Frame::default().with_label("Image with limits:");
label.set_label_font(enums::Font::HelveticaBold);
col.set_size(&label, 15);
let mut hint =
Frame::default().with_label("Limiting width of image in pixels");
hint.set_label_font(Font::CourierItalic);
hint.set_label_size(12);
col.set_size(&hint, 20);
// Size Ratio Group
let row_grp = Flex::default().row();
// column 1
let mut col_grp = Flex::default().column();
let mut minimum_width_limit_grp = Flex::default().row();
minimum_width_limit_grp.set_size(
&Frame::default()
.with_label("Minimum")
.with_align(Align::Right | Align::Inside),
130,
);
let minimum_width_limit = ValueInput::default();
minimum_width_limit_grp.end();
col_grp.set_size(&minimum_width_limit_grp, 30);
col_grp.end();
// column 2
let mut col_grp = Flex::default().column();
let mut maximum_width_limit_grp = Flex::default().row();
maximum_width_limit_grp.set_size(
&Frame::default()
.with_label("Maximim")
.with_align(Align::Right | Align::Inside),
130,
);
let maximum_width_limit = ValueInput::default();
maximum_width_limit_grp.end();
col_grp.set_size(&maximum_width_limit_grp, 30);
col_grp.end();
row_grp.end();
col.set_size(&row_grp, 40);
let mut label = Frame::default().with_label("Colour for dark layer:");
label.set_label_font(enums::Font::HelveticaBold);
col.set_size(&label, 15);
@ -450,6 +501,8 @@ impl ConfigWindow {
tag2_position_ratio,
image_ratio_width,
image_ratio_height,
minimum_width_limit,
maximum_width_limit,
translucent_layer_rgb,
translucent_layer_alpha,
png_format,
@ -501,6 +554,8 @@ impl ConfigWindow {
.set_value(config.tag2_position_ratio);
self.image_ratio_width.set_value(config.image_ratio.0);
self.image_ratio_height.set_value(config.image_ratio.1);
self.minimum_width_limit.set_value(config.minimum_width_limit);
self.maximum_width_limit.set_value(config.maximum_width_limit);
utils::set_color_btn_rgba(config.color_layer, &mut self.translucent_layer_rgb);
self.translucent_layer_alpha
.set_value(config.color_layer[3] as f64);
@ -546,6 +601,8 @@ impl ConfigWindow {
let mut tag2_position_ratio = self.tag2_position_ratio.clone();
let mut image_ratio_width = self.image_ratio_width.clone();
let mut image_ratio_height = self.image_ratio_height.clone();
let mut minimum_width_limit = self.minimum_width_limit.clone();
let mut maximum_width_limit = self.maximum_width_limit.clone();
let mut layer_rgb = self.translucent_layer_rgb.clone();
let mut layer_alpha = self.translucent_layer_alpha.clone();
let mut browse = self.browse.clone();
@ -589,6 +646,8 @@ impl ConfigWindow {
tag2_position_ratio.set_value(conf.tag2_position_ratio);
image_ratio_width.set_value(conf.image_ratio.0);
image_ratio_height.set_value(conf.image_ratio.1);
minimum_width_limit.set_value(conf.minimum_width_limit);
maximum_width_limit.set_value(conf.maximum_width_limit);
utils::set_color_btn_rgba(conf.color_layer, &mut layer_rgb);
layer_alpha.set_value(conf.color_layer[3] as f64);
browse.add(&name);
@ -616,6 +675,8 @@ impl ConfigWindow {
let mut tag2_position_ratio = self.tag2_position_ratio.clone();
let mut image_ratio_width = self.image_ratio_width.clone();
let mut image_ratio_height = self.image_ratio_height.clone();
let mut minimum_width_limit = self.minimum_width_limit.clone();
let mut maximum_width_limit = self.maximum_width_limit.clone();
let mut layer_rgb = self.translucent_layer_rgb.clone();
let mut layer_alpha = self.translucent_layer_alpha.clone();
let mut browse = self.browse.clone();
@ -658,6 +719,8 @@ impl ConfigWindow {
tag2_position_ratio.set_value(conf.tag2_position_ratio);
image_ratio_width.set_value(conf.image_ratio.0);
image_ratio_height.set_value(conf.image_ratio.1);
minimum_width_limit.set_value(conf.minimum_width_limit);
maximum_width_limit.set_value(conf.maximum_width_limit);
utils::set_color_btn_rgba(conf.color_layer, &mut layer_rgb);
layer_alpha.set_value(conf.color_layer[3] as f64);
layer_rgb.redraw();
@ -682,6 +745,8 @@ impl ConfigWindow {
let mut tag2_position_ratio = self.tag2_position_ratio.clone();
let mut image_ratio_width = self.image_ratio_width.clone();
let mut image_ratio_height = self.image_ratio_height.clone();
let mut minimum_width_limit = self.minimum_width_limit.clone();
let mut maximum_width_limit = self.maximum_width_limit.clone();
let mut layer_rgb = self.translucent_layer_rgb.clone();
let mut layer_alpha = self.translucent_layer_alpha.clone();
let configs = Rc::clone(&self.configs);
@ -714,6 +779,8 @@ impl ConfigWindow {
tag2_position_ratio.set_value(conf.tag2_position_ratio);
image_ratio_width.set_value(conf.image_ratio.0);
image_ratio_height.set_value(conf.image_ratio.1);
minimum_width_limit.set_value(conf.minimum_width_limit);
maximum_width_limit.set_value(conf.maximum_width_limit);
utils::set_color_btn_rgba(conf.color_layer, &mut layer_rgb);
layer_alpha.set_value(conf.color_layer[3] as f64);
layer_rgb.redraw();
@ -1011,6 +1078,36 @@ impl ConfigWindow {
true
});
// Minimum Width Limit
let browse = self.browse.clone();
let configs = Rc::clone(&self.configs);
self.minimum_width_limit.handle(move |f, ev| {
if ev == Event::KeyUp {
if let Some(conf) = configs
.borrow_mut()
.get_mut(&browse.selected_text().unwrap())
{
conf.minimum_width_limit = f.value();
}
}
true
});
// Maximim Width Limit
let browse = self.browse.clone();
let configs = Rc::clone(&self.configs);
self.maximum_width_limit.handle(move |f, ev| {
if ev == Event::KeyUp {
if let Some(conf) = configs
.borrow_mut()
.get_mut(&browse.selected_text().unwrap())
{
conf.maximum_width_limit = f.value();
}
}
true
});
// Translucent Layer RGB
let browse = self.browse.clone();
let configs = Rc::clone(&self.configs);
@ -1097,6 +1194,8 @@ impl ConfigWindow {
let mut tag2_position_ratio = self.tag2_position_ratio.clone();
let mut image_ratio_width = self.image_ratio_width.clone();
let mut image_ratio_height = self.image_ratio_height.clone();
let mut minimum_width_limit = self.minimum_width_limit.clone();
let mut maximum_width_limit = self.maximum_width_limit.clone();
let mut layer_rgb = self.translucent_layer_rgb.clone();
let mut layer_alpha = self.translucent_layer_alpha.clone();
let mut png_format = self.png_format.clone();
@ -1122,6 +1221,8 @@ impl ConfigWindow {
tag2_position_ratio.set_value(conf.tag2_position_ratio);
image_ratio_width.set_value(conf.image_ratio.0);
image_ratio_height.set_value(conf.image_ratio.1);
minimum_width_limit.set_value(conf.minimum_width_limit);
maximum_width_limit.set_value(conf.maximum_width_limit);
utils::set_color_btn_rgba(conf.color_layer, &mut layer_rgb);
layer_rgb.redraw();
layer_alpha.set_value(conf.color_layer[3] as f64);

View File

@ -154,8 +154,8 @@ impl ImageContainer {
let (origina_crop_width, origina_crop_height) =
croped_ratio(original_width, original_height);
if origina_crop_width < 700.0 {
show_alert("Image width is below 600px");
if origina_crop_width < globals::CONFIG.read().unwrap().minimum_width_limit {
show_alert("Image width is below limit");
}
prop.crop_position = Some((
@ -182,6 +182,11 @@ impl ImageContainer {
let (s_width, s_height): (f64, f64) = Coord::from(self.image.dimensions()).into();
let (c_width, c_height) = croped_ratio(s_width, s_height);
if c_width < globals::CONFIG.read().unwrap().minimum_width_limit {
show_alert("Image width is below limit");
}
let (cx, cy) = (
(original_x * s_width) / original_width,
(original_y * s_height) / original_height,
@ -244,9 +249,9 @@ impl ImageContainer {
crop_height as u32,
);
if crop_width > 1080.0 {
let (resize_width,resize_height) = (1080.0, height_from_width(1080.0));
img = original_image.resize_exact(resize_width as u32,resize_height as u32, image::imageops::FilterType::Lanczos3);
if crop_width > config.maximum_width_limit {
let (resize_width,resize_height) = (config.maximum_width_limit, height_from_width(config.maximum_width_limit));
img = img.resize_exact(resize_width as u32,resize_height as u32, image::imageops::FilterType::Lanczos3);
}
draw_layer_and_text(