diff options
author | haawda | 2019-10-18 22:04:16 +0200 |
---|---|---|
committer | haawda | 2019-10-18 22:04:16 +0200 |
commit | 5ea62b4c3a75b5f1cd7663bd9e45553639eb2c69 (patch) | |
tree | 3a89f4ab8caf59380c3a1ae87bd23dec23cc77fc | |
parent | 42bb09993b55b1f486e1006ceeca7e1d61fc8501 (diff) | |
download | aur-5ea62b4c3a75b5f1cd7663bd9e45553639eb2c69.tar.gz |
use tarball, remove patches
-rw-r--r-- | .SRCINFO | 12 | ||||
-rw-r--r-- | PKGBUILD | 14 | ||||
-rw-r--r-- | yorick-cvs-pwin-border.patch | 20 | ||||
-rw-r--r-- | yorick-cvs-xft-2012sep11.patch | 856 |
4 files changed, 6 insertions, 896 deletions
@@ -1,8 +1,6 @@ -# Generated by mksrcinfo v8 -# Sun Nov 1 21:49:41 UTC 2015 pkgbase = yorick pkgdesc = Interpreted language for data processing - pkgver = 2.2 + pkgver = 2_2_04 pkgrel = 1 url = http://yorick.github.com/ arch = x86_64 @@ -13,12 +11,8 @@ pkgbase = yorick makedepends = git makedepends = pkgconfig depends = rlwrap - source = git://github.com/dhmunro/yorick.git#commit=01e228e - source = https://raw.githubusercontent.com/mdcb/python-gist/master/patch/yorick-cvs-pwin-border.patch - source = https://raw.githubusercontent.com/frigaut/frigaut-arch-abs-files/master/yorick-cvs-xft-2012sep11.patch - md5sums = SKIP - md5sums = 4e486a0593cdedae8e44355d0b627abb - md5sums = 3cbd67fed39230c6a859ae601c1557f5 + source = https://github.com/LLNL/yorick/archive/y_2_2_04.tar.gz + md5sums = f46ba063992d496114db6c0a8df0f9c4 pkgname = yorick @@ -2,7 +2,7 @@ # Contributor: Francois Rigaut <frigaut@gmail.com> pkgname=yorick -pkgver=2.2 +pkgver=2_2_04 pkgrel=1 pkgdesc='Interpreted language for data processing' arch=('x86_64' 'i686') @@ -11,18 +11,12 @@ url='http://yorick.github.com/' groups=('science' 'yorick-all') depends=('rlwrap') makedepends=('git' 'pkgconfig') -source=('git://github.com/dhmunro/yorick.git#commit=01e228e' - 'https://raw.githubusercontent.com/mdcb/python-gist/master/patch/yorick-cvs-pwin-border.patch' - 'https://raw.githubusercontent.com/frigaut/frigaut-arch-abs-files/master/yorick-cvs-xft-2012sep11.patch') -md5sums=('SKIP' - '4e486a0593cdedae8e44355d0b627abb' - '3cbd67fed39230c6a859ae601c1557f5') +source=("https://github.com/LLNL/yorick/archive/y_$pkgver.tar.gz") +md5sums=('f46ba063992d496114db6c0a8df0f9c4') prepare() { cd yorick - patch -p1 -i ../yorick-cvs-xft-2012sep11.patch - make prefix=/usr ysite make config @@ -44,5 +38,3 @@ package() { make -C yorick INSTALL_ROOT="$pkgdir" install install -DTm755 yorick/wrap.sh "$pkgdir/usr/bin/yorick" } - -# vim:set ts=2 sw=2 et: diff --git a/yorick-cvs-pwin-border.patch b/yorick-cvs-pwin-border.patch deleted file mode 100644 index 9d43928b86c1..000000000000 --- a/yorick-cvs-pwin-border.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- src/play/x11/pwin.c 2010-07-06 16:21:49.000000000 -0400 -+++ src/play/x11/pwin.c.new 2010-07-06 16:17:03.000000000 -0400 -@@ -139,7 +139,7 @@ - p_col_t bg, int hints, void *ctx) - { - p_win *w = x_create(s, (Window)parent_id, hints, ctx, -- x, y, width, height, 2, bg, PWIN_PLAIN); -+ x, y, width, height, 0, bg, PWIN_PLAIN); - if (w) { - Display *dpy = s->xdpy->dpy; - if (hints&P_RGBMODEL) x_rgb_palette(w); -@@ -154,7 +154,7 @@ - p_col_t bg, int hints, void *ctx) - { - p_win *w = x_create(s, s->root, hints, ctx, -- 0, 0, width, height, 2, bg, PWIN_PLAIN); -+ 0, 0, width, height, 0, bg, PWIN_PLAIN); - if (w) { - XTextProperty x_title, *px_title; - Display *dpy = s->xdpy->dpy; diff --git a/yorick-cvs-xft-2012sep11.patch b/yorick-cvs-xft-2012sep11.patch deleted file mode 100644 index 0699b4983cef..000000000000 --- a/yorick-cvs-xft-2012sep11.patch +++ /dev/null @@ -1,856 +0,0 @@ -diff -uNr yorick-cvs/gist/gist.c yorick-xft/gist/gist.c ---- yorick-cvs/gist/gist.c 2005-09-18 18:04:31.000000000 -0400 -+++ yorick-xft/gist/gist.c 2010-11-01 21:44:12.000000000 -0300 -@@ -37,7 +37,7 @@ - { FG_COLOR, M_ASTERISK, 1.0 }, /* marker attributes */ - { FG_COLOR, F_SOLID }, /* fill attributes */ - { FG_COLOR, 0, 0.0156, -- TX_RIGHT, TH_NORMAL, TV_NORMAL, 0 }, /* text attributes */ -+ TX_RIGHT, TH_NORMAL, TV_NORMAL, 0, 0 }, /* text attributes */ - { 0, 0, 0, 0.16, 0.14, 0, - 0.13, 0.11375, 1.0, 1.0 }, /* decorated line attributes */ - { 0, 0.125 }, /* vector attributes */ -@@ -329,6 +329,7 @@ - /* Swap in text attributes appropriate for markers */ - gistA.t.color= gistA.m.color; - gistA.t.font= MARKER_FONT; -+ strcpy(gistA.t.xftfont,""); - gistA.t.height= gistA.m.size * DEFAULT_MARKER_SIZE; - gistA.t.orient= TX_RIGHT; - gistA.t.alignH= TH_CENTER; -diff -uNr yorick-cvs/gist/gist.h yorick-xft/gist/gist.h ---- yorick-cvs/gist/gist.h 2009-10-19 01:37:51.000000000 -0300 -+++ yorick-xft/gist/gist.h 2010-11-02 21:54:24.000000000 -0300 -@@ -259,7 +259,8 @@ - - /* GKS is missing a text opacity flag. */ - int opaque; -- -+ char xftfont[256]; /* xft text font name */ -+ - /* A font is a type face optionally ORed with T_BOLD and/or T_ITALIC. */ - /* Available point sizes (for X) are 8, 10, 12, 14, 18, and 24 */ - #define T_BOLD 1 -diff -uNr yorick-cvs/gist/hlevel.c yorick-xft/gist/hlevel.c ---- yorick-cvs/gist/hlevel.c 2007-12-28 17:20:18.000000000 -0300 -+++ yorick-xft/gist/hlevel.c 2010-11-01 16:53:54.000000000 -0300 -@@ -285,7 +285,7 @@ - static GpMarkerAttribs mDefault= { FG_COLOR, 0, 1.0 }; - static GpFillAttribs fDefault= { FG_COLOR, F_SOLID }; - static GpTextAttribs tDefault= { FG_COLOR, 0, 0.0156, -- TX_RIGHT, TH_NORMAL, TV_NORMAL }; -+ TX_RIGHT, TH_NORMAL, TV_NORMAL, 0 }; - static GaLineAttribs dlDefault= { 0, 0, 0, 0.16, 0.14, 0, - 0.13, 0.11375, 1.0, 1.0 }; - static GaVectAttribs vectDefault= { 0, 0.125 }; -diff -uNr yorick-cvs/gist/xbasic.c yorick-xft/gist/xbasic.c ---- yorick-cvs/gist/xbasic.c 2010-01-10 02:02:23.000000000 -0300 -+++ yorick-xft/gist/xbasic.c 2010-11-01 16:53:54.000000000 -0300 -@@ -191,7 +191,8 @@ - - /* call p_font before any calls to TextWidth - * - may improve efficiency of p_txwidth, p_txheight */ -- p_font(current_win, gistA.t.font, current_fsize, gistA.t.orient); -+ p_font(current_win, gistA.t.font, current_fsize, -+ gistA.t.orient, gistA.t.xftfont); - - /* Set nLines, maxWidth, nChars, prevWidth */ - firstTextLine = 1; -@@ -279,8 +280,8 @@ - *ix= dx + ix0; - *iy= dy + iy0; - -- if (nChunk) p_font(current_win, -- gistA.t.font, current_fsize, gistA.t.orient); -+ if (nChunk) p_font(current_win, gistA.t.font, current_fsize, -+ gistA.t.orient, gistA.t.xftfont); - return nChunk; - } - -@@ -332,7 +333,8 @@ - if (current_state&1) yadj+= dy_super; - else if (current_state&2) yadj-= dy_sub; - if (nChunk && (current_state&4)) -- p_font(current_win, gistA.t.font, current_fsize, gistA.t.orient); -+ p_font(current_win, gistA.t.font, current_fsize, -+ gistA.t.orient, gistA.t.xftfont); - current_state= 0; - - } else { -@@ -358,11 +360,13 @@ - c= txt[nChunk]; - if ((nChunk+1<nChars && c=='!') || c=='^' || c=='_') break; - } -- p_font(current_win, gistA.t.font, current_fsize, gistA.t.orient); -+ p_font(current_win, gistA.t.font, current_fsize, -+ gistA.t.orient, gistA.t.xftfont); - current_state&= 3; - } else { - /* chunk is single symbol char */ -- p_font(current_win, current_fsym, current_fsize, gistA.t.orient); -+ p_font(current_win, current_fsym, current_fsize, -+ gistA.t.orient, gistA.t.xftfont); - current_state|= 4; - } - -@@ -372,7 +376,8 @@ - if ((nChunk+1<nChars && c=='!') || c=='^' || c=='_') break; - } - if (nChunk) -- p_font(current_win, gistA.t.font, current_fsize, gistA.t.orient); -+ p_font(current_win, gistA.t.font, current_fsize, -+ gistA.t.orient, gistA.t.xftfont); - if (c1=='^') { - if (current_state&1) { - yadj+= dy_super; /* return from super to normal */ -@@ -809,7 +814,9 @@ - /* erase background if string is opaque */ - if (gistA.t.opaque) { - p_color(w, P_BG); -- p_rect(w, xbox[0], ybox[0], xbox[1], ybox[1], 0); -+ /* when using xft, the opaque is managed by textout */ -+ if (!strlen(gistA.t.xftfont)) -+ p_rect(w, xbox[0], ybox[0], xbox[1], ybox[1], 0); - } - p_color(w, gistA.t.color); - -@@ -817,7 +824,7 @@ - if (len>0) { - if (len==1 && (current_state&4) && text[0]==']') txt = caret; - else txt = text; -- p_text(w, ix, iy, txt, len); -+ p_text(w, ix, iy, txt, len, gistA.t.opaque); - } - len = GxJustifyNext(&text, &ix, &iy); - } while (len>=0); -diff -uNr yorick-cvs/gist/xfancy.c yorick-xft/gist/xfancy.c ---- yorick-cvs/gist/xfancy.c 2008-10-28 01:02:30.000000000 -0300 -+++ yorick-xft/gist/xfancy.c 2010-11-01 16:53:54.000000000 -0300 -@@ -328,8 +328,8 @@ - p_rect(w, 0, 0, fxe->widthButton, fxe->xe.topMargin-1, 0); - if (fxe->buttonState) HighlightButton(fxe); - else p_color(w, fg); -- p_font(w, P_GUI_FONT, 15, 0); -- p_text(w, 3, fxe->baseline, "System", 6); -+ p_font(w, P_GUI_FONT, 15, 0, ""); -+ p_text(w, 3, fxe->baseline, "System", 6, 0); - } - } - -@@ -431,8 +431,8 @@ - p_color(w, P_BG); - p_rect(w, fxe->widthButton+1, 0, fxe->xe.wtop, fxe->xe.topMargin-2, 0); - p_color(w, P_FG); -- p_font(w, P_GUI_FONT, 15, 0); -- p_text(w, fxe->widthButton+4, fxe->baseline, msg, len); -+ p_font(w, P_GUI_FONT, 15, 0, ""); -+ p_text(w, fxe->widthButton+4, fxe->baseline, msg, len, 0); - } - } - -diff -uNr yorick-cvs/i/style.i yorick-xft/i/style.i ---- yorick-cvs/i/style.i 2005-09-18 18:06:10.000000000 -0400 -+++ yorick-xft/i/style.i 2010-11-02 21:54:34.000000000 -0300 -@@ -342,10 +342,10 @@ - default_line= GpLineAttribs(color= 254, type= 1, width= 1.0); - default_text= GpTextAttribs( - color= 254, font= 0x08, height= 0.0182, -- orient= 0, alignH= 0, alignV= 0, opaque= 0); -+ orient= 0, alignH= 0, alignV= 0, opaque= 0); - default_ltxt= GpTextAttribs( - color= 254, font= 0x00, height= 0.0156, -- orient= 0, alignH= 1, alignV= 1, opaque= 0); -+ orient= 0, alignH= 1, alignV= 1, opaque= 0); - default= GfakeSystem(viewport=[0.19, 0.60, 0.44, 0.85], - ticks= GaTickStyle( - horiz= GaAxisStyle( -@@ -665,6 +665,7 @@ - alignV: 0=normal 1=top 2=cap 3=half 4=base 5=bot */ - - int opaque; -+ char xftfont(256); - } - - struct GaAxisStyle { -diff -uNr yorick-cvs/i0/graph.i yorick-xft/i0/graph.i ---- yorick-cvs/i0/graph.i 2010-04-18 06:33:38.000000000 -0400 -+++ yorick-xft/i0/graph.i 2010-11-01 16:53:54.000000000 -0300 -@@ -697,6 +697,26 @@ - value can be <0 if the information is unavailable for some reason. - SEE ALSO: window, limits, plg - */ -+ -+extern xft; -+/* DOCUMENT xft() -+ or xft, 0/1 -+ As a function, returns: -+ -1: yorick was not build with xft support -+ 0: xft disabled -+ 1: xft enabled -+ -+ As a subroutine, allow to enable/disable the use of xft. -+ -+ If you have built yorick with Xft support, the fonts will be -+ rendered antialiased. Use the regular font keyword (see font), -+ with the Xft font syntax (e.g. "Times-14:slant"). There is -+ partial support for plotting the text at an arbitrary angle (use -+ negative values of orient). When xft is enabled, all text is -+ antialiased. -+ -+ SEE ALSO: font, orient -+ */ - - /*= SECTION(plotter) plotting functions ====================================*/ - -@@ -1349,6 +1369,20 @@ - The font keyword may also be an integer: 0 is Courier, 4 is Times, - 8 is Helvetica, 12 is Symbol, 16 is New Century Schoolbook, and - you add 1 to get boldface and/or 2 to get italic (or oblique). -+ -+ If you have built yorick with Xft support, the fonts will be -+ rendered antialiased. You can use the regular font keyword as -+ above (which will render the font antialiased), or use the newer -+ xft syntax for fonts: "<family>-<size>:<name>=<value>...", as in -+ "Sans-14", "Times-14:slant=1". The syntax even accepts alternate -+ fonts: "times,charter-12:bold" (times prefered, charter accepted, -+ 12 points, bold face). For more information, look at -+ http://keithp.com/~keithp/render/Xft.tutorial. You can set the -+ default font for plot titles and axis captions with -+ pltitle_xftfont. Note that if you want to use one of the regular -+ yorick fonts (see above) with the xft format, you will have to -+ capitalize it (e.g. "times:slant=1" will generate an error while -+ "Times:slant=1" will be correctly translated). - - The height is the font size in points; 14.0 is the default. - X windows only has 8, 10, 12, 14, 18, and 24 point fonts, so -@@ -1357,10 +1391,11 @@ - - By default, opaque=0 and text is transparent. Set opaque=1 to - white-out a box before drawing the text. The default orient -- (orient=0) is left-to-right text; set orient=1 for text rotated 90 -- degrees so it reads upward, orient=2 for 180 degree rotation so -- it is upside down, and orient=3 for 270 degree rotation so it -- reads downward. -+ (orient=0) is left-to-right text; set orient=1 for text rotated -+ 90 degrees so it reads upward, orient=2 for 180 degree rotation -+ so it is upside down, and orient=3 for 270 degree rotation so it -+ reads downward. With Xft enabled, there is partial support for -+ arbitrary plotting angle (use negative integer values of orient). - - The default text justification, justify="NN" is normal is both - the horizontal and vertical directions. Other possibilities -diff -uNr yorick-cvs/opengl/test3d.c yorick-xft/opengl/test3d.c ---- yorick-cvs/opengl/test3d.c 2005-09-18 18:06:23.000000000 -0400 -+++ yorick-xft/opengl/test3d.c 2010-11-01 16:53:54.000000000 -0300 -@@ -221,7 +221,7 @@ - p_pen(w, 1, P_SOLID); - seg_draw(w, 0,29, 300,29); - p_font(w, P_COURIER | P_BOLD, 14, 0); -- p_text(w, 20,20, "2D plotting area above line", 27); -+ p_text(w, 20,20, "2D plotting area above line", 27, 0); - } else if (gl==glw1) { - p_glcurrent(gl); - check_err("on_expose entry"); /* may get error before p_glcurrent */ -diff -uNr yorick-cvs/play/play.h yorick-xft/play/play.h ---- yorick-cvs/play/play.h 2010-04-08 06:53:49.000000000 -0400 -+++ yorick-xft/play/play.h 2010-11-01 16:53:54.000000000 -0300 -@@ -119,7 +119,7 @@ - - /* screen graphics property setting functions */ - PLUG_API void p_color(p_win *w, p_col_t color); --PLUG_API void p_font(p_win *w, int font, int pixsize, int orient); -+PLUG_API void p_font(p_win *w, int font, int pixsize, int orient, char *xftfont); - PLUG_API void p_pen(p_win *w, int width, int type); - - /* set point list for p_dots, p_lines, p_fill, p_segments (pairs in list) -@@ -133,7 +133,7 @@ - PLUG_API void p_d_map(p_win *w, double xt[], double yt[], int set); - - /* screen graphics drawing functions */ --PLUG_API void p_text(p_win *w, int x0, int y0, const char *text, int n); -+PLUG_API void p_text(p_win *w, int x0, int y0, const char *text, int n, int opaque); - PLUG_API void p_rect(p_win *w, int x0, int y0, int x1, int y1, int border); - PLUG_API void p_ellipse(p_win *w, int x0, int y0, int x1, int y1, int border); - PLUG_API void p_dots(p_win *w); -diff -uNr yorick-cvs/play/README yorick-xft/play/README ---- yorick-cvs/play/README 2007-03-19 03:31:30.000000000 -0400 -+++ yorick-xft/play/README 2010-11-01 16:53:54.000000000 -0300 -@@ -561,7 +561,7 @@ - -------graphical output functions - - /* screen graphics drawing functions */ --extern void p_text(p_win *w, int x0, int y0, const char *text, int n); -+extern void p_text(p_win *w, int x0, int y0, const char *text, int n, int opaque); - draw first n characters of text at (x0,y0) in current font and color - (x0,y0) is the point on the baseline at the beginning of the first - character -@@ -615,7 +615,7 @@ - P_SOLID 0 P_DOT 2 P_DASHDOTDOT 4 - P_DASH 1 P_DASHDOT 3 P_SQUARE 8 - --extern void p_font(p_win *w, int font, int pixsize, int orient); -+extern void p_font(p_win *w, int font, int pixsize, int orient, char *xftfont); - set the current font - this must be called not only when the font changes, but also - after any graphics call to any other window has been made -diff -uNr yorick-cvs/play/win/getdc.c yorick-xft/play/win/getdc.c ---- yorick-cvs/play/win/getdc.c 2005-09-18 18:05:35.000000000 -0400 -+++ yorick-xft/play/win/getdc.c 2010-11-01 16:53:54.000000000 -0300 -@@ -19,7 +19,7 @@ - static void w_font(p_scr *s, HDC dc, int font, int pixsize, int orient); - - void --p_font(p_win *w, int font, int pixsize, int orient) -+p_font(p_win *w, int font, int pixsize, int orient, char *xftfont) - { - wp_font(w, font, pixsize, orient); - } -diff -uNr yorick-cvs/play/win/ptext.c yorick-xft/play/win/ptext.c ---- yorick-cvs/play/win/ptext.c 2005-09-18 18:05:36.000000000 -0400 -+++ yorick-xft/play/win/ptext.c 2010-11-01 16:53:54.000000000 -0300 -@@ -12,7 +12,7 @@ - #include "pstdlib.h" - - void --p_text(p_win *w, int x0, int y0, const char *text, int n) -+p_text(p_win *w, int x0, int y0, const char *text, int n, int opaque) - { - HDC dc = w_getdc(w, 1); - if (dc) { -diff -uNr yorick-cvs/play/x11/connect.c yorick-xft/play/x11/connect.c ---- yorick-cvs/play/x11/connect.c 2005-09-18 18:05:34.000000000 -0400 -+++ yorick-xft/play/x11/connect.c 2010-11-02 22:35:49.000000000 -0300 -@@ -22,7 +22,6 @@ - int c, int dc); - static void x_disconnect(x_display *xdpy); - static int x_err_installed = 0; -- - x_display *x_displays = 0; - - p_scr * -@@ -79,6 +78,15 @@ - } - x_parse_fonts(xdpy); /* see fonts.c */ - -+#ifdef HAVE_XFT -+ xdpy->use_xft = 0; -+ for (i=0 ; i<N_XFTFONT_CACHE ; i++) { -+ xftc[i].pixsize = 0; -+ xftc[i].dpy = 0; -+ xftc[i].angle = 0; -+ xftc[i].height = 0; -+ } -+#endif - /* find default font */ - - if (x_xfont) { -@@ -222,6 +230,17 @@ - xdpy->cached[i].f = 0; - XFreeFont(dpy, font); - } -+ -+#ifdef HAVE_XFT -+ /* XftFontClose( dpy, xdpy->xftfont); */ -+ for (i=0 ; i<N_XFTFONT_CACHE ; i++) { -+ if (xftc[i].pixsize) { -+ xftc[i].pixsize = 0; -+ if (xftc[i].dpy==dpy) XftFontClose(dpy, xftc[i].font); -+ } -+ } -+#endif -+ - for (i=0 ; i<=P_NONE ; i++) { - cur = xdpy->cursors[i]; - xdpy->cursors[i] = None; -diff -uNr yorick-cvs/play/x11/playwin.h yorick-xft/play/x11/playwin.h ---- yorick-cvs/play/x11/playwin.h 2005-09-18 18:05:34.000000000 -0400 -+++ yorick-xft/play/x11/playwin.h 2010-11-02 21:51:05.000000000 -0300 -@@ -11,7 +11,20 @@ - #include "play.h" - #include "phash.h" - #include <X11/Xlib.h> -- -+#ifdef HAVE_XFT -+#include <X11/Xft/Xft.h> -+#define N_XFTFONT_CACHE 10 -+ -+typedef struct xftcache xftcache; -+struct xftcache { -+ XftFont *font; /* xftfont cache */ -+ Display *dpy; /* display these font are for */ -+ int pixsize; /* xft font pixsize cache */ -+ char name[256]; -+ int angle; /* xft font angle cache */ -+ int height; /* ascent + descent */ -+}; -+#endif - #define N_FONT_CACHE 6 - - /* the Display struct may be shared among several root windows, -@@ -36,6 +49,13 @@ - XFontStruct *font; /* default font to use on this server */ - int unload_font; /* non-0 if font must be unloaded */ - -+#ifdef HAVE_XFT -+ XftFont *xftfont; -+ int use_xft; -+ int xft_angle; -+ int xft_height; /* ascent + descent */ -+#endif -+ - struct { - XFontStruct *f; - int font, pixsize, next; -diff -uNr yorick-cvs/play/x11/playx.h yorick-xft/play/x11/playx.h ---- yorick-cvs/play/x11/playx.h 2005-09-18 18:05:32.000000000 -0400 -+++ yorick-xft/play/x11/playx.h 2010-11-02 21:17:53.000000000 -0300 -@@ -22,6 +22,7 @@ - /* retrieve p_win* given Window id number, Display* (for event handling) - * - the p_win context can be used to back up the hierarchy further - * - this could be implemented using XContext mechanism */ -+extern struct xftcache xftc[N_XFTFONT_CACHE]; - extern x_display *x_dpy(Display *dpy); - extern p_win *x_pwin(x_display *xdpy, Drawable d); - -diff -uNr yorick-cvs/play/x11/textout.c yorick-xft/play/x11/textout.c ---- yorick-cvs/play/x11/textout.c 2005-09-18 18:05:33.000000000 -0400 -+++ yorick-xft/play/x11/textout.c 2010-11-02 22:47:19.000000000 -0300 -@@ -10,32 +10,100 @@ - - #include "config.h" - #include "playx.h" -- - #include "pstdlib.h" -- - #include <string.h> - -+#ifdef HAVE_XFT -+#define PI 3.14159265358979323846 -+#define XFT_DEBUG 0 -+extern double cos(double); -+extern double sin(double); -+void p_xftfont(x_display *xdpy, int pixsize, int orient, char *xftfont); -+void p_xfttext(p_win *w, int x0, int y0, const char *text, int n, int opaque); -+char *p_font2xftfont(int font); -+struct xftcache xftc[N_XFTFONT_CACHE]; -+#endif -+int xft_enabled; -+ -+ - int - p_txheight(p_scr *s, int font, int pixsize, int *baseline) - { -+#ifdef HAVE_XFT -+ x_display *xdpy = s->xdpy; -+ -+ if (xft_enabled && xdpy->use_xft) { -+ /* Unfortunately, the baseline can only be computed accurately */ -+ /* with the unrotated font *and* the text. We don't have those 2 */ -+ /* available simultaneously, unless we also store the unrotated */ -+ /* xftfont, which I don't want to do. This is an approximation */ -+ if (baseline) *baseline = pixsize; -+ -+ /* If xft_angle is not 0 or 180, the ascent and descent reported */ -+ /* in xftfont structure are 0 (understandably). This is why it was */ -+ /* necessary to compute the height on the unrotated font in p_font */ -+ return xdpy->xft_height; -+ } -+#endif - XFontStruct *f = x_font(s->xdpy, font, pixsize); - if (baseline) *baseline = f->ascent; - return f->ascent + f->descent; /* hopefully close to pixsize */ -+ - } - - int - p_txwidth(p_scr *s, const char *text, int n, int font, int pixsize) - { -+#ifdef HAVE_XFT -+ x_display *xdpy = s->xdpy; -+ double ang = (double) xdpy->xft_angle; -+ -+ if (xft_enabled && xdpy->use_xft) { -+ XGlyphInfo extents; -+ Display *dpy = xdpy->dpy; -+ int len = strlen(text); -+ if (n<=0 || n>len) n = len; -+ XftTextExtents8( dpy, xdpy->xftfont, (XftChar8 *)text, n, &extents ); -+ -+ ang = ang * PI / 180.; -+ /* Unrotate the extents to deliver GxJustifyText what it expects */ -+ /* I could also run XftTextExtents8 on an unrotated xftfont, but */ -+ /* it would add an unnecessary overhead and storage */ -+ int xOffur; -+ xOffur = (int) (cos(ang) * extents.xOff - sin(ang) * extents.yOff); -+ return xOffur; -+ } -+#endif -+ - XFontStruct *f = x_font(s->xdpy, font, pixsize); - int len = strlen(text); - if (n<=0 || n>len) n = len; - return XTextWidth(f, (char *)text, n); - } - -+ - void --p_font(p_win *w, int font, int pixsize, int orient) -+p_font(p_win *w, int font, int pixsize, int orient, char *xftfont) - { - p_scr *s = w->s; -+#ifdef HAVE_XFT -+ x_display *xdpy = s->xdpy; -+ -+ if (xft_enabled) { -+ /* intercept request for xft font here */ -+ if (!xftfont || !strlen(xftfont)) { -+ if (XFT_DEBUG) printf("xftfont: finding local alternative to font#%d\n",font); -+ xftfont=p_font2xftfont(font); -+ if (XFT_DEBUG) printf("xftfont: found %s\n",xftfont); -+ } -+ if (xftfont && strlen(xftfont)) { -+ p_xftfont(xdpy, pixsize, orient, xftfont); -+ xdpy->use_xft = 1; -+ return; -+ } -+ } -+ xdpy->use_xft = 0; -+#endif - - if (s->rotgc || s->tmp || s->image || s->pixmap!=None) x_rotzap(s); - -@@ -56,8 +124,112 @@ - } - } - -+ -+#ifdef HAVE_XFT - void --p_text(p_win *w, int x0, int y0, const char *text, int n) -+p_xftfont(x_display *xdpy, int pixsize, int orient, char *xftfont) -+{ -+ /* xft font: all the font matching/opening/cache is done in here */ -+ Display *dpy = xdpy->dpy; -+ int ang, i, j; -+ int number; -+ -+ /* Use orient < 0 as positive angle for xft */ -+ if (orient>=0) ang = orient * 90; -+ else ang = -1 * orient; -+ -+ xdpy->xft_angle = ang; -+ -+ /* is the xft font in cache? */ -+ for (i=0;i<N_XFTFONT_CACHE;i++) { -+ if (xftc[i].pixsize && xftc[i].pixsize == pixsize && -+ xftc[i].angle == ang && xftc[i].dpy == dpy && -+ strcmp(xftc[i].name,xftfont) == 0 ) { -+ if (XFT_DEBUG) printf("Found a match for \"%s\" in cache\n",xftfont); -+ /* xdpy->xftfont = xftc[i].font; */ -+ xdpy->xftfont = XftFontCopy( dpy, xftc[i].font); -+ xdpy->xft_height = xftc[i].height; -+ return; -+ } -+ } -+ if (XFT_DEBUG) printf("\"%s\" not found in cache, generating\n",xftfont); -+ -+ /* Open pattern */ -+ XftPattern *xft_pat = XftNameParse(xftfont); -+ -+ /* Add pixel size and possible rotation */ -+ XftPatternAddDouble (xft_pat, XFT_PIXEL_SIZE, (double)pixsize); -+ -+ /* fisrt we need to get the ascent and descent of the unrotated font */ -+ -+ /* don't need to free the 2 following variables (checked), no memleak */ -+ XftPattern *match_pat; /* the best available match on the system */ -+ -+ /* query the system to find a match for this font */ -+ XftResult fcresult; -+ match_pat = XftFontMatch(dpy, DefaultScreen(dpy), xft_pat, &fcresult); -+ -+ /* open the matched font */ -+ xdpy->xftfont = XftFontOpenPattern(dpy, match_pat); -+ -+ /* store the height = ascent + descent for future use */ -+ xdpy->xft_height = xdpy->xftfont->ascent + xdpy->xftfont->descent; -+ -+ /* now we can go ahead for a possible rotation */ -+ -+ if (ang!=0) { -+ XftMatrix matrix; -+ XftMatrixInit(&matrix); -+ XftMatrixRotate(&matrix,cos(PI*(double)ang/180.),sin(PI*(double)ang/180.)); -+ XftPatternAddMatrix (xft_pat, XFT_MATRIX,&matrix); -+ -+ /* query the system to find a match for this font */ -+ match_pat = XftFontMatch(dpy, DefaultScreen(dpy), xft_pat, &fcresult); -+ -+ /* we have to free space before we reallocate */ -+ XftFontClose( dpy, xdpy->xftfont); -+ -+ /* open the matched font */ -+ xdpy->xftfont = XftFontOpenPattern(dpy, match_pat); -+ } -+ -+ /* Tidy up the resources we allocated */ -+ XftPatternDestroy(xft_pat); -+ -+ /* Store in cache. I use pixsize as a used/not used marker. */ -+ /* Look for free slot */ -+ i=0; -+ while (i<N_XFTFONT_CACHE && xftc[i].pixsize) i++; -+ -+ if (i==N_XFTFONT_CACHE) { -+ /* Cache is full, empying */ -+ if (XFT_DEBUG) printf("Font cache out of space, clearing the cache\n"); -+ /* I choose to clear the whole cache instead of removing only the */ -+ /* most recent like the regular font cache. Not a big deal. */ -+ for (j=0;j<N_XFTFONT_CACHE;j++) { -+ strcpy(xftc[j].name,""); -+ xftc[j].pixsize = 0; -+ XftFontClose(xftc[j].dpy, xftc[j].font); -+ } -+ i=0; -+ } -+ -+ /* Store font in cache */ -+ if (XFT_DEBUG) printf("Storing \"%s\" in cache[%d]\n",xftfont,i); -+ xftc[i].font = xdpy->xftfont; -+ /* xftc[i].font = XftFontCopy( dpy, xdpy->xftfont); */ -+ xftc[i].dpy = dpy; -+ strcpy(xftc[i].name,xftfont); -+ xftc[i].angle = ang; -+ xftc[i].pixsize = pixsize; -+ xftc[i].height = xdpy->xft_height; -+} -+#endif -+ -+ -+ -+void -+p_text(p_win *w, int x0, int y0, const char *text, int n, int opaque) - { - p_scr *s = w->s; - x_display *xdpy = s->xdpy; -@@ -67,6 +238,13 @@ - Drawable d = w->d; - int i; - -+#ifdef HAVE_XFT -+ if (xft_enabled && xdpy->use_xft) { -+ p_xfttext(w, x0, y0, text, n, opaque); -+ return; -+ } -+#endif -+ - if (s->rotgc || s->tmp || s->image || s->pixmap!=None) x_rotzap(s); - - if (n<=0) n = 16350; -@@ -157,3 +335,99 @@ - } - if (p_signalling) p_abort(); - } -+ -+ -+#ifdef HAVE_XFT -+void -+p_xfttext(p_win *w, int x0, int y0, const char *text, int n, int opaque) -+{ -+ p_scr *s = w->s; -+ x_display *xdpy = s->xdpy; -+ Display *dpy = xdpy->dpy; -+ Drawable d = w->d; -+ XftFont *xftfont = xdpy->xftfont; -+ XGlyphInfo extents; -+ XftDraw *xftdraw; -+ XRenderColor xrcolor; -+ XftColor xftcolor, hlcolor; -+ int i; -+ -+ -+ -+ XftTextExtents8( dpy, xftfont, (XftChar8 *)text, strlen(text), &extents ); -+ -+ /* Xft draw context */ -+ xftdraw = XftDrawCreate( dpy, d, DefaultVisual(dpy,DefaultScreen(dpy)), -+ DefaultColormap( dpy, DefaultScreen(dpy) ) ); -+ -+ /* Colors: this really should not be here, but in colors.c, but I'm lazy */ -+ /* Xft text color */ -+ p_col_t col = x_getpixel(w,s->gc_color); -+ xrcolor.red = ((unsigned short)(char)(col>>16))<<7; -+ xrcolor.green = ((unsigned short)(char)(col>>8))<<7; -+ xrcolor.blue = ((unsigned short)(char)col)<<7; -+ xrcolor.alpha = 0xffff; -+ -+ XftColorAllocValue( dpy, DefaultVisual(dpy,DefaultScreen(dpy)), -+ DefaultColormap( dpy, DefaultScreen(dpy) ), -+ &xrcolor, &xftcolor ); -+ -+ /* Xft highlight color */ -+ if (opaque) { -+ col = x_getpixel(w,XFT_DEBUG? 251 : P_BG); -+ xrcolor.red = ((unsigned short)(char)(col>>16))<<7; -+ xrcolor.green = ((unsigned short)(char)(col>>8))<<7; -+ xrcolor.blue = ((unsigned short)(char)col)<<7; -+ xrcolor.alpha = 0xafff; -+ -+ XftColorAllocValue( dpy, DefaultVisual(dpy,DefaultScreen(dpy)), -+ DefaultColormap(dpy,DefaultScreen(dpy)), -+ &xrcolor, &hlcolor ); -+ -+ XftDrawRect( xftdraw, &hlcolor, x0-extents.x, y0-extents.y, -+ extents.width, extents.height); -+ } -+ if (n<=0) n = 16350; -+ for (i=0 ; i<n ; i++) if (!text[i]) break; -+ n = i; -+ -+ /* Finally, draw the text: */ -+ XftDrawString8( xftdraw, &xftcolor, xftfont, x0, y0, (XftChar8 *)text, n ); -+ -+ // Tidy up the resources we allocated -+ XftColorFree ( dpy, DefaultVisual(dpy,DefaultScreen(dpy)), -+ DefaultColormap(dpy,DefaultScreen(dpy)),&hlcolor); -+ XftColorFree ( dpy, DefaultVisual(dpy,DefaultScreen(dpy)), -+ DefaultColormap(dpy,DefaultScreen(dpy)),&xftcolor); -+ XftDrawDestroy( xftdraw ); -+} -+ -+char * -+p_font2xftfont(int font) -+{ -+ static char *xftfonts[20] = -+ {"Courier", -+ "Courier:weight=255", -+ "Courier:slant=1", -+ "Courier:weight=255:slant=1", -+ "Times", -+ "Times:weight=255", -+ "Times:slant=1", -+ "Times:weight=255:slant=1", -+ "Helvetica", -+ "Helvetica:weight=255", -+ "Helvetica:slant=1", -+ "Helvetica:weight=255:slant=1", -+ "Symbol", -+ "Symbol:weight=255", -+ "Symbol:slant=1", -+ "Symbol:weight=255:slant=1", -+ "New Century Schoolbook", -+ "New Century Schoolbook:weight=255", -+ "New Century Schoolbook:slant=1", -+ "New Century Schoolbook:weight=255:slant=1"}; -+ if (font<0 || font>19) return ""; -+ return xftfonts[font]; -+} -+ -+#endif -diff -uNr yorick-cvs/yorick/graph.c yorick-xft/yorick/graph.c ---- yorick-cvs/yorick/graph.c 2010-04-13 07:34:30.000000000 -0400 -+++ yorick-xft/yorick/graph.c 2010-11-01 16:53:54.000000000 -0300 -@@ -60,6 +60,7 @@ - long ix, long ijx, long *nbndy); - - extern BuiltIn Y_plg, Y_plm, Y_plc, Y_plv, Y_plf, Y_pli, Y_plt, Y_pldj; -+ - extern BuiltIn Y_plmesh, Y_bytscl, Y_plfp; - - extern BuiltIn Y_limits, Y_logxy, Y_zoom_factor, Y_unzoom; -@@ -77,7 +78,7 @@ - - extern BuiltIn Y_mouse, Y_contour, Y_mesh_loc, Y_pause, Y_current_window; - extern BuiltIn Y_keybd_focus, Y_rgb_read; --extern BuiltIn Y_current_mouse, Y_set_gpath; -+extern BuiltIn Y_current_mouse, Y_set_gpath, Y_xft; - - /*--------------------------------------------------------------------------*/ - -@@ -156,6 +157,11 @@ - static void RefMesh(GaQuadMesh *mesh); - - extern int YCurrentPlotter(void); /* for style.c */ -+#ifdef HAVE_XFT -+extern int xft_enabled=1; -+#else -+extern int xft_enabled=-1; -+#endif - - /*--------------------------------------------------------------------------*/ - -@@ -410,8 +416,14 @@ - return T_SYMBOL | GetTypeface(&s[6]); - else if (strncmp(s, "schoolbook", 10)==0) - return T_NEWCENTURY | GetTypeface(&s[10]); -- YError("unrecognized font keyword"); -- return 0; -+ else { -+#ifdef HAVE_XFT -+ strncpy(gistA.t.xftfont,s,256); -+#else -+ YError("unrecognized font keyword"); -+#endif -+ return 0; -+ } - } else { - return (int)YGetInteger(stack); - } -@@ -1486,6 +1498,7 @@ - Drop(nArgs+convertedZ); - } - -+ - #undef N_KEYWORDS - #define N_KEYWORDS 9 - static char *pltKeys[N_KEYWORDS+1]= { -@@ -1539,10 +1552,15 @@ - if (gistA.t.orient==1) gistA.t.orient= TX_UP; - else if (gistA.t.orient==2) gistA.t.orient= TX_LEFT; - else if (gistA.t.orient==3) gistA.t.orient= TX_DOWN; -- else { -+#ifdef HAVE_XFT -+ /* orient < 0 allowed for xft angle */ -+ else if (gistA.t.orient>3) gistA.t.orient= TX_RIGHT; -+#else -+ else if (gistA.t.orient>3 || gistA.t.orient<0) { - gistA.t.orient= TX_RIGHT; - YError("orient= keyword must be 0, 1, 2, or 3"); - } -+#endif - } - - toSys= 0; -@@ -2135,7 +2153,7 @@ - else - YError("failed to create drawing -- Gist work.gs style sheet missing"); - } -- -+ - /* make this window current */ - GhSetPlotter(n); - -@@ -2301,6 +2319,23 @@ - } - } - -+ -+void Y_xft(int argc) -+{ -+ int n; -+ -+ if (argc > 1) { -+ YError("xft takes at most one non-keyword argument"); -+ } -+ if (YNotNil(sp)) { /* set xft_enabled */ -+ n = YGetInteger(sp); -+ xft_enabled = (n?1:0); -+ } else { /* return xft_enabled */ -+ PushIntValue(xft_enabled); -+ } -+} -+ -+ - #undef N_KEYWORDS - #define N_KEYWORDS 2 - static char *hcpKeys[N_KEYWORDS+1]= { "dump", "ps", 0 }; |