ide: IconDes improvements

This commit is contained in:
Mirek Fidler 2024-08-01 00:54:10 +02:00
parent 237ab0ea97
commit 9a3d83e177
4 changed files with 21 additions and 24 deletions

View file

@ -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);

View file

@ -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)

View file

@ -253,14 +253,14 @@ void IconDes::BlurSharpen()
WithSharpenLayout<TopWindow> 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)

View file

@ -73,12 +73,14 @@ Image Smoothen(const Image& img, double level)
void IconDes::Smoothen()
{
WithColorizeLayout<TopWindow> dlg;
WithImageDblLayout<TopWindow> 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)));