aboutsummaryrefslogtreecommitdiffstats
path: root/src/image.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Fix GDI+ image loading by file nameEli Zaretskii2020-04-251-4/+6
| | | | | | | | | | Without a call to image_find_image, we can get a file name that is relative to data-directory/images/, or a file name that starts with "~/", in which case w32_load_image would fail. * src/image.c (native_image_load): Call image_find_image_file to resolve and encode the image file name. * src/w32image.c (w32_load_image): No need to encode the file name, as it's already encoded by native_image_load.
* Use native image API for NSAlan Third2020-04-161-63/+26
| | | | | | | | | | | | | | | | | * configure.ac (NATIVE_IMAGE_API): Move above NS definitions. (HAVE_NATIVE_IMAGE_API): Set for NS. (HAVE_PNG, HAVE_JPEG, HAVE_GIF, HAVE_TIFF): Enable on NS builds. * src/image.c (HAVE_NS): Fix a number of #if's so they no longer rely on HAVE_NS. (PIX_MASK_DRAW): Add for HAVE_NS so libpng support will compile. (image_can_use_native_api): (native_image_load): Add NS support. (png_load): (jpeg_load): (tiff_load): (gif_load): Remove NS specific definitions. * src/nsimage.m (ns_can_use_native_image_api): New function. * src/nsterm.h: (ns_can_use_native_image_api): New function.
* Avoid compiler warning in image.cEli Zaretskii2020-04-141-6/+3
| | | | | | | | * src/image.c (image_can_use_native_api): Avoid compiler warnings by making this function conditioned on HAVE_NATIVE_IMAGE_API. (initialize_image_type): Call image_can_use_native_api only if HAVE_NATIVE_IMAGE_API is non-zero. Reported by Basil L. Contovounesios <contovob@tcd.ie>.
* ; * src/image.c: Cleanup of #ifdef's related to HAVE_NATIVE_IMAGE_API.Eli Zaretskii2020-04-141-4/+2
|
* Make use of MS-Windows native image API be selectable at run timeEli Zaretskii2020-04-141-59/+75
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | * configure.ac: Minor cleanup in how w32image.o is added to the build when native image APIs are requested. * src/w32gui.h (w32_load_image, w32_can_use_native_image_api) (w32_gdiplus_shutdown): Move prototypes from w32term.h here, since w32.c doesn't include w32term.h. * src/image.c (struct image_type): No need to pass TYPE to the 'valid_p' method. All callers changed. (initialize_image_type) [HAVE_NATIVE_IMAGE_API]: Call 'image_can_use_native_api' before trying image-specific methods. (image_can_use_native_api): New function. (image_types): Remove the native_image_type parts. (syms_of_image): New symbol 'native-image'. (parse_image_spec): Accept native-image "type" for any image type. * src/w32term.c (syms_of_w32term): New variable 'w32-use-native-image-API'. * src/w32image.c: (w32_can_use_native_image_api): New function. (gdiplus_init): Rename from w32_gdiplus_startup. Simplify code. Move the call to GdiplusStartup to a separate function. Use ordinal number for SHCreateMemStream if cannot load it by name. (w32_load_image): Ignore Win32Error status from w32_select_active_frame. Move DEFSYMs from here... * src/image.c (syms_of_image) [HAVE_NATIVE_IMAGE_API]: ...to here. * etc/NEWS: Update the entry about native image API use.
* Initial version of native image API support for MS-WindowsJuan José García-Ripoll2020-04-141-32/+131
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * src/w32image.c: New file. * src/w32term.h: Add prototypes of 'w32_load_image', 'w32_gdiplus_startup', 'w32_gdiplus_shutdown', and 'w32_query_frame_background_color'. * src/w32term.c (w32_query_frame_background_color): No longer static. * src/w32.c (term_ntproc) [HAVE_GDIPLUS]: Call 'w32_gdiplus_shutdown'. * src/image.c (struct image_type) <valid_p>: Accept an additional argument, the image type. All implementations changed. (init_native_image_functions, native_image_p, native_image_load) [HAVE_NATIVE_IMAGE_API]: New methods for "native image type". (initialize_image_type) [HAVE_NATIVE_IMAGE_API]: Call 'init_native_image_functions'. (image_types) [HAVE_NATIVE_IMAGE_API]: Add settings for native image API. (lookup_image_type) [HAVE_NATIVE_IMAGE_API]: Initialize native functions if needed. * lisp/term/w32-win.el (dynamic-library-alist): Add gdiplus and shlwapi. * etc/NEWS: Announce the new feature. * configure.ac (native-image-api): New option, OFF by default. (HAVE_NATIVE_IMAGE_API): If native-image-api is selected, add w32image.o to W32_OBJ.
* Pacify gcc in xpm_scanPaul Eggert2020-04-061-2/+3
| | | | | * src/image.c (xpm_scan): Redo a loop for clarity. This also pacifies --enable-gcc-warnings (GCC 9.3.1 x86-64 with -Og).
* Merge from origin/emacs-27Glenn Morris2020-01-151-4/+4
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 0e936f18f8 (origin/emacs-27) Fix build failure with --with-cairo --wi... c34f7e884b Add new node "Package Statuses" to manual fdee034ac8 * lisp/isearch.el: Fix corner cases of isearch-lazy-count. 7b14329d86 ; * lisp/simple.el (messages-buffer): Doc fix. (Bug#39124) 7ec66a59e3 Document spacing issues with Xft for some fonts 08cd247fbd ; * etc/NEWS: Fix typo. d645628e3c Always use lexical-binding in lisp-interaction-mode (bug#3... c42198f78c ; *etc/NEWS: Fix typo. 0ed9cfa7dc vc-dir: ensure we don't use a pager with git 37e0d00c14 Improve ERC's matching of nicks and URLs (bug#38257) d47b157969 Handle tab-bar clicks on a GPM-capable console. e4791f3f8e ;* etc/TODO: Update. # Conflicts: # etc/NEWS
| * Fix build failure with --with-cairo --without-pngYAMAMOTO Mitsuharu2020-01-151-4/+4
| | | | | | | | * src/image.c: Don't enable PNG section only by USE_CAIRO.
* | Merge from origin/emacs-27Glenn Morris2020-01-081-0/+4
|\ \ | |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 6cd9ccb0a2 (origin/emacs-27) Fix compression of directories in Dired 42329e6d3b ; * etc/NEWS: Review of the whole text. af5709f16b Further enhancement on `tramp-file-local-name' fb432446f5 Objective C Mode imenu: cease recognizing "functions" with... a18373a999 ; * etc/NEWS: Update the text about the XDG_CONFIG_HOME/em... 73fd8a4b53 Fix BSD and macOS builds w.r.t. pthread_setname_np (bug#38... f54b24304d Scale top-left coordinates in display-monitor-attributes-list b46c75b16c xref-matches-in-files: Big Tramp speed-up 883b3490d8 * lisp/net/tramp.el (tramp-file-local-name): Remove `save-... c01f55f126 Fix rendering bug due to unsynchronized cairo surface size... 075f21c0e3 Avoid crash by access to cleared img->pixmap->data/img->ma... 16c6dfb4f1 Avoid assertion violations in very small-height windows 9063124b91 Use pthread_setname_np to set thread name # Conflicts: # etc/NEWS # lisp/net/tramp.el
| * Avoid crash by access to cleared img->pixmap->data/img->mask->data (Bug#38774)YAMAMOTO Mitsuharu2020-01-071-0/+4
| | | | | | | | | | * src/image.c (prepare_image_for_display) [USE_CAIRO]: Call IMAGE_BACKGROUND and IMAGE_BACKGROUND_TRANSPARENT.
* | Help the compiler inline sxhashPaul Eggert2020-01-071-2/+2
|/ | | | | | | * src/fns.c (sxhash_obj): Rename from sxhash and make it static, so that the compiler can inline it better. (sxhash): New function that does not take a depth arg. All callers changed.
* Update copyright year to 2020Paul Eggert2020-01-011-1/+1
| | | | Run "TZ=UTC0 admin/update-copyright $(git ls-files)".
* imagemagick-types needs to initialize ImageMagickDhruva Krishnamurthy2019-12-231-8/+13
| | | | | | | * src/image.c (imagemagick_initialize): New function, with body taken from imagemagick_load_image. (imagemagick_load_image, Fimagemagick_types): Use it. Copyright-paperwork-exempt: yes
* Fix image scaling with masks (bug#38109)Alan Third2019-11-291-46/+101
| | | | | | | | | | | | | * src/image.c (lookup_image): Move call to image_set_transform after postprocess_image. (image_create_x_image_and_pixmap_1): Use new function. (image_set_transform): Apply the transform to the mask too. (x_create_xrender_picture): New function. (Create_Pixmap_From_Bitmap_Data): (xpm_load): Use new function. * src/xterm.c (x_composite_image): Use PictOpOver when there is a mask so the transparency is honoured. (x_draw_image_foreground_1): Use x_composite_image.
* Fix English grammar in some doc strings and commentsStephen Gildea2019-11-031-2/+2
| | | | | | (files.el subr.el): Fix some grammar errors in doc strings and comments. (frame.c fringe.c image.c xfns.c xterm.c): Fix some English grammar errors in doc strings.
* lisp/*.el, src/*.c: Doc fixes related to returning t vs non-nilJuanma Barranquero2019-10-171-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | * lisp/progmodes/flymake-proc.el (flymake-proc--find-buffer-for-file): Doc fix; return value is a buffer, not t. * lisp/progmodes/ebrowse.el (ebrowse-member-display-p): Doc fix; return value is the MEMBER argument, not nil. * lisp/files.el (hack-one-local-variable-eval-safep): * lisp/play/doctor.el (doctor-nounp, doctor-pronounp): * lisp/progmodes/flymake-proc.el (flymake-proc--check-include): * lisp/progmodes/js.el (js--broken-arrow-terminates-line-p): Doc fix; a non-nil return value is not always t. * lisp/image.el (image-type-available-p): * lisp/simple.el (region-active-p): * lisp/window.el (frame-root-window-p): * src/buffer.c (Fbuffer_live_p): * src/image.c (Finit_image_library): * src/window.c (Fwindow_minibuffer_p): Doc fix; a non-nil return value is always t. * doc/lispref/minibuf.texi (Minibuffer Windows): Doc fix.
* Make ImageMagick multi-image size calculations work for .ico filesLars Ingebrigtsen2019-09-241-5/+21
| | | | | * src/image.c (imagemagick_load_image): Compute image sizes correctly in multi-image .ico files and the like (bug#18333).
* Allow a :stride argument so XBM boolvecs are in the right format.Pip Cet2019-09-241-6/+15
| | | | | | | | * src/image.c (xbm_image_p): Explicitly specify the right stride if a bool vector is used as argument. * doc/lispref/display.texi (XBM Images): Describe bool vectors accurately. * etc/NEWS: Document the change (bug#36337).
* Update some URLsPaul Eggert2019-09-231-2/+2
| | | | | | | | | | | | | | | | | This mostly changes http: to https: in URLs. It also updates some URLs that have moved, removes some URLs that no longer work, recommends against using procmail (procmail.org no longer works), and removes some mentions of the no-longer-existing Gmane, LPF and VTW. It doesn't update all URLs, just the ones I had time for. * GNUmakefile (help): * admin/admin.el (manual-doctype-string): * admin/charsets/Makefile.in (${charsetdir}/ALTERNATIVNYJ.map): * admin/charsets/mapconv: * lisp/net/soap-client.el (soap-create-envelope): * lisp/org/org.el (org-doi-server-url): * lisp/textmodes/bibtex.el (bibtex-generate-url-list): Prefer https: to http: un URLs.
* Mention image caching in the `image-size' doc stringLars Ingebrigtsen2019-09-211-1/+6
| | | | | * src/image.c (Fimage_size): Mention that this function caches images, and what to do about that (bug#33275).
* Fix bug with non-paletted transparent PNGsPaul Eggert2019-08-251-8/+9
| | | | | | Adapted from a fix by YAMAMOTO Mitsuharu (Bug#37153#77). * src/image.c (png_load_body): Fix bug with non-paletted transparent images.
* Fix misdisplay of PNG paletted imagesPaul Eggert2019-08-251-9/+25
| | | | | | | | | | | Problem reported by Roland Winkler (Bug#37153). Derived from a patch suggested by YAMAMOTO Mitsuharu (Bug#37153#62). * src/image.c (png_get_valid) [WINDOWSNT]: Do not dynamically link this function. (png_get_tRNS) [WINDOWSNT && PNG_tRNS_SUPPORTED]: Dynamically link this function instead. (png_load_body): Do not assume that every paletted image supplies only transparency data. Fix typo in use of transparent_p.
* Remove INT_ADD_WRAPV bug workaroundsPaul Eggert2019-08-141-5/+3
| | | | | | | | | * src/alloc.c (free_cons): * src/casefiddle.c (do_casify_multibyte_string): * src/editfns.c (styled_format): * src/image.c (png_load_body): Remove recent workarounds for INT_ADD_WRAPV bugs since the bugs have been fixed (Bug#37006).
* ; Add commentary to recent changesEli Zaretskii2019-08-121-1/+3
| | | | | | | | * src/image.c (png_load_body): * src/editfns.c (styled_format): * src/casefiddle.c (do_casify_multibyte_string): * src/alloc.c (free_cons): Comment why we use a signed temporary integer variable. (Bug#37006)
* Prefer signed when testing for signed overflowPaul Eggert2019-08-111-2/+2
| | | | | | | | | | * src/alloc.c (free_cons): * src/casefiddle.c (do_casify_multibyte_string): * src/editfns.c (styled_format): * src/image.c (png_load_body): Use signed arguments to INT_MULTIPLY_WRAPV etc. This doesn’t fix any bugs, but GCC emits better code when all args are signed. Also, this removes the need for an if in free_cons (Bug#37006).
* Fix minor compilation problems on MS-WindowsEli Zaretskii2019-08-061-6/+6
| | | | | | | * src/w32fns.c (Fdefault_printer_name): Fix size of local buffer. * src/image.c [WINDOWSNT]: Test __MINGW_MAJOR_VERSION as well to shut up compiler warnings.
* Don't crash when parsing bad SVG dataPaul Eggert2019-07-251-2/+6
| | | | | Derived from a patch by Pip Cet (Bug#36773#47). * src/image.c (svg_load_image): Work around librsvg 2.40.13 bug.
* Simplify hashfn/cmpfn calling conventionPaul Eggert2019-07-201-2/+1
| | | | | | | | | | | | | | | | * src/fns.c (cmpfn_eql, cmpfn_equal, cmpfn_user_defined) (hashfn_eq, hashfn_equal, hashfn_eql, hashfn_user_defined): * src/profiler.c (cmpfn_profiler, hashfn_profiler): Use new calling convention where the return value is a fixnum instead of EMACS_UINT. While we’re at it, put the hash table at the end, since that’s a bit simpler and generates better code (at least on the x86-64). All callers changed. * src/fns.c (hash_lookup): Store fixnum rather than EMACS_UINT. All callers changed. (hash_put): Take a fixnum rather than an EMACS_UINT. All callers changed. Remove unnecessary eassert (XUFIXNUM does it). * src/lisp.h (struct hash_table_test): Adjust signatures of cmpfn and hashfn.
* Resurrect SVG support on MS-WindowsEli Zaretskii2019-07-111-3/+10
| | | | | | | | | | * src/image.c (syms_of_image) <Qgio> [HAVE_NTGUI]: New DEFSYM. (init_svg_functions) [LIBRSVG_CHECK_VERSION >= 2.32.0]: Load g_file_new_for_path and g_memory_input_stream_new_from_data from libgio, not from libglib. (Bug#35548) * lisp/term/w32-win.el (dynamic-library-alist): Add the libgio DLL.
* Avoid functions deprecated in librsvg 2.45.1Paul Eggert2019-07-101-28/+54
| | | | | | | | | | | * src/image.c (init_svg_functions) [WINDOWSNT]: Load the pre-2.32 or 2.32 functions, depending on LIBRSVG_CHECK_VERSION. (svg_load_image): In librsvg 2.32 or later, use g_memory_input_stream_new_from_data, g_file_new_for_path and rsvg_handle_new_from_stream_sync rather than the deprecated-in-2.45 rsvg_handle_write and rsvg_handle_close. From a patch by YAMAMOTO Mitsuharu (Bug#35548#11).
* Use fewer locks when accessing stdioPaul Eggert2019-07-081-6/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * src/alloc.c, src/bidi.c, src/emacs-module.c, src/pdumper.c: * src/regex-emacs.c, src/unexhp9k800.c, src/unexmacosx.c: * src/widget.c, src/xdisp.c, src/xselect.c, src/xterm.c: Include sysstdio.h instead of stdio.h, to avoid locking stdio streams in many cases. * src/alloc.c (test_setjmp): * src/bidi.c (bidi_dump_cached_states): * src/cm.c (calccost): * src/dispnew.c (init_display_interactive): * src/emacs.c (main): * src/image.c (convert_mono_to_color_image): * src/minibuf.c (read_minibuf_noninteractive): * src/nsfont.m (ns_descriptor_to_entity) (ns_dump_glyphstring): * src/nsterm.h (NSTRACE_MSG_NO_DASHES): * src/nsterm.m (ns_mouse_position) (sendEvent:, keyDown:, performDragOperation:): * src/pdumper.c (dump_fingerprint, print_paths_to_root_1): * src/print.c (debug_print): * src/regex-emacs.c (debug_putchar, print_fastmap) (print_partial_compiled_pattern, print_compiled_pattern) (print_double_string, regex_compile): * src/term.c (vfatal): * src/unexhp9k800.c (read_header): * src/unexmacosx.c (unexec_error): * src/widget.c (EmacsFrameInitialize): * src/xdisp.c (message_to_stderr, vmessage, dump_glyph_row) (Fdump_glyph_matrix, Fdump_frame_glyph_matrix, dump_glyph_string): * src/xfaces.c (Fdump_colors, Fdump_face): * src/xselect.c (x_clipboard_manager_error_2): * src/xterm.c (x_initialize): * src/xwidget.c (WEBKIT_FN_INIT): Prefer unlocked calls like fputs to locked calls like fprintf. * src/charset.c (read_hex): * src/cm.c (cmputc, cmcheckmagic): * src/dispnew.c (update_frame, update_frame_with_menu) (update_frame_1, Fsend_string_to_terminal, Fding) (bitch_at_user): * src/emacs.c (main, Fdump_emacs): * src/emacs-module.c (module_abort): * src/fileio.c (Fdo_auto_save): * src/image.c (slurp_file) (png_read_from_file, png_load_body, our_stdio_fill_input_buffer): * src/keyboard.c (record_char, kbd_buffer_get_event) (handle_interrupt): * src/lread.c (readbyte_from_stdio, read1): * src/minibuf.c (read_minibuf_noninteractive): * src/print.c (printchar_to_stream, strout) (Fredirect_debugging_output): * src/sysdep.c (reset_sys_modes, close_output_streams) (procfs_ttyname, procfs_get_total_memory): * src/term.c (tty_ring_bell, tty_send_additional_strings) (tty_set_terminal_modes, tty_reset_terminal_modes) (tty_update_end, tty_clear_end_of_line, tty_write_glyphs) (tty_write_glyphs_with_face, tty_insert_glyphs) (tty_menu_activate): * src/xfaces.c (Fx_load_color_file): Simplify by using ordinary calls like putc to explicitly-unlocked calls like putc_unlocked, since the ordinary calls are now unlocked anyway. * src/emacs.c (main, Fdump_emacs): * src/pdumper.c (Fdump_emacs_portable): Coalesce adjacent printfs. * src/nsterm.h: Include sysstdio.h as this file’s macros rely on it. * src/regex-emacs.c (print_compiled_pattern): Omit redundant fflush. * src/sysstdio.h: Include unlocked-io.h. (clearerr_unlocked, feof_unlocked, ferror_unlocked) (fflush_unlocked, fgets_unlocked, fputc_unlocked) (fputs_unlocked, fread_unlocked, fwrite_unlocked) (getc_unlocked, getchar_unlocked, putc_unlocked) (putchar_unlocked): Remove these macros; now done by unlocked-io.h. * src/xwidget.c: Include sysstdio.h.
* Remove printmax_t etc.Paul Eggert2019-07-071-4/+6
| | | | | | | | | | | | printmax_t etc. were needed only for platforms that lacked support for printing intmax_t. These platforms are now so obsolete that they are no longer practical porting targets. * src/image.c (gs_load): Fix unlikely buffer overrun discovered while making these changes. It was introduced in 2011-07-17T00:34:43!eggert@cs.ucla.edu. * src/lisp.h (printmax_t, uprintmax_t, pMd, pMu, pMx): Remove. All uses replaced by their standard counterparts intmax_t, uintmax_t, PRIdMAX, PRIuMAX, PRIxMAX.
* Fix rotation validity test in image.cEli Zaretskii2019-07-031-1/+4
| | | | | | * src/image.c (compute_image_rotation): Fix the validity test for :rotation values. This avoids logging error messages when no :rotation was provided in the image spec.
* Adjust return value of image-transforms-pEli Zaretskii2019-07-011-10/+6
| | | | | | | * src/image.c (Fimage_transforms_p): * doc/lispref/display.texi (Image Descriptors): image-transforms-p now returns at most (scale rotate90), even if ImageMagick is available.
* Remove divide_doublePaul Eggert2019-06-301-15/+9
| | | | | | * src/image.c (divide_double): Remove. All uses replaced with inline equivalents. Suggested by Eli Zaretskii in: https://lists.gnu.org/r/emacs-devel/2019-06/msg01067.html
* Fix use of undefined macroAndreas Schwab2019-06-301-3/+3
| | | | | | | * src/xdisp.c (append_space_for_newline): Use FRAME_FONT only inside HAVE_WINDOW_SYSTEM. (extend_face_to_end_of_line): Likewise. (syms_of_xdisp): Doc fix.
* Pacify gcc and other image rotation tweaksPaul Eggert2019-06-291-74/+79
| | | | | | | | | | | | * src/image.c: No need to include <float.h> as lisp.h does that. (matrix3x3_copy): Remove; no longer needed. (divide_double): New function, to avoid undefined behavior when dividing by zero on non-IEEE hosts. (image_set_transform): Simplify transformation computation by avoiding the need to copy a matrix. Pacify gcc 9 -Wdouble-promotion and -Wmaybe-uninitialized. Avoid unnecessary assignment of width and height. Improve error reporting for unsupported native image rotation.
* Support native image transforms on MS-WindowsEli Zaretskii2019-06-291-209/+162
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* Omit a few minor unnecessary range checksPaul Eggert2019-06-271-6/+6
| | | | | | | | | | Based on Pip Cet’s review (Bug#36370#19). * src/fileio.c (Fdo_auto_save): * src/image.c (lookup_image): * src/textprop.c (Fnext_single_char_property_change): Prefer XFIXNUM to XFIXNAT for clarity and consistency with neighboring code, and to avoid unnecessary range checks. * src/image.c (lookup_image): Omit unnecessary range checks.
* Clean up use of XFIXNUM etc.Paul Eggert2019-06-271-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A few bits of the code were relying on the fact that XFIXNUM, XFIXNAT, and XUFIXNUM do something even with arguments that are not fixnums/fixnats. Separate these rare uses out into XFIXNUM_RAW and XUFIXNUM_RAW. Problem and original patch reported by Pip Cet (Bug#36370). * src/ccl.c (Fccl_execute_on_string): * src/fileio.c (Finsert_file_contents, a_write) (Fdo_auto_save): * src/process.c (conv_lisp_to_sockaddr): * src/textprop.c (Fnext_single_char_property_change) (Fprevious_single_char_property_change) (Fnext_property_change, Fnext_single_property_change) (Fprevious_property_change) (Fprevious_single_property_change): Don’t assume fixnums are nonnegative. * src/ccl.c (Fccl_execute_on_string): Fix range-checking bug if AREF (status, i) is out of int range. * src/data.c (arith_driver): Use XFIXNUM_RAW as we want efficient garbage if the value is not a fixnum. * src/dosfns.c (Fint86, Fdos_memput): Check that args are nonnegative. * src/image.c (lookup_image): Check that args are in range. * src/lisp.h (lisp_h_XHASH): Use XUFIXNUM_RAW, since this is for hashing. (lisp_h_XFIXNAT, XFIXNAT) [USE_LSB_TAG]: Remove macros. (lisp_h_XFIXNUM_RAW, XFIXNUM_RAW) [USE_LSB_TAG]: New macros, with the semantics of the old macros without _RAW. (XFIXNUM_RAW, XUFIXNUM_RAW): New inline functions, with the semantics of the old functions without _RAW. (FIXNUMP): Move definition up to avoid forward use. (XFIXNUM, XFIXNAT, XUFIXNUM): Use eassume to add a runtime check (when debugging) that the argument has the proper form. (XFIXNUM, XFIXNAT): Now inline functions only, since they refer to their arguments more than once now that they use eassume. * src/textprop.c (Fprevious_single_char_property_change): Avoid fixnum overflow with invalid input. (set_text_properties): Fix unlikely failure to validate arguments, by using EQ instead of XFIXNAT. * src/w32term.c (w32_draw_glyph_string): * src/xterm.c (x_draw_glyph_string): Treat negative minimums as 0 rather than as garbage patterns.
* Catch duplicate keywords in image specsPaul Eggert2019-06-271-23/+23
| | | | | | | | | * src/image.c (struct image_keyword.count): Now bool, not int, since it is either 0 or 1. (parse_image_spec, xpm_image_p): Use bool for boolean. (parse_image_spec): Fix a bug introduced in 2011-09-21T17:41:20!eggert@cs.ucla.edu that reported only triplicate (or more) keywords, not duplicates.
* ; * src/image.c: Minor copyedits of native transform commentary.Eli Zaretskii2019-06-231-5/+5
|
* * src/image.c (image_set_rotation): Do negation at compile-time.Paul Eggert2019-06-171-2/+2
|
* Avoid rounding error in image rotationYAMAMOTO Mitsuharu2019-06-171-3/+3
| | | | * src/image.c (image_set_rotation): Halve translations as double values.
* Revert "Simplify image transforms"Alan Third2019-06-161-98/+212
| | | | | | This reverts commit cf3081d208814ea02fce33aac645abfc24f880a6. ; Pushed in error.
* Simplify image transformsAlan Third2019-06-161-212/+98
| | | | | | | | | | | * src/image.c: (image_set_rotation, image_set_size, image_set_transform): Combine into image_set_transform. (image_set_crop): Remove function. (lookup_image): Remove calls to removed functions and remove transform_matrix. * test/manual/image-transforms-tests.el (test-cropping): Remove function. (test-transforms): Remove reference to test-cropping.
* Document image transformsAlan Third2019-06-161-0/+81
| | | | | | | * doc/lispref/display.texi (Image Descriptors): Document :crop and update :rotation. * src/image.c: Describe the image transform matrix layout. * test/manual/image-transforms-tests.el: New file.
* Implement native image rotation and cropping on cairoYAMAMOTO Mitsuharu2019-06-081-21/+53
| | | | | | | | | | | | | | | | | | | | | | | | * src/dispextern.h (struct image) [USE_CAIRO]: * src/image.c (free_image, image_clear_image_1) (image_set_crop, image_set_size, image_set_rotation) (image_create_x_image_and_pixmap) [USE_CAIRO]: #ifdef out HAVE_XRENDER part. * src/image.c (cr_create_surface_from_pix_containers) [USE_CAIRO]: Rename from cr_create_surface_from_pix_containers. Change arguments to pair of Emacs_Pix_Container:s. Move block_input and unblock_input to caller. (cr_put_image_to_cr_data) [USE_CAIRO]: New function. (prepare_image_for_display) [USE_CAIRO]: Use it. (image_set_transform) [USE_CAIRO]: Create dummy solid color pattern equipped with transformation matrix and set it to img->cr_data. * src/xterm.c (fringe_bmp) [USE_CAIRO]: Change type to cairo_pattern_t **. (x_cr_define_fringe_bitmap, x_cr_destroy_fringe_bitmap) [USE_CAIRO]: Create or destroy cairo pattern. (x_cr_draw_image) [USE_CAIRO]: Remove arguments image_width and image_height. Change type of image to cairo pattern. All callers changed. * src/gtkutil.c (xg_get_image_for_pixmap) [USE_CAIRO]: Get cairo surface from img->cr_data, which is of cairo pattern now.
* Fix image_set_crop yet againYAMAMOTO Mitsuharu2019-06-071-15/+3
| | | | | | | | * src/image.c (image_set_crop) [HAVE_NATIVE_TRANSFORMS]: Don't call compute_image_size, as it is already called from image_set_size. (image_set_size, image_set_crop) [HAVE_NATIVE_TRANSFORMS]: Use harmless matrix transformation code also for USE_CAIRO and HAVE_NTGUI cases, though image_set_transform is not yet implemented on them.