From 9a3d83e1778c3a031145bf501ccb604c27217171 Mon Sep 17 00:00:00 2001 From: Mirek Fidler Date: Thu, 1 Aug 2024 00:54:10 +0200 Subject: [PATCH] ide: IconDes improvements --- uppsrc/ide/IconDes/IconDes.h | 2 +- uppsrc/ide/IconDes/IconDes.lay | 23 +++++++++-------------- uppsrc/ide/IconDes/Image.cpp | 16 ++++++++-------- uppsrc/ide/IconDes/Smoothen.cpp | 4 +++- 4 files changed, 21 insertions(+), 24 deletions(-) diff --git a/uppsrc/ide/IconDes/IconDes.h b/uppsrc/ide/IconDes/IconDes.h index 5a481fce2..b5e2d1c88 100644 --- a/uppsrc/ide/IconDes/IconDes.h +++ b/uppsrc/ide/IconDes/IconDes.h @@ -349,7 +349,7 @@ private: void Upscale(); void PlaceDlg(TopWindow& dlg); - void Couple(TopWindow& dlg, EditDouble& level, SliderCtrl& slider, double max, double init = 0); + void Couple(TopWindow& dlg, EditDouble& level, SliderCtrl& slider, double max, double init = 0, double offset = 0); void Couple(TopWindow& dlg, EditInt& level, SliderCtrl& slider, int max, int init = 0); Image ImageStart(); void ImageSet(const Image& m); diff --git a/uppsrc/ide/IconDes/IconDes.lay b/uppsrc/ide/IconDes/IconDes.lay index c231add31..9f663871c 100644 --- a/uppsrc/ide/IconDes/IconDes.lay +++ b/uppsrc/ide/IconDes/IconDes.lay @@ -32,20 +32,15 @@ LAYOUT(FilePropertiesLayout, 176, 68) ITEM(Upp::Button, cancel, SetLabel(t_("Cancel")).LeftPosZ(104, 64).TopPosZ(36, 24)) END_LAYOUT -LAYOUT(SharpenLayout, 220, 68) - ITEM(Upp::Label, dv___0, SetLabel(t_("Level")).LeftPosZ(8, 32).TopPosZ(8, 19)) - ITEM(Upp::EditDoubleSpin, level, SetInc(0.05).Min(-2).Max(2).NotNull(true).LeftPosZ(44, 64).TopPosZ(8, 19)) - ITEM(Upp::Label, dv___2, SetLabel(t_("Radius")).LeftPosZ(128, 36).TopPosZ(8, 19)) - ITEM(Upp::EditIntSpin, passes, Min(1).Max(10).NotNull(true).LeftPosZ(168, 44).TopPosZ(8, 19)) - ITEM(Upp::Button, ok, SetLabel(t_("OK")).LeftPosZ(80, 64).TopPosZ(36, 24)) - ITEM(Upp::Button, cancel, SetLabel(t_("Cancel")).LeftPosZ(148, 64).TopPosZ(36, 24)) -END_LAYOUT - -LAYOUT(ColorizeLayout, 148, 68) - ITEM(Upp::Label, dv___0, SetLabel(t_("Level")).LeftPosZ(8, 32).TopPosZ(8, 19)) - ITEM(Upp::EditDoubleSpin, level, SetInc(0.05).Min(0).Max(1).NotNull(true).LeftPosZ(44, 64).TopPosZ(8, 19)) - ITEM(Upp::Button, ok, SetLabel(t_("OK")).LeftPosZ(8, 64).TopPosZ(36, 24)) - ITEM(Upp::Button, cancel, SetLabel(t_("Cancel")).LeftPosZ(76, 64).TopPosZ(36, 24)) +LAYOUT(SharpenLayout, 148, 152) + ITEM(Upp::Button, ok, SetLabel(t_("OK")).LeftPosZ(8, 64).TopPosZ(120, 24)) + ITEM(Upp::Button, cancel, SetLabel(t_("Cancel")).LeftPosZ(76, 64).TopPosZ(120, 24)) + ITEM(Upp::Label, dv___2, SetLabel(t_("Radius")).LeftPosZ(4, 64).TopPosZ(4, 19)) + ITEM(Upp::EditIntSpin, radius, Min(0).Max(255).LeftPosZ(76, 64).TopPosZ(4, 19)) + ITEM(Upp::SliderCtrl, slider, LeftPosZ(4, 136).TopPosZ(28, 24)) + ITEM(Upp::Label, dv___5, SetLabel(t_("Level")).LeftPosZ(4, 64).TopPosZ(60, 19)) + ITEM(Upp::EditDoubleSpin, level, SetInc(0.05).Min(0).Max(1).NotNull(true).LeftPosZ(76, 64).TopPosZ(60, 19)) + ITEM(Upp::SliderCtrl, slider2, LeftPosZ(4, 136).TopPosZ(84, 24)) END_LAYOUT LAYOUT(ImageDblLayout, 148, 96) diff --git a/uppsrc/ide/IconDes/Image.cpp b/uppsrc/ide/IconDes/Image.cpp index 2cbf170f3..7dd3584cf 100644 --- a/uppsrc/ide/IconDes/Image.cpp +++ b/uppsrc/ide/IconDes/Image.cpp @@ -253,14 +253,14 @@ void IconDes::BlurSharpen() WithSharpenLayout dlg; CtrlLayoutOKCancel(dlg, "Blur/Sharpen"); PlaceDlg(dlg); - dlg.level <<= 0; - dlg.level <<= dlg.Breaker(); - dlg.passes <<= 1; - dlg.passes <<= dlg.Breaker(); + + Couple(dlg, dlg.level, dlg.slider2, 1); + Couple(dlg, dlg.radius, dlg.slider, 10, 1); + Image bk = ImageStart(); for(;;) { Image m = bk; - for(int q = 0; q < (int)~dlg.passes; q++) + for(int q = 0; q < (int)~dlg.radius; q++) m = Sharpen(m, -int(256 * (double)~dlg.level)); ImageSet(m); switch(dlg.Run()) { @@ -349,14 +349,14 @@ void IconDes::Chroma() } } -void IconDes::Couple(TopWindow& dlg, EditDouble& level, SliderCtrl& slider, double max, double init) +void IconDes::Couple(TopWindow& dlg, EditDouble& level, SliderCtrl& slider, double max, double init, double offset) { level.Max(max); level <<= init; slider.MinMax(0, 1000); slider <<= init * 1000 / max; - slider << [=, &dlg, &level, &slider] { level <<= (int)~slider / 1000.0 * max; dlg.Break(); }; - level << [=, &dlg, &level, &slider] { slider <<= Nvl(int((double)~level * 1000 / max), 500); dlg.Break(); }; + slider << [=, &dlg, &level, &slider] { level <<= (int)~slider / 1000.0 * max + offset; dlg.Break(); }; + level << [=, &dlg, &level, &slider] { slider <<= Nvl(int(((double)~level - offset) * 1000 / max), 500); dlg.Break(); }; } void IconDes::Couple(TopWindow& dlg, EditInt& level, SliderCtrl& slider, int max, int init) diff --git a/uppsrc/ide/IconDes/Smoothen.cpp b/uppsrc/ide/IconDes/Smoothen.cpp index 3cf7a1572..8fd1fdf02 100644 --- a/uppsrc/ide/IconDes/Smoothen.cpp +++ b/uppsrc/ide/IconDes/Smoothen.cpp @@ -73,12 +73,14 @@ Image Smoothen(const Image& img, double level) void IconDes::Smoothen() { - WithColorizeLayout dlg; + WithImageDblLayout dlg; CtrlLayoutOKCancel(dlg, "Smoothen"); PlaceDlg(dlg); + dlg.txt = "Level"; dlg.level.MinMax(0, 1); dlg.level <<= 0.75; dlg.level <<= dlg.Breaker(); + Couple(dlg, dlg.level, dlg.slider, 1, 0.75); Image bk = ImageStart(); for(;;) { ImageSet(::Smoothen(bk, 0.4 * minmax((double)~dlg.level + 0.01, 0.01, 1.1)));