• Eli Zaretskii's avatar
    Support native image transforms on MS-Windows · 74a5a332
    Eli Zaretskii authored
    This changeset also rearranges native image transform code
    for other platforms to make it cleaner, and also removes
    the support for native cropping.  For the discussions, see
    https://lists.gnu.org/archive/html/emacs-devel/2019-06/msg00242.html
    
    * src/w32term.c (w32_image_rotations_p, transform): New functions.
    (w32_draw_image_foreground): If image rotation is requested
    and supported, call PlgBlt to transform the image.
    (w32_initialize): Populate the PlgBlt function pointer if it
    is supported.
    * src/w32term.h (w32_image_rotations_p): Add prototype.
    * src/dispextern.h (struct image) [HAVE_NTGUI]: New member xform.
    * src/image.c (compute_image_rotation): Renamed from
    image_set_rotation.  Only compute and returns the rotation
    angle; leave the matrix calculation for later.  Log an error
    message if the :rotation parameter is not a number.
    (image_set_crop): Function deleted.  We no longer support
    native cropping, as one can display an image slice instead.
    (image_set_transform): Compute the transform matrix in its
    entirety here, in two variants: one for XRender and Cairo, the
    other for NS and MS-Windows.  call compute_image_size and
    compute_image_rotation internally.
    (lookup_image) [HAVE_NATIVE_TRANSFORMS]: Call only
    image_set_transform.  No need to pass the transform matrix to
    image_set_transform.
    (Fimage_transforms_p): Return a list of transform capabilities
    rather than a simple boolean.  Support TTY frames as well.
    * src/nsimage.m (setTransform:): Don't invert the matrix, as
    it is already inverted in image.c.
    
    * test/manual/image-transforms-tests.el (test-cropping): State
    in the text that only ImageMagick supports cropping.
    
    * doc/lispref/display.texi (Image Descriptors): Update the
    documentation of native image transforms.
    (ImageMagick Images): Move the description of ':crop' here.
    
    * etc/NEWS: Minor copyedits of the feature announcement.
    74a5a332