[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 96806a2 1/4: Merge from origin/emacs-28
From: |
Eli Zaretskii |
Subject: |
master 96806a2 1/4: Merge from origin/emacs-28 |
Date: |
Sun, 14 Nov 2021 08:05:54 -0500 (EST) |
branch: master
commit 96806a22fbb54573053fdb796ebde4b6284b98ae
Merge: c3f53d2 a56dd60
Author: Eli Zaretskii <eliz@gnu.org>
Commit: Eli Zaretskii <eliz@gnu.org>
Merge from origin/emacs-28
a56dd60 Improve style and comments in font-related sources
---
src/font.c | 25 ++++++++++++++++++++++---
src/font.h | 7 ++++---
src/w32font.c | 8 ++------
3 files changed, 28 insertions(+), 12 deletions(-)
diff --git a/src/font.c b/src/font.c
index 420a4f8..b503123 100644
--- a/src/font.c
+++ b/src/font.c
@@ -3183,8 +3183,9 @@ font_clear_prop (Lisp_Object *attrs, enum
font_property_index prop)
attrs[LFACE_FONT_INDEX] = font;
}
-/* Select a font from ENTITIES (list of font-entity vectors) that
- supports C and is the best match for ATTRS and PIXEL_SIZE. */
+/* Select a font from ENTITIES (list of one or more font-entity
+ vectors) that supports the character C (if non-negative) and is the
+ best match for ATTRS and PIXEL_SIZE. */
static Lisp_Object
font_select_entity (struct frame *f, Lisp_Object entities,
@@ -3194,6 +3195,7 @@ font_select_entity (struct frame *f, Lisp_Object entities,
Lisp_Object prefer;
int i;
+ /* If we have a single candidate, return it if it supports C. */
if (NILP (XCDR (entities))
&& ASIZE (XCAR (entities)) == 1)
{
@@ -3203,7 +3205,10 @@ font_select_entity (struct frame *f, Lisp_Object
entities,
return Qnil;
}
- /* Sort fonts by properties specified in ATTRS. */
+ /* If we have several candidates, find the best match by sorting
+ them by properties specified in ATTRS. Style attributes (weight,
+ slant, width, and size) are taken from the font spec in ATTRS (if
+ that is non-nil), or from ATTRS, or left as nil. */
prefer = scratch_font_prefer;
for (i = FONT_WEIGHT_INDEX; i <= FONT_SIZE_INDEX; i++)
@@ -3240,6 +3245,8 @@ font_find_for_lface (struct frame *f, Lisp_Object *attrs,
Lisp_Object spec, int
int i, j, k, l;
USE_SAFE_ALLOCA;
+ /* Registry specification alternatives: from the most specific to
+ the least specific and finally an unspecified one. */
registry[0] = AREF (spec, FONT_REGISTRY_INDEX);
if (NILP (registry[0]))
{
@@ -3276,6 +3283,9 @@ font_find_for_lface (struct frame *f, Lisp_Object *attrs,
Lisp_Object spec, int
pixel_size = 1;
}
ASET (work, FONT_SIZE_INDEX, Qnil);
+
+ /* Foundry specification alternatives: from the most specific to the
+ least specific and finally an unspecified one. */
foundry[0] = AREF (work, FONT_FOUNDRY_INDEX);
if (! NILP (foundry[0]))
foundry[1] = zero_vector;
@@ -3289,6 +3299,8 @@ font_find_for_lface (struct frame *f, Lisp_Object *attrs,
Lisp_Object spec, int
else
foundry[0] = Qnil, foundry[1] = zero_vector;
+ /* Additional style specification alternatives: from the most
+ specific to the least specific and finally an unspecified one. */
adstyle[0] = AREF (work, FONT_ADSTYLE_INDEX);
if (! NILP (adstyle[0]))
adstyle[1] = zero_vector;
@@ -3309,6 +3321,8 @@ font_find_for_lface (struct frame *f, Lisp_Object *attrs,
Lisp_Object spec, int
adstyle[0] = Qnil, adstyle[1] = zero_vector;
+ /* Family specification alternatives: from the most specific to
+ the least specific and finally an unspecified one. */
val = AREF (work, FONT_FAMILY_INDEX);
if (NILP (val) && STRINGP (attrs[LFACE_FAMILY_INDEX]))
{
@@ -3348,6 +3362,8 @@ font_find_for_lface (struct frame *f, Lisp_Object *attrs,
Lisp_Object spec, int
}
}
+ /* Now look up suitable fonts, from the most specific spec to the
+ least specific spec. Accept the first one that matches. */
for (i = 0; SYMBOLP (family[i]); i++)
{
ASET (work, FONT_FAMILY_INDEX, family[i]);
@@ -3360,9 +3376,12 @@ font_find_for_lface (struct frame *f, Lisp_Object
*attrs, Lisp_Object spec, int
for (l = 0; SYMBOLP (adstyle[l]); l++)
{
ASET (work, FONT_ADSTYLE_INDEX, adstyle[l]);
+ /* Produce the list of candidates for the spec in WORK. */
entities = font_list_entities (f, work);
if (! NILP (entities))
{
+ /* If there are several candidates, select the
+ best match for PIXEL_SIZE and attributes in ATTRS. */
val = font_select_entity (f, entities,
attrs, pixel_size, c);
if (! NILP (val))
diff --git a/src/font.h b/src/font.h
index 1da72cc..6694164 100644
--- a/src/font.h
+++ b/src/font.h
@@ -69,9 +69,10 @@ INLINE_HEADER_BEGIN
enum font_property_index
{
- /* FONT-TYPE is a symbol indicating a font backend; currently `x'
- and `xft' are available on X, `uniscribe' and `gdi' on
- Windows, and `ns' under Cocoa / GNUstep. */
+ /* FONT-TYPE is a symbol indicating a font backend; currently `x',
+ `xft', `xfthb', `ftrc', and `ftcrhb' are available on X;
+ `harfbuzz', `uniscribe', and `gdi' on Windows, and `ns' under
+ Cocoa / GNUstep. */
FONT_TYPE_INDEX,
/* FONT-FOUNDRY is a foundry name (symbol). */
diff --git a/src/w32font.c b/src/w32font.c
index 752acdc..2d09f45 100644
--- a/src/w32font.c
+++ b/src/w32font.c
@@ -2022,13 +2022,9 @@ fill_in_logfont (struct frame *f, LOGFONT *logfont,
Lisp_Object font_spec)
tmp = AREF (font_spec, FONT_DPI_INDEX);
if (FIXNUMP (tmp))
- {
- dpi = XFIXNUM (tmp);
- }
+ dpi = XFIXNUM (tmp);
else if (FLOATP (tmp))
- {
- dpi = (int) (XFLOAT_DATA (tmp) + 0.5);
- }
+ dpi = (int) (XFLOAT_DATA (tmp) + 0.5);
/* Height */
tmp = AREF (font_spec, FONT_SIZE_INDEX);