ftpd-overlay/x11-terms/rxvt-unicode/files/rxvt-unicode-9.30-enable-wide-glyphs.patch

272 lines
9.1 KiB
Diff
Raw Normal View History

2022-03-31 13:47:29 +02:00
diff -ur rxvt-unicode-9.30/config.h.in rxvt-unicode-9.30-wide-glyphs/config.h.in
--- rxvt-unicode-9.30/config.h.in 2021-07-23 22:57:20.000000000 +0200
+++ rxvt-unicode-9.30-wide-glyphs/config.h.in 2022-01-16 16:10:47.000676909 +0100
@@ -18,6 +18,9 @@
/* Define if you want your background to use the parent window background */
#undef ENABLE_TRANSPARENCY
+/* Define if you want to display wide glyphs */
+#undef ENABLE_WIDE_GLYPHS
+
/* Define if you want european extended codesets */
#undef ENCODING_EU
diff -ur rxvt-unicode-9.30/configure rxvt-unicode-9.30-wide-glyphs/configure
--- rxvt-unicode-9.30/configure 2021-11-27 21:07:00.000000000 +0100
+++ rxvt-unicode-9.30-wide-glyphs/configure 2022-01-16 16:14:15.100672381 +0100
@@ -744,6 +744,7 @@
enable_fading
enable_rxvt_scroll
enable_next_scroll
+enable_wide_glyphs
enable_xterm_scroll
enable_perl
with_codesets
@@ -1412,6 +1413,7 @@
--enable-combining enable composition of base and combining characters
--enable-xft enable xft support on systems that have it
--enable-font-styles enable bold and italic support
+ --enable-wide-glyphs enable displaying of wide glyphs
--enable-pixbuf enable integration with gdk-pixbuf for background images
--enable-startup-notification enable freedesktop startup notification support
--enable-transparency enable transparent backgrounds
@@ -5023,6 +5025,7 @@
support_8bitctrls=no
support_iso14755=no
support_styles=no
+ support_wide_glyphs=no
support_perl=no
codesets=
fi
@@ -5048,6 +5051,7 @@
#support_8bitctrls=yes
support_iso14755=yes
support_styles=yes
+ support_wide_glyphs=yes
support_perl=yes
codesets=all
fi
@@ -5165,6 +5169,14 @@
fi
+# Check whether --enable-wide-glyphs was given.
+if test "${enable_wide_glyphs+set}" = set; then :
+ enableval=$enable_wide_glyphs; if test x$enableval = xyes -o x$enableval = xno; then
+ support_wide_glyphs=$enableval
+ fi
+fi
+
+
# Check whether --enable-pixbuf was given.
if test ${enable_pixbuf+y}
then :
@@ -7675,6 +7687,11 @@
printf "%s\n" "#define ISO_14755 1" >>confdefs.h
fi
+if test x$support_wide_glyphs = xyes; then
+
+printf "%s\n" "#define ENABLE_WIDE_GLYPHS 1" >>confdefs.h
+
+fi
if test x$support_8bitctrls = xyes; then
printf "%s\n" "#define EIGHT_BIT_CONTROLS 1" >>confdefs.h
diff -ur rxvt-unicode-9.30/configure.ac rxvt-unicode-9.30-wide-glyphs/configure.ac
--- rxvt-unicode-9.30/configure.ac 2021-11-27 21:07:00.000000000 +0100
+++ rxvt-unicode-9.30-wide-glyphs/configure.ac 2022-01-16 16:15:41.224670506 +0100
@@ -123,6 +123,7 @@
support_8bitctrls=no
support_iso14755=no
support_styles=no
+ support_wide_glyphs=no
support_perl=no
codesets=
fi
@@ -148,6 +149,7 @@
#support_8bitctrls=yes
support_iso14755=yes
support_styles=yes
+ support_wide_glyphs=yes
support_perl=yes
codesets=all
fi
@@ -221,6 +223,12 @@
support_styles=$enableval
fi])
+AC_ARG_ENABLE(wide-glyphs,
+ [ --enable-wide-glyphs enable displaying of wide glyphs],
+ [if test x$enableval = xyes -o x$enableval = xno; then
+ support_wide_glyphs=$enableval
+ fi])
+
AC_ARG_ENABLE(pixbuf,
[ --enable-pixbuf enable integration with gdk-pixbuf for background images],
[if test x$enableval = xyes -o x$enableval = xno; then
@@ -643,6 +651,9 @@
if test x$support_styles = xyes; then
AC_DEFINE(ENABLE_STYLES, 1, Define if you want bold and italic support)
fi
+if test x$support_wide_glyphs = xyes; then
+ AC_DEFINE(ENABLE_WIDE_GLYPHS, 1, Define if you want to display wide glyphs)
+fi
if test x$support_iso14755 = xyes; then
AC_DEFINE(ISO_14755, 1, Define if you want ISO 14755 extended support)
fi
diff -ur rxvt-unicode-9.30/src/command.C rxvt-unicode-9.30-wide-glyphs/src/command.C
--- rxvt-unicode-9.30/src/command.C 2021-11-22 00:34:29.000000000 +0100
+++ rxvt-unicode-9.30-wide-glyphs/src/command.C 2022-01-16 16:16:34.580669345 +0100
@@ -237,7 +237,9 @@
# endif
scr_overlay_set (11, y + 1, ch, r);
+#if !ENABLE_WIDE_GLYPHS
if (WCWIDTH (ch) >= 2)
+#endif
scr_overlay_set (12, y + 1, NOCHAR, r);
}
diff -ur rxvt-unicode-9.30/src/rxvtfont.C rxvt-unicode-9.30-wide-glyphs/src/rxvtfont.C
--- rxvt-unicode-9.30/src/rxvtfont.C 2021-11-21 20:33:25.000000000 +0100
+++ rxvt-unicode-9.30-wide-glyphs/src/rxvtfont.C 2022-01-16 16:27:54.948654540 +0100
@@ -471,6 +471,7 @@
else
switch (t)
{
+ case ' ':
case '\t':
case ZERO_WIDTH_CHAR:
case NOCHAR:
@@ -1038,8 +1039,10 @@
careful = xcs->lbearing < 0 || xcs->rbearing > prop->width * wcw;
+#if !ENABLE_WIDE_GLYPHS
if (careful && !OVERLAP_OK (w, wcw, prop))
return false;
+#endif
return true;
}
@@ -1410,12 +1413,14 @@
careful = g.x > 0 || w > cwidth;
+#if !ENABLE_WIDE_GLYPHS
if (careful && !OVERLAP_OK (w, wcw, prop))
return false;
// this weeds out _totally_ broken fonts, or glyphs
if (!OVERLAP_OK (g.xOff, wcw, prop))
return false;
+#endif
return true;
}
@@ -1502,6 +1507,11 @@
// in which case we use the average between the two.
ep->x += xOff ? cwidth - xOff >> 1 : 0;
+#if ENABLE_WIDE_GLYPHS
+ /* Left-align to bounding box, do not overlap to the left. */
+ max_it(ep->x, x_);
+#endif
+
// xft/freetype represent combining characters as characters with zero
// width rendered over the previous character with some fonts, while
// in other fonts, they are considered normal characters, while yet
diff -ur rxvt-unicode-9.30/src/screen.C rxvt-unicode-9.30-wide-glyphs/src/screen.C
--- rxvt-unicode-9.30/src/screen.C 2021-07-03 05:55:47.000000000 +0200
+++ rxvt-unicode-9.30-wide-glyphs/src/screen.C 2022-01-16 16:31:19.644650086 +0100
@@ -936,7 +936,60 @@
# endif
#endif
- rend_t rend = SET_FONT (rstyle, FONTSET (rstyle)->find_font (c));
+ rend_t rend;
+#if ENABLE_WIDE_GLYPHS
+ // Re-use previous font for space characters.
+ // This allows for better display of wider chars with regard to
+ // backtracking (which uses RS_SAME).
+ if (c != ' ')
+ {
+#endif
+ rend = SET_FONT (rstyle, FONTSET (rstyle)->find_font (c));
+#if ENABLE_WIDE_GLYPHS
+ }
+ else
+ {
+ // Code taken from ENABLE_COMBINING - might get refactored.
+ line_t *linep;
+ text_t *tp;
+ rend_t *rp = NULL;
+
+ if (screen.cur.col > 0)
+ {
+ linep = line;
+ tp = line->t + screen.cur.col - 1;
+ rp = line->r + screen.cur.col - 1;
+ }
+ else if (screen.cur.row > 0
+ && ROW(screen.cur.row - 1).is_longer ())
+ {
+ linep = &ROW(screen.cur.row - 1);
+ tp = linep->t + ncol - 1;
+ rp = linep->r + ncol - 1;
+ }
+
+ if (rp)
+ {
+ // XXX: this font does not show up in iso-14755 mode for the space!?
+ if (*tp == NOCHAR)
+ {
+ while (*tp == NOCHAR && tp > linep->t)
+ tp--, rp--;
+
+ // first try to find a precomposed character
+ unicode_t n = rxvt_compose (*tp, c);
+ if (n == NOCHAR)
+ n = rxvt_composite.compose (*tp, c);
+
+ *tp = n;
+ *rp = SET_FONT (*rp, FONTSET (*rp)->find_font (*tp));
+ }
+ rend = SET_FONT (rstyle, GET_FONT(*rp));
+ }
+ else
+ rend = SET_FONT (rstyle, FONTSET (rstyle)->find_font (c));
+ }
+#endif
// if the character doesn't fit into the remaining columns...
if (ecb_unlikely (screen.cur.col > ncol - width && ncol >= width))
@@ -2395,7 +2448,12 @@
text--, count++, xpixel -= fwidth;
// force redraw after "careful" characters to avoid pixel droppings
- for (int i = 0; srp[col + i] & RS_Careful && col + i < ncol - 1; i++)
+ for (int i = 0; srp[col + i] & RS_Careful && col + i < ncol - 1
+#if ENABLE_WIDE_GLYPHS
+ // But not for spaces.
+ && stp[col + i + 1] != ' '
+#endif
+ ; i++)
drp[col + i + 1] = srp[col + i + 1] ^ RS_redraw;
// force redraw before "careful" characters to avoid pixel droppings
diff -ur rxvt-unicode-9.30/src/xdefaults.C rxvt-unicode-9.30-wide-glyphs/src/xdefaults.C
--- rxvt-unicode-9.30/src/xdefaults.C 2021-07-03 18:36:13.000000000 +0200
+++ rxvt-unicode-9.30-wide-glyphs/src/xdefaults.C 2022-01-16 16:31:59.204649225 +0100
@@ -298,6 +298,9 @@
#if ENABLE_STYLES
"styles,"
#endif
+#if ENABLE_WIDE_GLYPHS
+ "wide-glyphs,"
+#endif
#if ENABLE_COMBINING
"combining,"
#endif