• YAMAMOTO Mitsuharu's avatar
    Rework cairo image support to improve consistency (Bug#35871) · c89900eb
    YAMAMOTO Mitsuharu authored
    * src/dispextern.h (Emacs_Pix_Container) [USE_CAIRO]: New struct.  Also used
    as aliases of Emacs_Pixmap and Emacs_Pix_Context.
    (x_kill_gs_process) [USE_CAIRO]: #ifdef out extern.
    (RGB_PIXEL_COLOR) [USE_CAIRO]: Define as unsigned long.
    
    * src/image.c: Include stdint.h.  On cairo, remove existing image support
    code, use non-X11-specific code for XBM/XPM, and remove POSTSCRIPT support.
    (PUT_PIXEL): New macro.  Use it instead of XPutPixel when not specific to X11.
    (GET_PIXEL, NO_PIXMAP, PIX_MASK_RETAIN, PIX_MASK_DRAW)
    (RGB_TO_ULONG, ARGB_TO_ULONG, RED_FROM_ULONG)
    (GREEN_FROM_ULONG, BLUE_FROM_ULONG, RED16_FROM_ULONG)
    (GREEN16_FROM_ULONG, BLUE16_FROM_ULONG)	[USE_CAIRO]: New macros.
    (image_create_pix_container, image_pix_container_put_pixel)
    (image_pix_context_get_pixel, image_pix_container_create_from_bitmap_data)
    (cr_create_cr_surface_from_image) [USE_CAIRO]: New functions.
    (image_create_x_image_and_pixmap_1, image_destroy_x_image)
    (image_check_image_size): Extract X11-specific code from here ...
    (x_create_x_image_and_pixmap, x_destroy_x_image)
    (x_check_image_size) [HAVE_X_WINDOWS]: ... to here.
    (x_create_bitmap_mask) [HAVE_X_WINDOWS]: Use them.  Inline specialized version
    of four_corners_best.
    (prepare_image_for_display, image_clear_image_1, image_destroy_x_image)
    (gui_put_x_image, image_put_x_image, image_get_x_image, image_unget_x_image)
    (Create_Pixmap_From_Bitmap_Data, lookup_rgb_color)
    (image_to_emacs_colors) [USE_CAIRO]: Add cairo support.
    (image_background, png_load_body) [USE_CAIRO]: Use image_alloc_image_color for
    img->background.
    (image_sync_to_pixmaps) [USE_CAIRO]: #ifdef out function.
    (Create_Pixmap_From_Bitmap_Data) [HAVE_X_WINDOWS]: Move image_check_image_size
    call from here ...
    (xbm_load_image): ... to here.
    (xpm_load_image):
    (image_build_heuristic_mask, pbm_load, gif_load) [USE_CAIRO]: Use
    lookup_rgb_color for argument of PUT_PIXEL.
    (image_pixmap_draw_cross) [HAVE_X_WINDOWS || USE_CAIRO]: New function.
    (image_disable_image) [HAVE_X_WINDOWS || USE_CAIRO]: Use it.
    (CrossForeground) [!HAVE_NTGUI && !HAVE_NS]: New macro.
    (image_disable_image) [!HAVE_NTGUI && !HAVE_NS]: Use it.
    
    * src/xterm.c (handle_one_xevent) <ClientMessage> [USE_CAIRO]: #ifdef out
    x_kill_gs_process call.
    (x_free_pixmap) [USE_CAIRO]: Free Emacs_Pix_Container and data it contains.
    c89900eb
image.c 269 KB