[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#62994: [PATCH v4 1/3] Add face definitions for more underline styles
From: |
mohkale |
Subject: |
bug#62994: [PATCH v4 1/3] Add face definitions for more underline styles |
Date: |
Sun, 11 Feb 2024 17:15:54 +0000 |
From: Mohsin Kaleem <mohkale@kisara.moe>
* src/dispextern.h (face_underline_type, syms_of_xfacse,
internal-set-lisp-face-attribute, gui_supports_face_attributes_p):
Add definitions for new underline styles of Double, Dotted and Dashed.
* lisp/cus-face.el (custom-face-attributes): Add entries for Double,
Dotted and Dashed so they can be set through `customize'.
---
lisp/cus-face.el | 5 ++++-
src/dispextern.h | 8 ++++++--
src/xfaces.c | 21 ++++++++++++++++++++-
3 files changed, 30 insertions(+), 4 deletions(-)
diff --git a/lisp/cus-face.el b/lisp/cus-face.el
index 47afa841f5e..12551e37785 100644
--- a/lisp/cus-face.el
+++ b/lisp/cus-face.el
@@ -141,7 +141,10 @@ custom-face-attributes
(const :format "" :value :style)
(choice :tag "Style"
(const :tag "Line" line)
- (const :tag "Wave" wave))
+ (const :tag "Double" double)
+ (const :tag "Wave" wave)
+ (const :tag "Dotted" dotted)
+ (const :tag "Dashed" dashed))
(const :format "" :value :position)
(choice :tag "Position"
(const :tag "At Default Position" nil)
diff --git a/src/dispextern.h b/src/dispextern.h
index 5387cb45603..470d2eea3ae 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -1690,9 +1690,13 @@ #define FONT_TOO_HIGH(ft)
\
enum face_underline_type
{
+ // Note: Order matches the order of the Smulx terminfo extension.
FACE_NO_UNDERLINE = 0,
FACE_UNDER_LINE,
- FACE_UNDER_WAVE
+ FACE_DOUBLE_UNDER_LINE,
+ FACE_UNDER_WAVE,
+ FACE_DOTTED_UNDER_LINE,
+ FACE_DASHED_UNDER_LINE,
};
/* Structure describing a realized face.
@@ -1776,7 +1780,7 @@ #define FONT_TOO_HIGH(ft)
\
ENUM_BF (face_box_type) box : 2;
/* Style of underlining. */
- ENUM_BF (face_underline_type) underline : 2;
+ ENUM_BF (face_underline_type) underline : 3;
/* If `box' above specifies a 3D type, true means use box_color for
drawing shadows. */
diff --git a/src/xfaces.c b/src/xfaces.c
index a558e7328c0..a76a9365b8a 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -3311,7 +3311,11 @@ DEFUN ("internal-set-lisp-face-attribute",
Finternal_set_lisp_face_attribute,
}
else if (EQ (key, QCstyle)
- && !(EQ (val, Qline) || EQ (val, Qwave)))
+ && !(EQ (val, Qline) ||
+ EQ (val, Qdouble) ||
+ EQ (val, Qwave) ||
+ EQ (val, Qdotted) ||
+ EQ (val, Qdashed)))
{
valid_p = false;
break;
@@ -5266,6 +5270,7 @@ gui_supports_face_attributes_p (struct frame *f,
Lisp_Object attrs[LFACE_VECTOR_SIZE],
struct face *def_face)
{
+ Lisp_Object val;
Lisp_Object *def_attrs = def_face->lface;
Lisp_Object lattrs[LFACE_VECTOR_SIZE];
@@ -5360,6 +5365,17 @@ gui_supports_face_attributes_p (struct frame *f,
return false;
}
+ /* Check supported underline styles. */
+ val = attrs[LFACE_UNDERLINE_INDEX];
+ if (!UNSPECIFIEDP (val)) {
+ if (EQ (CAR_SAFE (val), QCstyle)) {
+ if (!(EQ (CAR_SAFE (CDR_SAFE (val)), Qline) ||
+ EQ (CAR_SAFE (CDR_SAFE (val)), Qwave))) {
+ return false; /* Unsupported underline style */
+ }
+ }
+ }
+
/* Everything checks out, this face is supported. */
return true;
}
@@ -7229,6 +7245,9 @@ syms_of_xfaces (void)
DEFSYM (QCposition, ":position");
DEFSYM (Qline, "line");
DEFSYM (Qwave, "wave");
+ DEFSYM (Qdouble, "double");
+ DEFSYM (Qdotted, "dotted");
+ DEFSYM (Qdashed, "dashed");
DEFSYM (Qreleased_button, "released-button");
DEFSYM (Qpressed_button, "pressed-button");
DEFSYM (Qflat_button, "flat-button");
--
2.43.0