1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-04-18 03:51:48 -07:00
Commit graph

935 commits

Author SHA1 Message Date
Po Lu
8e1c56ae46 ; Add 2024 to copyright years 2024-01-02 09:47:10 +08:00
Stefan Kangas
5f923ff1a6 ; Fix typos 2023-12-03 23:31:30 +01:00
Alan Third
6cc6455e93 Fix SVG colors (bug#56182)
* src/image.c (svg_load_image): Reverse the R and B bytes in the
Windows colors before using them to generate the SVG.
2023-09-13 20:19:44 +01:00
Po Lu
a40f181623 Fix two crashes upon startup
* src/image.c (image_create_bitmap_from_data)
(image_create_bitmap_from_file): Specify a Window or a Pixmap
describing the screen, not a back buffer drawable which may not exist.
Otherwise, Emacs crashes on startup when a bitmap icon is in use.
2023-04-28 11:47:46 +08:00
Eli Zaretskii
cae528457c ; Add 2023 to copyright years. 2023-01-01 05:31:12 -05:00
Manuel Giraud
dc78779c0c Fix SVG scaling (bug#59802)
Fix SVG scaling with librsvg>2.52 and SVG file with only one known
dimension.

* src/image.c (svg_load_image): Compute a percentage dimension with
the other known dimension.
2022-12-16 17:47:37 +02:00
Stefan Kangas
a7f8087d7f Remove unused parameter from image_create_pix_container
* src/image.c (image_create_pix_container): Remove unused
frame parameter. Update callers.
2022-11-25 10:18:11 +01:00
Po Lu
44138d5ecc ; * src/image.c (syms_of_image): Add missed part of change.
Author:
2022-11-06 20:11:56 +08:00
Po Lu
5f8c655a44 Fix splash screen display on NS and Haiku with native image APIs
* src/image.c (syms_of_image): Add Qsvg image type if SVG is
also supported by native image APIs.
2022-11-06 20:07:49 +08:00
Po Lu
ecdbf82cb9 Fix leaks of XImage structures in image.c
* src/image.c (image_clear_image, lookup_image): Fix coding
style.
(x_destroy_x_image): Remove unnecessary assertion.  Call
XDestroyImage, since otherwise only the image data is freed.
(image_from_emacs_colors): Rename variables to make more sense.
2022-11-01 12:54:03 +08:00
Lars Ingebrigtsen
07ee1be052 Move imagep in image.c from the debugging section
* lisp/simple.el (imagep): Remove.
* src/image.c (Fimagep): Always define.
2022-09-13 16:37:31 +02:00
Eli Zaretskii
48c562fb74 ; * src/image.c (svg_load_image): Another minor cleanup. (Bug#51104) 2022-09-13 17:12:40 +03:00
Eli Zaretskii
96b221dd2a ; * src/image.c (svg_load_image): Always free 'err' if non-NULL. 2022-09-13 16:38:50 +03:00
Eli Zaretskii
dfbe745ed9 Fix last change in image.c
* src/image.c (svg_load_image): Don't call Lisp to remove trailing
whitespace from librsvg error messages, do it in C instead; this
reduces consing and is much cleaner.  Don't display empty error
reason if librsvg happens to return an empty message text.
(syms_of_image): Don't DEFSYM string-trim-right.  (Bug#57755)
2022-09-13 16:26:50 +03:00
dickmao
dd22694421 Avoid double svg error reporting and segfaults
* src/image.c (svg_load_image): Use g_error_free directly instead
of the helder g_clear_error (since we're only calling it with
non-nil values).
(svg_load_image): Avoid segfault and double reporting errors.
* test/manual/image-tests.el (image-tests-load-image/svg-too-big)
(image-tests-load-image/svg-invalid): Test it (bug#57755).
2022-09-13 13:57:44 +02:00
Stefan Kangas
816106b7e6 Display librsvg error when loading bad SVG
* src/image.c (svg_load_image): Display the error message from librsvg
when parsing a bad SVG image file.
* test/manual/image-tests.el
(image-tests-load-image/svg-invalid): New test.
2022-09-09 03:07:44 +02:00
Lars Ingebrigtsen
564f6c171e Prune animation cache when images are no longer reachable
* lisp/image.el (image-animate-timeout): Eject cached animated
images that are no longer reachable (bug#56546).

* src/image.c (Fclear_image_cache): Allow specifying a cached
animated image to eject.
(gif_load, webp_load): Adjust what to use as the caching key --
the identity of the list itself is apparently changed by some
callers.
2022-07-14 18:59:09 +02:00
Lars Ingebrigtsen
4c542747bd Make image-cache-size also include the animation cache
* src/image.c (struct anim_cache, anim_create_cache): Store approx
cache size.
(gif_load, webp_load): Ditto.
(Fimage_cache_size): Also report animation cache size (bug#56546).
2022-07-14 18:59:09 +02:00
Stefan Kangas
35238c4fc0 Pacify -Wunused-macros in --without-all builds
* src/image.c (IMAGE_TYPE_INIT): Make conditional on image support.
2022-07-14 14:02:27 +02:00
Lars Ingebrigtsen
4738aa1e12 Make clear-image-cache clear the animation cache
* src/dispextern.h: Declare image_prune_animation_caches for use
in gc.

* src/image.c (Fclear_image_cache): Clear animation cache.
(anim_prune_animation_cache, anim_get_animation_cache): Allow
clearing in addition to pruning.
(imagemagick_prune_animation_cache)
(imagemagick_get_animation_cache): Ditto.
(image_prune_animation_caches): New function (bug#56546).
2022-07-14 11:49:47 +02:00
Lars Ingebrigtsen
513acdc9b4 Allow plist-get/plist-put/plist-member to take a comparison function
* doc/lispref/lists.texi (Plist Access): Document it.

* lisp/filesets.el (filesets-reset-fileset)
(filesets-ingroup-cache-get):
(filesets-ingroup-cache-put):
(filesets-build-menu-now): Don't use lax-plist functions.

* lisp/simple.el (lax-plist-put, lax-plist-get): Moved here from
fns.c and make obsolete.

* lisp/emacs-lisp/byte-opt.el (side-effect-free-fns): Don't mark
plist functions as side-effect-free or pure.

* lisp/emacs-lisp/comp.el (comp-known-type-specifiers): Adjust type.

* lisp/emacs-lisp/shortdoc.el (list): Don't document deprecated
functions.

* src/xdisp.c (build_desired_tool_bar_string):
(display_mode_element):
(store_mode_line_string):
(display_string):
(produce_stretch_glyph):
(note_mode_line_or_margin_highlight):
(note_mouse_highlight):
* src/w32.c (serial_configure):
* src/sysdep.c (serial_configure):
* src/sound.c (parse_sound):
* src/process.c (Fset_process_buffer):
(Fset_process_sentinel):
(Fprocess_contact):
(Fmake_process):
(Fmake_pipe_process):
(Fset_network_process_option):
(Fserial_process_configure):
(Fmake_serial_process):
(set_network_socket_coding_system):
(finish_after_tls_connection):
(connect_network_socket):
(Fmake_network_process):
(server_accept_connection):
* src/lread.c (ADDPARAM):
(hash_table_from_plist):
* src/keyboard.c (make_lispy_position):
* src/indent.c (check_display_width):
* src/image.c (postprocess_image):
* src/gnutls.c (gnutls_verify_boot):
(Fgnutls_boot):
(gnutls_symmetric):
(Fgnutls_hash_mac):
(Fgnutls_hash_digest):
* src/dired.c (filter):
* src/data.c (add_to_function_history):
* src/coding.c (Fcoding_system_put): Adjust callers from
Fplist_put (etc) to plist_put.

* src/fns.c (plist_get):
(plist_put):
(plist_member): New functions (without optional third parameter)
to be used in C code.

* src/fns.c (Fplist_get, Fplist_put, Fplist_member): Take an
optional predicate parameter (bug#47425).

* src/lisp.h: Declare new plist_put, plist_get and plist_member
functions.

* test/lisp/json-tests.el (test-json-add-to-plist): Use plist-get.

* test/src/fns-tests.el (test-cycle-lax-plist-get):
(test-cycle-lax-plist-put):
(lax-plist-get/odd-number-of-elements):
(test-plist): Remove lax-plist tests, since semantics have changed
(they no longer error out on cycles).
2022-06-27 12:22:05 +02:00
Po Lu
230891d9f3 Implement image transform smoothing on Haiku
* src/dispextern.h (struct image): New field
`use_bilinear_filtering'.
* src/haiku_draw_support.cc (BView_DrawBitmap): Accept it.
* src/haiku_support.h: Update prototypes.
* src/haikuterm.c (haiku_draw_image_glyph_string):
* src/image.c (image_set_transform): Set it.
2022-06-25 07:35:45 +00:00
Po Lu
b257a7894b Implement "flip" image transforms on Haiku
* src/dispextern.h (struct image): New field `transform',
`original_width' and `original_height'.
* src/haiku_draw_support.cc (BView_DrawMask): Rename to
`be_draw_image_mask' and fix coding style.
(rotate_bitmap_270, BBitmap_transform_bitmap, rotate_bitmap_90):
Delete functions.
(be_apply_affine_transform): New function.
(be_apply_inverse_transform): New function.

* src/haiku_support.h: Update prototypes.

* src/haikuterm.c (haiku_translate_transform): New function.
(haiku_draw_image_glyph_string): Use affine transforms to
implement images.

* src/image.c (image_set_transform): Implement using affine
transforms on Haiku too.
2022-06-25 06:21:29 +00:00
Timo Taipalus
6fbea946bf Add support for image flipping
* lisp/image.el (image-map): Keybindings for flipping functions.
(image-flip-horizontally): New function that toggles image flipping
property.
(image-flip-vertically): New function that toggles image flipping
property and rotates image 180 degrees.
* src/image.c (syms_of_image): Add property.
(image_set_transform): Modify image rotation code to also horizontally
flip the image when the property is set.
* etc/NEWS: Add description.
* doc/lispref/display.texi (Image Descriptors): Document :flip
(bug#47095).
2022-06-24 14:44:02 +02:00
Lars Ingebrigtsen
bd0b96d252 Allow using :width/:height as normal with xbm images
* doc/lispref/display.texi (XBM Images): Adjust the documentation.
* src/image.c (enum xbm_keyword_index): Add :data-width and
:data-height.
(xbm_format): Ditto.
(xbm_image_p): Allow passing in :width/:height for display.
(xbm_load): Use :data-width/:data-height.
2022-06-20 11:18:31 +02:00
Po Lu
8a7d8bb04b Implement `cross-disabled-images' on Haiku
* src/haiku_draw_support.cc (be_draw_cross_on_pixmap_1)
(be_draw_cross_on_pixmap): New functions.

* src/haiku_support.h: Update prototypes.

* src/image.c (image_pixmap_draw_cross, image_disable_image):
Implement drawing cross on Haiku.
2022-05-20 02:28:29 +00:00
Stefan Kangas
09674074b5 ; Fix typos 2022-05-15 11:15:06 +02:00
Po Lu
89c6e412dd Fix searching the bitmap file path on Haiku
* src/image.c (image_create_bitmap_from_file): [HAVE_HAIKU]:
Look for the bitmap inside `x-bitmap-file-path' as well.
2022-05-12 07:42:33 +00:00
Po Lu
d8a4782310 Fix stipple bitmap caching on Haiku
* src/image.c (image_create_bitmap_from_file): Set file name on
the bitmap rec on Haiku.
2022-05-09 02:52:16 +00:00
Po Lu
144e9f9b6a Fix file-based stipple on NS
* src/image.c (image_create_bitmap_from_file) [HAVE_NS]: Fix
loading XBM data from file.
2022-05-08 14:28:41 +08:00
Po Lu
b205d67f8c Fully implement stipples for text on Haiku
* src/haikufont.c (haikufont_draw): Use
`haiku_draw_background_rect' instead.

* src/haikuterm.c (haiku_draw_plain_background): Change
arguments to accept rect manually.
(haiku_get_bitmap): Delete function.
(haiku_get_bitmap_rec): New function.
(haiku_draw_stipple_background): Accept rect instead of box
sizes.
(haiku_draw_background_rect): New function.
(haiku_maybe_draw_background): Use that instead.
(haiku_draw_image_glyph_string): Add notice.
(haiku_draw_glyph_string): Set `stippled_p' correctly.

* src/haikuterm.h (struct haiku_bitmap_record): New fields for
keeping track of stipple state.
* src/image.c (image_create_bitmap_from_data)
(image_create_bitmap_from_file, free_bitmap_record): Free and
set them accordingly.
2022-05-08 04:42:11 +00:00
Po Lu
faa342c794 Implement bitmap loading for faces on Haiku
Stipples don't completely work yet.

* lisp/faces.el (face-valid-attribute-values): Enable `:stipple'
on Haiku.
* src/haiku_draw_support.cc (BView_DrawBitmap)
(BView_DrawBitmapWithEraseOp, BView_DrawMask): Don't push and
pop states.
(BView_DrawBitmapTiled): New function.

* src/haiku_support.cc (BBitmap_import_mono_bits): Delete
function.
* src/haiku_support.h: Update prototypes.
* src/haikuterm.c (get_string_resource): Fix coding style.
(haiku_get_bitmap, haiku_draw_stipple_background): Implement
partially.
(haiku_set_scroll_bar_default_width)
(haiku_set_scroll_bar_default_height, haiku_scroll_bar_create)
(haiku_set_horizontal_scroll_bar, haiku_set_vertical_scroll_bar)
(haiku_create_terminal, haiku_scroll_bar_remove): Fix coding
style.

* src/image.c (image_create_bitmap_from_data)
(image_create_bitmap_from_file): Implement on Haiku.
2022-05-08 03:08:42 +00:00
Lars Ingebrigtsen
95c9079da0 Make the SVG error message less verbose
* src/image.c (svg_load_image): Don't include the spec in the
error message, because this is commonly the entire SVG string, and
this will fill up the *Messages* buffer quickly.
2022-04-13 01:38:10 +02:00
Lars Ingebrigtsen
a987e66e6b Improve DISPOSE_PREVIOUS in gif_load slightly
* src/image.c (gif_load): Tweak how DISPOSE_PREVIOUS is handled.
It's still not right, but it's less glaringly wrong.
2022-04-12 16:22:38 +02:00
Lars Ingebrigtsen
9b892eeb91 Fix webp_load data lifetime issues
* src/image.c (webp_load): Take care of lifetime issues of the
image data we're iterating over for animated images.
2022-04-12 16:08:58 +02:00
Lars Ingebrigtsen
4a108df0eb Fix check for whether frames fit into gif images
* src/image.c (gif_load): Really check all frames that they fit.
2022-04-12 15:11:32 +02:00
Lars Ingebrigtsen
7b67b9a5a2 Store less data in the gif animation cache
* src/image.c (gif_load): Only start a cache if we're have an
:index entry (which means that we're trying to animate something).
2022-04-12 14:45:29 +02:00
Lars Ingebrigtsen
25a28ed4f7 Release resources in gif_load on errors
* src/image.c (webp_load): Clean up code slightly.
(gif_load): Really release resources on GIF parsing errors.
2022-04-12 13:17:14 +02:00
Lars Ingebrigtsen
3de2462da7 Animate GIF images that don't have an explicit delay setting
* src/image.c (gif_load): Use the default delay for GIF images
that don't explicitly state a delay.
2022-04-12 12:43:56 +02:00
Lars Ingebrigtsen
8e1c0054b3 Fix thinko in the anim cache
* src/image.c (gif_load): Fix resetting the cache when we're out
of sync.
(anim_create_cache): Start from zero, not 1.
2022-04-12 12:12:24 +02:00
Lars Ingebrigtsen
1c28b9ed1a Make normal image caching actually work when doing animated images
* src/image.c (filter_image_spec): New function.
(uncache_image): Use it.
(lookup_image): Ditto.
(syms_of_image): Define some keywords.
2022-04-11 18:50:39 +02:00
Mattias Engdegård
949bc336a0 ; * src/image.c: move #endif to correct place 2022-04-11 17:11:00 +02:00
Lars Ingebrigtsen
0e7185cefa Make gif_load work across architectures again
* src/image.c (gif_load): Invert the way animated pixmaps are
created: Work on the cached computed-so-far pixmap, and then copy
the entire thing to the ximg with PUT_PIXEL at the end.  This
should work across platforms, which the previous version didn't.
2022-04-11 16:52:34 +02:00
Lars Ingebrigtsen
be48dfe0b3 Revert "; * src/image.c (gif_load): Fix compilation error on MS-Windows."
This reverts commit a715f2fbe7.

This is fixed in a different way in a subsequent commit.
2022-04-11 16:45:14 +02:00
Eli Zaretskii
a715f2fbe7 ; * src/image.c (gif_load): Fix compilation error on MS-Windows. 2022-04-11 17:04:31 +03:00
Lars Ingebrigtsen
68ec0ffa21 Fix anim_cache garbage collection
* src/image.c (struct anim_cache): Move earlier.
(mark_image_cache): Mark the Lisp_Object in the anim cache.
2022-04-11 15:18:41 +02:00
Lars Ingebrigtsen
0347969bdf Fix compilation errors when HAVE_GIF and not HAVE_WEBP
* src/image.c: Enable the cache functions when HAVE_GIF, too
2022-04-11 14:54:31 +02:00
Lars Ingebrigtsen
8b7aaf3e56 Speed up GIF animations
* src/image.c (anim_prune_animation_cache): Tweak the destructor
API.
(gif_destroy): New function.
(gif_load): Use a cache to avoid quadratic CPU usage for animated
images (bug#45224).
(webp_destroy): New function.
(webp_load): Use it.
2022-04-11 14:38:27 +02:00
Lars Ingebrigtsen
5141234acf Refactor the webp cache code to allow usage by gif_load, too
* src/image.c (struct anim_cache, anim_create_cache)
(anim_prune_animation_cache, anim_get_animation_cache): Rename
from webp_cache (etc) to prepare for usage in the gif animation
implementation, too.
(webp_load): Adjust cache usage.
2022-04-11 13:35:56 +02:00
Lars Ingebrigtsen
11080420dd Improve gif_load error messages
* src/image.c (gif_load): Improve error reporting (bug#54848).
2022-04-11 12:32:55 +02:00