1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-02-04 14:40:54 -08:00
emacs/doc/lispref
Daniel Colascione c29071587c Add double-buffering support to reduce flicker
* src/dispextern.h (struct glyph_string): Remove window member
(block_buffer_flips, unblock_buffer_flips)
(buffer_flipping_blocked_p): Declare.

* src/xterm.h (struct x_display_info): New member supports_xdbe.
(struct x_output): New members draw_desc and need_buffer_flip.
(FRAME_X_DRAWABLE, FRAME_X_RAW_DRAWABLE)
(FRAME_X_DOUBLE_BUFFERED_P)
(FRAME_X_NEED_BUFFER_FLIP): New macros.
(set_up_x_back_buffer, tear_down_x_back_buffer)
(initial_set_up_x_back_buffer): Declare.

* src/xterm.c: Include Xdbe.h.
(x_begin_cr_clip, x_fill_rectangle, x_draw_rectangle)
(x_draw_vertical_window_border, x_update_end)
(x_setup_relief_color, x_draw_relief_rect)
(x_draw_fringe_bitmap, x_shift_glyphs_for_insert)
(x_scroll_run, x_draw_hollow_cursor, x_draw_bar_cursor): Use
FRAME_X_DRAWABLE instead of FRAME_X_WINDOW; rename local
variables appropriately; substitute calls to XClearArea with
x_clear_area, which DTRT for double buffering.
(x_clear_window, x_clear_area): In double-buffering mode, use
rect-drawing X functions instead of XClearWindow and
XClearArea, which always operate on the front buffer.
(show_back_buffer): New function.
(XTframe_up_to_date): Call show_back_buffer when done.
(x_clear_frame, x_clear_frame_area): Remove obsolete calls to
gtk_widget_queue_draw to refresh scroll bars; scroll bars are
now independent X windows.
(handle_one_xevent): Call font_drop_xrender_surfaces when
XftDraw might need regenerating; perform buffer flip when
responding to Expose events; issue front-buffer clearing
commands as stopgap while we wait for redisplay.
Call flush_dirty_back_buffers.
(x_make_frame_visible): Un-bitrot comment; move XSETFRAME
earlier in function.
(x_free_frame_resources): Call tear_down_x_back_buffer when
destroying frame.
(x_term_init): Attempt to initialize double buffer extension.
(x_flip_and_flush): New function.
(x_redisplay_interface): Point to x_flip_and_flush instead of
x_flip directly.
(flush_dirty_back_buffers): New function.
(x_create_terminal): Register buffer_flipping_unblocked_hook.

* src/xftfont.c (xftfont_drop_xrender_surfaces): Use
FRAME_X_DRAWABLE instead of FRAME_X_WINDOW.
(xftfont_draw): Call x_mark_frame_dirty.
(xftfont_drop_xrender_surfaces): New function.
(syms_of_xftfont): Register it.

* src/xfont.c (xfont_draw): Use FRAME_X_DRAWABLE instead of
FRAME_X_WINDOW.

* src/xfns.c: Include Xdbe.h.
(x_set_inhibit_double_buffering, set_up_x_back_buffer)
(Fx_double_buffered_p): New functions.
(x_window): Call initial_set_up_x_back_buffer.
(x_make_gc): Use FRAME_X_DRAWABLE instead of FRAME_X_WINDOW.
(Fx_create_frame): Configure `inhibit-double-buffering'
frame parameter.
(x_create_tip_frame): Call initial_set_up_x_back_buffer.
(x_frame_parm_handlers): Register
x_set_inhibit_double_buffering.
(syms_of_xfns): Register Sx_double_buffered_p.
(x_mark_frame_dirty): Define.

* src/xfaces.c (x_create_gc): Use FRAME_X_DRAWABLE instead of
FRAME_X_WINDOW.

* src/xdisp.c (remember_mouse_glyph, init_glyph_string): Use
FRAME_X_DRAWABLE instead of FRAME_X_WINDOW.
(redisplay_internal): Restart redisplay if a frame is garbaged
during updating; explain why. Block buffer flips
during redisplay.
(redisplay_preserve_echo_area): Block buffer flip during call
to redisplay_internal.
(buffer_flip_blocked_depth): New variable.
(block_buffer_flips, unblock_buffer_flips)
(buffer_flipping_blocked_p): New functions.
(init_glyph_string): Stop setting window member of struct
glyph_string.

* src/w32fns.c (w32_frame_parm_handlers): Add placeholder for
x_set_inhibit_double_buffering.

* src/termhooks.h (struct terminal): Add
buffer_flipping_unblocked_hook.

* src/nsfns.m (ns_frame_parm_handlers): Add placeholder for
x_set_inhibit_double_buffering.

* src/image.c (x_create_bitmap_from_data)
(x_create_bitmap_from_file, x_create_x_image_and_pixmap)
(Create_Pixmap_From_Bitmap_Data)
(x_create_bitmap_from_xpm_data, xpm_load, gs_load): Use
FRAME_X_DRAWABLE instead of FRAME_X_WINDOW; rename local
variables appropriately.

* src/gtkutil.c: Include Xdbe.h.
(xg_get_widget_from_map): Forward declare.
(xg_clear_under_internal_border): Remove obsolete calls to
refresh scroll bars.
(xg_create_frame_widgets): Call initial_set_up_x_back_buffer.
(xg_free_frame_widgets): Call tear_down_x_back_buffer; reset
FRAME_X_DRAWABLE as well as FRAME_X_WINDOW and for the
same reason.
(xg_set_background_color): Set scroll bar background colors.
(xg_finish_scroll_bar_creation): New function with common
logic of xg_create_scroll_bar, xg_create_horizontal_scroll_bar. Force
scroll bars to be real X11 windows.
(xg_create_scroll_bar, xg_create_horizontal_scroll_bar): Call
xg_finish_scroll_bar_creation.
(xg_update_scrollbar_pos, xg_update_horizontal_scrollbar_pos):
Remove obsolete calls to refresh scroll bars; fix comments.

* src/ftxfont.c (ftxfont_get_gcs, ftxfont_draw_bitmap,
(ftxfont_draw_background): Use FRAME_X_DRAWABLE instead of
FRAME_X_WINDOW.

* src/frame.c (frame_parms): Add table entry for new
`inhibit-double-buffering' frame parameter
(syms_of_frame): Register Qinhibit_double_buffering.

* src/font.h (struct font_driver): Add new `flush_frame_caches' hook.
(font_drop_xrender_surfaces): Declare.

* src/font.c (font_drop_xrender_surfaces): New function.

* src/Makefile.in (XDBE_LIBS, XDBE_CFLAGS): Substitute.

* etc/NEWS: Mention use of double buffering

* doc/lispref/frames.texi (Management Parameters): Document
`inhibit-double-buffering' frame parameters.
(Visibility of Frames): Document `x-double-buffered-p'.

* configure.ac: Check for the X double buffer extension
2016-10-28 19:21:39 -07:00
..
abbrevs.texi Adjudicate review comments in abbrevs.texi 2016-03-19 13:05:55 +02:00
anti.texi Update Antinews in ELisp manual 2016-09-14 17:20:24 +03:00
back.texi Update copyright year to 2016 2016-01-01 01:34:24 -08:00
backups.texi Document file synchronization issues 2016-09-10 19:14:44 -07:00
book-spine.texi Fix single-quoting style in PDF manuals 2015-05-01 12:06:38 -07:00
buffers.texi Check actual contents before promting about changed file 2016-09-02 11:44:13 -04:00
ChangeLog.1 Update copyright year to 2016 2016-01-01 01:34:24 -08:00
commands.texi Merge from origin/emacs-25 2016-06-19 00:53:51 +02:00
compile.texi Doc fixes for grammar and typos (bug#23746) 2016-06-13 18:08:22 +02:00
control.texi ; Minor improvement in documentation of generators 2016-10-08 16:44:47 +03:00
customize.texi (Common Keywords): Correct what missing :group means 2016-05-03 19:06:36 +02:00
debugging.texi Merge from origin/emacs-25 2016-10-23 02:50:48 -07:00
display.texi Merge from origin/emacs-25 2016-09-26 13:37:36 -07:00
doclicense.texi
edebug.texi Add an option in Edebug to prevent pauses after h', 'f', and o'. 2016-05-07 06:42:29 +00:00
elisp.texi Document atomic windows in Elisp manual (Bug#18170) 2016-10-17 08:57:24 +02:00
errors.texi New error file-missing 2016-10-21 13:06:03 -07:00
eval.texi Update documentation of 'indirect-function' 2016-01-10 20:22:01 +02:00
files.texi New error file-missing 2016-10-21 13:06:03 -07:00
frames.texi Add double-buffering support to reduce flicker 2016-10-28 19:21:39 -07:00
functions.texi Merge from origin/emacs-25 2016-10-10 07:39:05 -07:00
gpl.texi
hash.texi New primitives sxhash-eq, sxhash-eql 2016-04-08 15:33:59 -07:00
help.texi 'text-quoting-style' now affects only ` and ' 2016-05-10 07:41:40 -07:00
hooks.texi Document 'pre-redisplay-functions' 2016-01-13 20:29:36 +02:00
index.texi
internals.texi Deterministic build improvements 2016-03-02 10:24:11 -08:00
intro.texi Deterministic build improvements 2016-03-02 10:24:11 -08:00
keymaps.texi Merge from origin/emacs-25 2016-08-22 14:38:49 -07:00
lay-flat.texi Update copyright year to 2016 2016-01-01 01:34:24 -08:00
lists.texi Fix documentation of 'alist-get' 2016-10-19 21:10:31 +03:00
loading.texi New error file-missing 2016-10-21 13:06:03 -07:00
macros.texi Mention `lisp-indent-function' in the lispref manual 2016-05-01 19:27:07 +02:00
Makefile.in Update copyright year to 2016 2016-01-01 01:34:24 -08:00
maps.texi Update copyright year to 2016 2016-01-01 01:34:24 -08:00
markers.texi Doc fixes for grammar and typos (bug#23746) 2016-06-13 18:08:22 +02:00
minibuf.texi Merge from origin/emacs-25 2016-06-19 00:54:28 +02:00
modes.texi ; Revert "Replace eldoc-documentation-function with a hook" 2016-07-18 02:22:24 +03:00
nonascii.texi New function ‘char-from-name’ 2016-04-25 10:42:48 -07:00
numbers.texi Merge doc fixes for 'random' lost in previous merge 2016-03-21 17:05:55 -07:00
objects.texi Improve character name escapes 2016-04-21 19:29:41 -07:00
os.texi Merge from origin/emacs-25 2016-09-26 13:37:36 -07:00
package.texi Update copyright year to 2016 2016-01-01 01:34:24 -08:00
positions.texi Merge from origin/emacs-25 2016-08-22 14:38:49 -07:00
processes.texi Make querying to kill processes customizable 2016-10-01 14:25:27 +02:00
README Update copyright year to 2016 2016-01-01 01:34:24 -08:00
searching.texi Merge from origin/emacs-25 2016-10-10 07:35:31 -07:00
sequences.texi Minor fix in the documentation of seq-random-elt 2016-10-25 21:28:36 +02:00
spellfile
streams.texi Expunge "allow" + infinitive without direct object from source and doc. 2016-01-24 20:30:39 +00:00
strings.texi Merge from origin/emacs-25 2016-09-26 13:32:28 -07:00
symbols.texi Document 'function-put' 2016-01-16 17:13:16 +02:00
syntax.texi Amend parse-partial-sexp correctly to handle two character comment delimiters 2016-03-20 13:19:48 +00:00
text.texi Merge from origin/emacs-25 2016-09-26 13:39:17 -07:00
tips.texi 'text-quoting-style' now affects only ` and ' 2016-05-10 07:41:40 -07:00
two-volume-cross-refs.txt Update copyright year to 2016 2016-01-01 01:34:24 -08:00
two-volume.make Update copyright year to 2016 2016-01-01 01:34:24 -08:00
variables.texi Merge from origin/emacs-25 2016-08-05 14:06:59 -07:00
windows.texi Document atomic windows in Elisp manual (Bug#18170) 2016-10-17 08:57:24 +02:00

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Copyright (C) 2001-2016 Free Software Foundation, Inc.  -*- outline -*-
See the end of the file for license conditions.


README for the Emacs Lisp Reference Manual.

* This directory contains the texinfo source files for the Emacs Lisp
Reference Manual.

* Report bugs in the Lisp Manual (or in Emacs) using M-x report-emacs-bug.
To ask questions, use the help-gnu-emacs mailing list.

* The Emacs Lisp Reference Manual is quite large.  It totals around
1100 pages in smallbook format; the info files total around 3.0 megabytes.

* You can format this manual for Info, for printing hardcopy using TeX,
or for HTML.

* You can buy nicely printed copies from the Free Software Foundation.
Buying a manual from the Free Software Foundation helps support our GNU
development work.  See <http://shop.fsf.org/>.
(At time of writing, this manual is out of print.)

* The master file for formatting this manual for Tex is called 'elisp.texi'.
It contains @include commands to include all the chapters that make up
the manual.

* This distribution contains a Makefile that you can use with GNU Make.

** To make an Info file, you need to install Texinfo, then run 'make info'.

** Use 'make elisp.pdf' or 'make elisp.html' to create PDF or HTML versions.


This file is part of GNU Emacs.

GNU Emacs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.