aboutsummaryrefslogtreecommitdiffstats
path: root/src/w32image.c
diff options
context:
space:
mode:
authorCecilio Pardo2024-11-04 18:58:40 +0100
committerEli Zaretskii2024-11-05 14:37:07 +0200
commit4e8bf2977e6d1abf6d3cf82e9c1ae3dee5bfcda0 (patch)
treec52d029ee9f13d91f075bf2b34d0380274955d84 /src/w32image.c
parent8a7910fb67e3b89de430d3b3e5009b145ec0c602 (diff)
downloademacs-4e8bf2977e6d1abf6d3cf82e9c1ae3dee5bfcda0.tar.gz
emacs-4e8bf2977e6d1abf6d3cf82e9c1ae3dee5bfcda0.zip
Support :transform-smoothing on images (MS-Windows) (bug#57166)
* src/dispextern.h (struct image): Add field 'smoothing' for NTGUI. * src/image.c (image_set_transform): Assign the 'smoothing' field of the image struct. * src/w32gdiplus.h: Add references to more GDI+ functions. * src/w32image.c (gdiplus_init): Add references to more GDI+ functions. * src/w32term.c (w32_draw_image_foreground): If the image is marked for smoothing and GDI+ is available, draw it with GDI+ bilinear interpolation. * etc/NEWS: New entry for this change.
Diffstat (limited to 'src/w32image.c')
-rw-r--r--src/w32image.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/w32image.c b/src/w32image.c
index 44eed087528..da4d6843ba9 100644
--- a/src/w32image.c
+++ b/src/w32image.c
@@ -42,6 +42,8 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
42#ifdef WINDOWSNT 42#ifdef WINDOWSNT
43GdiplusStartup_Proc fn_GdiplusStartup; 43GdiplusStartup_Proc fn_GdiplusStartup;
44GdiplusShutdown_Proc fn_GdiplusShutdown; 44GdiplusShutdown_Proc fn_GdiplusShutdown;
45GdipCreateFromHDC_Proc fn_GdipCreateFromHDC;
46GdipDeleteGraphics_Proc fn_GdipDeleteGraphics;
45GdipGetPropertyItemSize_Proc fn_GdipGetPropertyItemSize; 47GdipGetPropertyItemSize_Proc fn_GdipGetPropertyItemSize;
46GdipGetPropertyItem_Proc fn_GdipGetPropertyItem; 48GdipGetPropertyItem_Proc fn_GdipGetPropertyItem;
47GdipImageGetFrameDimensionsCount_Proc fn_GdipImageGetFrameDimensionsCount; 49GdipImageGetFrameDimensionsCount_Proc fn_GdipImageGetFrameDimensionsCount;
@@ -53,6 +55,9 @@ GdipCreateBitmapFromStream_Proc fn_GdipCreateBitmapFromStream;
53GdipCreateBitmapFromScan0_Proc fn_GdipCreateBitmapFromScan0; 55GdipCreateBitmapFromScan0_Proc fn_GdipCreateBitmapFromScan0;
54SHCreateMemStream_Proc fn_SHCreateMemStream; 56SHCreateMemStream_Proc fn_SHCreateMemStream;
55GdipCreateHBITMAPFromBitmap_Proc fn_GdipCreateHBITMAPFromBitmap; 57GdipCreateHBITMAPFromBitmap_Proc fn_GdipCreateHBITMAPFromBitmap;
58GdipCreateBitmapFromHBITMAP_Proc fn_GdipCreateBitmapFromHBITMAP;
59GdipDrawImageRectRectI_Proc fn_GdipDrawImageRectRectI;
60GdipSetInterpolationMode_Proc fn_GdipSetInterpolationMode;
56GdipDisposeImage_Proc fn_GdipDisposeImage; 61GdipDisposeImage_Proc fn_GdipDisposeImage;
57GdipGetImageHeight_Proc fn_GdipGetImageHeight; 62GdipGetImageHeight_Proc fn_GdipGetImageHeight;
58GdipGetImageWidth_Proc fn_GdipGetImageWidth; 63GdipGetImageWidth_Proc fn_GdipGetImageWidth;
@@ -80,6 +85,14 @@ gdiplus_init (void)
80 get_proc_addr (gdiplus_lib, "GdiplusShutdown"); 85 get_proc_addr (gdiplus_lib, "GdiplusShutdown");
81 if (!fn_GdiplusShutdown) 86 if (!fn_GdiplusShutdown)
82 return false; 87 return false;
88 fn_GdipCreateFromHDC = (GdipCreateFromHDC_Proc)
89 get_proc_addr (gdiplus_lib, "GdipCreateFromHDC");
90 if (!fn_GdipCreateFromHDC)
91 return false;
92 fn_GdipDeleteGraphics = (GdipDeleteGraphics_Proc)
93 get_proc_addr (gdiplus_lib, "GdipDeleteGraphics");
94 if (!fn_GdipDeleteGraphics)
95 return false;
83 fn_GdipGetPropertyItemSize = (GdipGetPropertyItemSize_Proc) 96 fn_GdipGetPropertyItemSize = (GdipGetPropertyItemSize_Proc)
84 get_proc_addr (gdiplus_lib, "GdipGetPropertyItemSize"); 97 get_proc_addr (gdiplus_lib, "GdipGetPropertyItemSize");
85 if (!fn_GdipGetPropertyItemSize) 98 if (!fn_GdipGetPropertyItemSize)
@@ -120,6 +133,18 @@ gdiplus_init (void)
120 get_proc_addr (gdiplus_lib, "GdipCreateHBITMAPFromBitmap"); 133 get_proc_addr (gdiplus_lib, "GdipCreateHBITMAPFromBitmap");
121 if (!fn_GdipCreateHBITMAPFromBitmap) 134 if (!fn_GdipCreateHBITMAPFromBitmap)
122 return false; 135 return false;
136 fn_GdipCreateBitmapFromHBITMAP = (GdipCreateBitmapFromHBITMAP_Proc)
137 get_proc_addr (gdiplus_lib, "GdipCreateBitmapFromHBITMAP");
138 if (!fn_GdipCreateBitmapFromHBITMAP)
139 return false;
140 fn_GdipDrawImageRectRectI = (GdipDrawImageRectRectI_Proc)
141 get_proc_addr (gdiplus_lib, "GdipDrawImageRectRectI");
142 if (!fn_GdipDrawImageRectRectI)
143 return false;
144 fn_GdipSetInterpolationMode = (GdipSetInterpolationMode_Proc)
145 get_proc_addr (gdiplus_lib, "GdipSetInterpolationMode");
146 if (!fn_GdipSetInterpolationMode)
147 return false;
123 fn_GdipDisposeImage = (GdipDisposeImage_Proc) 148 fn_GdipDisposeImage = (GdipDisposeImage_Proc)
124 get_proc_addr (gdiplus_lib, "GdipDisposeImage"); 149 get_proc_addr (gdiplus_lib, "GdipDisposeImage");
125 if (!fn_GdipDisposeImage) 150 if (!fn_GdipDisposeImage)