Draw: MakeImage templated version, MakeImage(Image, fn) renamed as AdjustImage

This commit is contained in:
Mirek Fidler 2025-09-25 09:52:17 +02:00
parent 3fa50d27f1
commit 49d81333f2
10 changed files with 44 additions and 47 deletions

View file

@ -63,7 +63,7 @@ Image DisImage(const Image& m)
Image DisabledImage(const Image& img, bool dis)
{
return dis ? MakeImage(img, GUI_GlobalStyle() == GUISTYLE_CLASSIC ? Etched : DisImage)
return dis ? AdjustImage(img, GUI_GlobalStyle() == GUISTYLE_CLASSIC ? Etched : DisImage)
: img;
}

View file

@ -126,7 +126,7 @@ void OriDraw::DrawRectOp(int x, int y, int cx, int cy, Color color)
void OriDraw::DrawImageOp(int x, int y, int cx, int cy, const Image& img, const Rect& src, Color color)
{
Transform(x, y, cx, cy);
Image m = MakeImage(img, clockwise ? RotateClockwise : RotateAntiClockwise);
Image m = AdjustImage(img, clockwise ? RotateClockwise : RotateAntiClockwise);
ptr->DrawImageOp(x, y, cx, cy, m, Size(cx, cy), color);
}

View file

@ -408,7 +408,7 @@ void DrawHighlightImage(Draw& w, int x, int y, const Image& img, bool highlight,
w.DrawImage(x, y + 1, img, maskcolor);
w.DrawImage(x, y - 1, img, maskcolor);
}
w.DrawImage(x, y, enabled ? img : MakeImage(img, Etched));
w.DrawImage(x, y, enabled ? img : AdjustImage(img, Etched));
}
Color GradientColor(Color fc, Color tc, int i, int n)

View file

@ -170,7 +170,20 @@ void SysImageRealized(const Image& img); // SystemDraw realized Image handle in
void SysImageReleased(const Image& img); // SystemDraw dropped Image handle
Image MakeImage(const ImageMaker& m);
Image MakeImage(const Image& image, Image (*make)(const Image& image));
template <class T, class M>
Image MakeImage(T key, M make) {
return MakeValue(
[&] { return key(); },
[&] (Value& v) {
Image img = make();
v = img;
return img.GetLength() * sizeof(RGBA);
}
).template To<Image>();
};
Image AdjustImage(const Image& image, Image (*make)(const Image& image));
void SweepMkImageCache(); // deprecated, use AdjustValueCache();
void SetMakeImageCacheMax(int m); // deprecated, use SetupValueCache

View file

@ -94,34 +94,12 @@ Image MakeImagePaintOnly(const ImageMaker& m)
return MakeImage__(m, true);
}
class SimpleImageMaker : public ImageMaker {
Image (*make)(const Image& image);
Image image;
public:
virtual String Key() const;
virtual Image Make() const;
SimpleImageMaker(const Image& image, Image (*make)(const Image& image))
: make(make),image(image) {}
};
String SimpleImageMaker::Key() const
Image AdjustImage(const Image& image, Image (*make)(const Image& image))
{
String key;
RawCat(key, image.GetSerialId());
RawCat(key, make);
return key;
}
Image SimpleImageMaker::Make() const
{
return (*make)(image);
}
Image MakeImage(const Image& image, Image (*make)(const Image& image))
{
return MakeImage(SimpleImageMaker(image, make));
return MakeImage(
[&] { String key; RawCat(key, image.GetSerialId()); RawCat(key, make); return key; },
[&] { return (*make)(image); }
);
}
struct sCachedRescale : public ImageMaker

View file

@ -137,7 +137,7 @@ void SyncUHDMode()
Image DPI(const Image& img, int expected)
{
if(img.GetSize().cy <= expected && IsUHDMode())
return MakeImage(img, Upscale2x);
return AdjustImage(img, Upscale2x);
return img;
}

View file

@ -51,13 +51,20 @@ the cache or creates and stores to cache). Images are stored
in the U`+`+ global cache.&]
[s3;%% &]
[s4; &]
[s5;:MakeImage`(const Image`&`,Image`(`*`)`(const Image`&`)`): [_^Image^ Image]_[* MakeIm
age]([@(0.0.255) const]_[_^Image^ Image][@(0.0.255) `&]_[*@3 image],
[_^Image^ Image]_(`*[*@3 make])([@(0.0.255) const]_[_^Image^ Image][@(0.0.255) `&]_[*@3 image
]))&]
[s2;%% Simplified version for Image making process that does not
require other parameters than single input image.&]
[s3;%% &]
[s5;:Upp`:`:MakeImage`(T`,M`): [@(0.0.255) template] <[@(0.0.255) class]
T, [@(0.0.255) class] M> Image [* MakeImage](T [*@3 key], M [*@3 make])&]
[s2;%% Templated version of Image maker `- [%-*@3 key] must be lambda
that returns String that uniquely describes final Image, [%-*@3 make]
must be lambda that returns the final Image.&]
[s3; &]
[s4; &]
[s5;:Upp`:`:AdjustImage`(const Image`&`,Image`(`*`)`(const Image`&`)`): Image
[* AdjustImage]([@(0.0.255) const] Image[@(0.0.255) `&] [*@3 image],
Image ([@(0.0.255) `*]make)([@(0.0.255) const] Image[@(0.0.255) `&]))&]
[s2;%% Simplified version for Image making and caching process that
does not require other parameters than single input image and
function that alters input image to produce the result.&]
[s3; &]
[s4; &]
[s5;:MakeImagePaintOnly`(const ImageMaker`&`): [_^Image^ Image]_[* MakeImagePaintOnly]([@(0.0.255) c
onst]_[_^ImageMaker^ ImageMaker][@(0.0.255) `&]_[*@3 m])&]

View file

@ -118,9 +118,9 @@ Image DiagramEditor::CursorImage(Point p, dword keyflags)
rot += M_2PI * CursorItem().rotate / 360;
return MakeValue(
return MakeImage(
[&] { return String((const char *)&rot, sizeof(rot)); },
[&] (Value& v) {
[&] {
ImagePainter w(DPI(32, 32));
w.Clear();
const double x1 = 10;
@ -144,10 +144,9 @@ Image DiagramEditor::CursorImage(Point p, dword keyflags)
w.Stroke(1, Black());
Image img = w.GetResult();
SetHotSpots(img, DPI(16, 16));
v = img;
return img.GetLength() * sizeof(RGBA);
return img;
}
).To<Image>();
);
}
void DiagramEditor::MouseWheel(Point, int zdelta, dword keyflags) {

View file

@ -239,8 +239,8 @@ FileList::File DirDiffDlg::MakeFile(int i)
int k = list[i].d;
if(IsNull(icn))
icn = CtrlImg::File();
m.icon = decode(k, FAILED_FILE, MakeImage(icn, [] (const Image& m) { return GetOver(m, DiffImg::Failed()); }),
PATCHED_FILE, MakeImage(icn, [] (const Image& m) { return GetOver(m, DiffImg::Patched()); }),
m.icon = decode(k, FAILED_FILE, AdjustImage(icn, [](const Image& m) { return GetOver(m, DiffImg::Failed()); }),
PATCHED_FILE, AdjustImage(icn, [](const Image& m) { return GetOver(m, DiffImg::Patched()); }),
icn);
m.name = list[i].a;
m.font = decode(k, FAILED_FILE, StdFont().Strikeout().Italic(),

View file

@ -13,7 +13,7 @@ Image OverLtRed(const Image& m)
Image ImageOverRed(const Image& m)
{
return MakeImage(m, OverLtRed);
return AdjustImage(m, OverLtRed);
}
Font WorkspaceWork::ListFont()