aboutsummarylogtreecommitdiffstats
path: root/enable-wide-glyphs.patch
diff options
context:
space:
mode:
authorDaniel Hahler2016-09-18 16:08:51 +0200
committerDaniel Hahler2017-05-06 07:50:31 +0200
commit72ff42787b37bd786a4290b8adfada8e66c8e2c7 (patch)
tree955edec655dd3ad94889148d1faabc1427b344b8 /enable-wide-glyphs.patch
parent61bcb3a1583ae8092f9dcc8931dcb64073b3ddaa (diff)
downloadaur-72ff42787b37bd786a4290b8adfada8e66c8e2c7.tar.gz
New package: rxvt-unicode-cvs-patched-wideglyphs
Based on rxvt-unicode-patches and rxvt-unicode-cvs, adding my enable-wide-glyphs.patch.
Diffstat (limited to 'enable-wide-glyphs.patch')
-rw-r--r--enable-wide-glyphs.patch286
1 files changed, 286 insertions, 0 deletions
diff --git a/enable-wide-glyphs.patch b/enable-wide-glyphs.patch
new file mode 100644
index 000000000000..a52968ee5dd4
--- /dev/null
+++ b/enable-wide-glyphs.patch
@@ -0,0 +1,286 @@
+diff --git a/config.h.in b/config.h.in
+index 914d606..2e2e03f 100644
+--- a/config.h.in
++++ b/config.h.in
+@@ -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 --git a/configure b/configure
+index 3e3f78b..b8b1591 100755
+--- a/configure
++++ b/configure
+@@ -717,6 +717,7 @@ enable_unicode3
+ enable_combining
+ enable_xft
+ enable_font_styles
++enable_wide_glyphs
+ enable_pixbuf
+ enable_startup_notification
+ enable_transparency
+@@ -1390,6 +1391,7 @@ Optional Features:
+ --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
+@@ -4780,6 +4782,7 @@ if test "${enable_everything+set}" = set; then :
+ support_8bitctrls=no
+ support_iso14755=no
+ support_styles=no
++ support_wide_glyphs=no
+ support_perl=no
+ codesets=
+ fi
+@@ -4808,6 +4811,7 @@ if test "${enable_everything+set}" = set; then :
+ #support_8bitctrls=yes
+ support_iso14755=yes
+ support_styles=yes
++ support_wide_glyphs=yes
+ support_perl=yes
+ codesets=all
+ fi
+@@ -4909,6 +4913,14 @@ if test "${enable_font_styles+set}" = set; then :
+ 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+set}" = set; then :
+ enableval=$enable_pixbuf; if test x$enableval = xyes -o x$enableval = xno; then
+@@ -7734,6 +7746,11 @@ if test x$support_styles = xyes; then
+ $as_echo "#define ENABLE_STYLES 1" >>confdefs.h
+
+ fi
++if test x$support_wide_glyphs = xyes; then
++
++$as_echo "#define ENABLE_WIDE_GLYPHS 1" >>confdefs.h
++
++fi
+ if test x$support_iso14755 = xyes; then
+
+ $as_echo "#define ISO_14755 1" >>confdefs.h
+diff --git a/configure.ac b/configure.ac
+index 0da3b59..52ab8e4 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -132,6 +132,7 @@ AC_ARG_ENABLE(everything,
+ support_8bitctrls=no
+ support_iso14755=no
+ support_styles=no
++ support_wide_glyphs=no
+ support_perl=no
+ codesets=
+ fi
+@@ -160,6 +161,7 @@ AC_ARG_ENABLE(everything,
+ #support_8bitctrls=yes
+ support_iso14755=yes
+ support_styles=yes
++ support_wide_glyphs=yes
+ support_perl=yes
+ codesets=all
+ fi
+@@ -225,6 +227,12 @@ AC_ARG_ENABLE(font-styles,
+ 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
+@@ -648,6 +656,9 @@ fi
+ 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 --git a/src/command.C b/src/command.C
+index 19e4fcc..75853d7 100644
+--- a/src/command.C
++++ b/src/command.C
+@@ -237,7 +237,9 @@ rxvt_term::iso14755_51 (unicode_t ch, rend_t r, int x, int y, int y2)
+ # 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 --git a/src/rxvtfont.C b/src/rxvtfont.C
+index c56921c..9d75541 100644
+--- a/src/rxvtfont.C
++++ b/src/rxvtfont.C
+@@ -471,6 +471,7 @@ rxvt_font_default::draw (rxvt_drawable &d, int x, int y,
+ else
+ switch (t)
+ {
++ case ' ':
+ case '\t':
+ case ZERO_WIDTH_CHAR:
+ case NOCHAR:
+@@ -1026,8 +1027,10 @@ rxvt_font_x11::has_char (unicode_t unicode, const rxvt_fontprop *prop, bool &car
+
+ 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;
+ }
+@@ -1345,12 +1348,14 @@ rxvt_font_xft::has_char (unicode_t unicode, const rxvt_fontprop *prop, bool &car
+
+ careful = g.x > 0 || w > prop->width * wcw;
+
++#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;
+ }
+@@ -1395,6 +1400,10 @@ rxvt_font_xft::draw (rxvt_drawable &d, int x, int y,
+
+ ep->glyph = glyph;
+ ep->x = x_ + (cwidth - extents.xOff >> 1);
++#if ENABLE_WIDE_GLYPHS
++ /* Left-align to bounding box, do not overlap to the left. */
++ max_it(ep->x, x_);
++#endif
+ ep->y = y_ + ascent;
+
+ if (extents.xOff == 0)
+diff --git a/src/screen.C b/src/screen.C
+index 115afbf..61681b8 100644
+--- a/src/screen.C
++++ b/src/screen.C
+@@ -936,7 +936,61 @@ rxvt_term::scr_add_lines (const wchar_t *str, int len, int minlines) NOTHROW
+ # 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))
+@@ -2387,7 +2441,12 @@ rxvt_term::scr_refresh () NOTHROW
+ 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 --git a/src/xdefaults.C b/src/xdefaults.C
+index 9b47bf2..add21ee 100644
+--- a/src/xdefaults.C
++++ b/src/xdefaults.C
+@@ -294,6 +294,9 @@ static const char optionsstring[] = "options: "
+ #if ENABLE_STYLES
+ "styles,"
+ #endif
++#if ENABLE_WIDE_GLYPHS
++ "wide-glyphs,"
++#endif
+ #if ENABLE_COMBINING
+ "combining,"
+ #endif
+diff --git a/wide-glyphs-after.png b/wide-glyphs-after.png
+new file mode 100644
+index 0000000..5661ea7
+Binary files /dev/null and b/wide-glyphs-after.png differ
+diff --git a/wide-glyphs-before.png b/wide-glyphs-before.png
+new file mode 100644
+index 0000000..71ae7d5
+Binary files /dev/null and b/wide-glyphs-before.png differ