61 lines
2.5 KiB
Rust
61 lines
2.5 KiB
Rust
use super::{BrushParams, RasterToolDef, RasterToolSettings};
|
|
use eframe::egui;
|
|
use lightningbeam_core::{brush_settings::BrushSettings, raster_layer::RasterBlendMode};
|
|
|
|
pub struct BlurSharpenTool;
|
|
pub static BLUR_SHARPEN: BlurSharpenTool = BlurSharpenTool;
|
|
|
|
impl RasterToolDef for BlurSharpenTool {
|
|
fn blend_mode(&self) -> RasterBlendMode { RasterBlendMode::BlurSharpen }
|
|
fn header_label(&self) -> &'static str { "Blur / Sharpen" }
|
|
fn brush_params(&self, s: &RasterToolSettings) -> BrushParams {
|
|
BrushParams {
|
|
base_settings: BrushSettings::default(),
|
|
radius: s.blur_sharpen_radius,
|
|
opacity: s.blur_sharpen_strength,
|
|
hardness: s.blur_sharpen_hardness,
|
|
spacing: s.blur_sharpen_spacing,
|
|
}
|
|
}
|
|
fn tool_params(&self, s: &RasterToolSettings) -> [f32; 4] {
|
|
[s.blur_sharpen_mode as f32, s.blur_sharpen_kernel, 0.0, 0.0]
|
|
}
|
|
fn show_brush_preset_picker(&self) -> bool { false }
|
|
fn render_ui(&self, ui: &mut egui::Ui, s: &mut RasterToolSettings) {
|
|
ui.horizontal(|ui| {
|
|
if ui.selectable_label(s.blur_sharpen_mode == 0, "Blur").clicked() {
|
|
s.blur_sharpen_mode = 0;
|
|
}
|
|
if ui.selectable_label(s.blur_sharpen_mode == 1, "Sharpen").clicked() {
|
|
s.blur_sharpen_mode = 1;
|
|
}
|
|
});
|
|
ui.horizontal(|ui| {
|
|
ui.label("Size:");
|
|
ui.add(egui::Slider::new(&mut s.blur_sharpen_radius, 1.0_f32..=500.0).logarithmic(true).suffix(" px"));
|
|
});
|
|
ui.horizontal(|ui| {
|
|
ui.label("Strength:");
|
|
ui.add(egui::Slider::new(&mut s.blur_sharpen_strength, 0.0_f32..=1.0)
|
|
.custom_formatter(|v, _| format!("{:.0}%", v * 100.0)));
|
|
});
|
|
ui.horizontal(|ui| {
|
|
ui.label("Hardness:");
|
|
ui.add(egui::Slider::new(&mut s.blur_sharpen_hardness, 0.0_f32..=1.0)
|
|
.custom_formatter(|v, _| format!("{:.0}%", v * 100.0)));
|
|
});
|
|
ui.horizontal(|ui| {
|
|
ui.label("Kernel:");
|
|
ui.add(egui::Slider::new(&mut s.blur_sharpen_kernel, 1.0_f32..=20.0)
|
|
.logarithmic(true)
|
|
.custom_formatter(|v, _| format!("{:.1} px", v)));
|
|
});
|
|
ui.horizontal(|ui| {
|
|
ui.label("Spacing:");
|
|
ui.add(egui::Slider::new(&mut s.blur_sharpen_spacing, 0.5_f32..=20.0)
|
|
.logarithmic(true)
|
|
.custom_formatter(|v, _| format!("{:.1}", v)));
|
|
});
|
|
}
|
|
}
|