summaryrefslogtreecommitdiff
path: root/src/dispextern.h
diff options
context:
space:
mode:
authorAlan Third <alan@idiocy.org>2019-01-02 21:00:09 +0000
committerAlan Third <alan@idiocy.org>2019-01-10 19:24:20 +0000
commita1b7a3f2a3957a399d6c3c7bcffa07ac67da82fc (patch)
tree478594bd679f2db099fcb6320750f24fcedf5fc6 /src/dispextern.h
parentc342b26371480316024e1e5d63cd8b3f035dda69 (diff)
downloademacs-a1b7a3f2a3957a399d6c3c7bcffa07ac67da82fc.tar.gz
Add native image scaling (bug#33587)
* configure.ac: Test for XRender outside of xft checks. * src/Makefile.in (XRENDER_LIBS): List XRender libs separately from xft libs. * lisp/image.el (image--get-imagemagick-and-warn): Allow resizing if native scaling is available. * src/dispextern.h: Add XRender and image scaling stuff. (struct image): Add XRender Pictures. * src/image.c (x_create_bitmap_mask): (image_create_x_image_and_pixmap): Handle XRender Picture. (scale_image_size): (compute_image_size): Make available when any form of scaling is enabled. (x_set_image_size): New function. (lookup_image): Set image size. (x_create_x_image_and_pixmap): Create XRender Picture when necessary. (x_put_x_image): Handle the case where desired size != actual size. (free_image): Free XRender Pictures. (Fimage_scaling_p): New function. (syms_of_image): Add image-scaling-p. * src/nsimage.m (ns_load_image): Remove NS specific resizing. ([EmacsImage setSizeFromSpec:]): Remove method. (ns_image_set_size): New function. * src/nsterm.m (ns_draw_fringe_bitmap): Cocoa and GNUstep both have the same compositing functions, so remove unnecessary difference. * src/xterm.c (x_composite_image): New function. (x_draw_image_foreground): Use new x_composite_image function. * doc/lispref/display.texi (Image Descriptors): Document image-scaling-p and add resizing descriptors. (ImageMagick Images): Remove resizing descriptors.
Diffstat (limited to 'src/dispextern.h')
-rw-r--r--src/dispextern.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/dispextern.h b/src/dispextern.h
index 5774e3e9514..b064875ac46 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -31,6 +31,9 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#include <X11/Intrinsic.h>
#endif /* USE_X_TOOLKIT */
+#ifdef HAVE_XRENDER
+#include <X11/extensions/Xrender.h>
+#endif
#else /* !HAVE_X_WINDOWS */
/* X-related stuff used by non-X gui code. */
@@ -2935,6 +2938,11 @@ struct redisplay_interface
#ifdef HAVE_WINDOW_SYSTEM
+#if defined (HAVE_X_WINDOWS) && defined (HAVE_XRENDER) \
+ || defined (HAVE_NS)
+#define HAVE_NATIVE_SCALING
+#endif
+
/* Structure describing an image. Specific image formats like XBM are
converted into this form, so that display only has to deal with
this type of image. */
@@ -2958,6 +2966,11 @@ struct image
and the latter is outdated. NULL means the X image has been
synchronized to Pixmap. */
XImagePtr ximg, mask_img;
+
+#ifdef HAVE_NATIVE_SCALING
+ /* Picture versions of pixmap and mask for compositing. */
+ Picture picture, mask_picture;
+#endif
#endif
/* Colors allocated for this image, if any. Allocated via xmalloc. */