diff options
Diffstat (limited to 'src/x11')
| -rw-r--r-- | src/x11/cdx11.c | 19 | ||||
| -rw-r--r-- | src/x11/xvertex.c | 69 | ||||
| -rw-r--r-- | src/x11/xvertex.h | 4 | 
3 files changed, 46 insertions, 46 deletions
| diff --git a/src/x11/cdx11.c b/src/x11/cdx11.c index 62e81ed..4f427e3 100644 --- a/src/x11/cdx11.c +++ b/src/x11/cdx11.c @@ -1224,9 +1224,9 @@ static int cd2xvertex [12] = {XR_TCENTRE, XR_BCENTRE,                                XR_MCENTRE, XR_LEFT,                                 XR_CENTRE,  XR_RIGHT}; -static void cdtext(cdCtxCanvas *ctxcanvas, int x, int y, const char *s) +static void cdtext(cdCtxCanvas *ctxcanvas, int x, int y, const char *s, int len)  { -  int w, h, n, dir = -1; +  int w, h, dir = -1;    if (ctxcanvas->canvas->text_orientation != 0)    { @@ -1239,13 +1239,13 @@ static void cdtext(cdCtxCanvas *ctxcanvas, int x, int y, const char *s)      {        sPrepareRegion(ctxcanvas);        XRotDrawString(ctxcanvas->dpy, ctxcanvas->font, ctxcanvas->canvas->text_orientation,  -                     ctxcanvas->region_aux, ctxcanvas->region_aux_gc, x, y, s,  +                     ctxcanvas->region_aux, ctxcanvas->region_aux_gc, x, y, s, len,                       cd2xvertex[ctxcanvas->canvas->text_alignment], 0);        sCombineRegion(ctxcanvas);      }      else        XRotDrawString(ctxcanvas->dpy, ctxcanvas->font, ctxcanvas->canvas->text_orientation,  -                     ctxcanvas->wnd, ctxcanvas->gc, x, y, s,  +                     ctxcanvas->wnd, ctxcanvas->gc, x, y, s, len,                       cd2xvertex[ctxcanvas->canvas->text_alignment], 0);      cdxCheckSolidStyle(ctxcanvas, 0); @@ -1253,8 +1253,7 @@ static void cdtext(cdCtxCanvas *ctxcanvas, int x, int y, const char *s)      return;    } -  n = strlen(s); -  w = XTextWidth(ctxcanvas->font, s, n); +  w = XTextWidth(ctxcanvas->font, s, len);    h = ctxcanvas->font->ascent + ctxcanvas->font->descent;    switch (ctxcanvas->canvas->text_alignment) @@ -1315,19 +1314,19 @@ static void cdtext(cdCtxCanvas *ctxcanvas, int x, int y, const char *s)    {      sPrepareRegion(ctxcanvas);      XSetFont(ctxcanvas->dpy, ctxcanvas->region_aux_gc, ctxcanvas->font->fid); -    XDrawString(ctxcanvas->dpy, ctxcanvas->region_aux, ctxcanvas->region_aux_gc, x, y+1, s, n); +    XDrawString(ctxcanvas->dpy, ctxcanvas->region_aux, ctxcanvas->region_aux_gc, x, y+1, s, len);      sCombineRegion(ctxcanvas);    }    else -    XDrawString(ctxcanvas->dpy, ctxcanvas->wnd, ctxcanvas->gc, x, y+1, s, n); +    XDrawString(ctxcanvas->dpy, ctxcanvas->wnd, ctxcanvas->gc, x, y+1, s, len);    cdxCheckSolidStyle(ctxcanvas, 0);  } -static void cdgettextsize(cdCtxCanvas *ctxcanvas, const char *s, int *width, int *height) +static void cdgettextsize(cdCtxCanvas *ctxcanvas, const char *s, int len, int *width, int *height)  {    if (!ctxcanvas->font) return; -  if (width)  *width  = XTextWidth(ctxcanvas->font, s, strlen(s)); +  if (width)  *width  = XTextWidth(ctxcanvas->font, s, len);    if (height) *height = ctxcanvas->font->ascent + ctxcanvas->font->descent;  } diff --git a/src/x11/xvertex.c b/src/x11/xvertex.c index d58af13..e1ca7ee 100644 --- a/src/x11/xvertex.c +++ b/src/x11/xvertex.c @@ -122,7 +122,7 @@ static struct style_template {  /* ---------------------------------------------------------------------- */ -static RotatedTextItem *XRotCreateTextItem(Display *dpy, XFontStruct *font, double angle, char *text, int align); +static RotatedTextItem *XRotCreateTextItem(Display *dpy, XFontStruct *font, double angle, const char *text, int len, int align);  static void XRotAddToLinkedList(Display *dpy, RotatedTextItem *item);  static XImage *XRotMagnifyImage(Display *dpy, XImage *ximage);  static void XRotFreeTextItem(Display *dpy, RotatedTextItem *item); @@ -133,18 +133,19 @@ static void XRotFreeTextItem(Display *dpy, RotatedTextItem *item);  /* Routine to mimic `my_strdup()' (some machines don't have it)              */  /**************************************************************************/ -static char *my_strdup(const char *str) +static char *my_strdup(const char *str, int len)  {    char *s; -  int len;    if(str==NULL)      return NULL; -  len = (int)strlen(str);    s=(char *)malloc((unsigned)(len+1)); -  if(s!=NULL)  -    memcpy(s, str, len+1); +  if(s!=NULL) +  { +    memcpy(s, str, len); +    s[len]=0; +  }    return s;  } @@ -157,7 +158,7 @@ static char *my_strdup(const char *str)  static char *my_strtok(char *str1, const char *str2)  {    char *ret; -  int i, j, stop; +  int i, j, stop, len2;    static int start, len;    static char *stext; @@ -176,12 +177,14 @@ static char *my_strtok(char *str1, const char *str2)    if(start>=len)      return NULL; +  len2 = strlen(str2); +    /* loop through characters */    for(i=start; i<len; i++)     {      /* loop through delimiters */      stop=0; -    for(j=0; j<strlen(str2); j++) +    for(j=0; j<len2; j++)        if(stext[i]==str2[j])          stop=1; @@ -235,7 +238,7 @@ static XImage *MakeXImage(Display *dpy, int w, int h)  /*  Draw a horizontal string in a quick fashion                           */  /**************************************************************************/ -static int XRotDrawHorizontalString(Display *dpy, XFontStruct *font, Drawable drawable, GC gc, int x, int y, const char *text, int align, int bg) +static int XRotDrawHorizontalString(Display *dpy, XFontStruct *font, Drawable drawable, GC gc, int x, int y, const char *text, int len, int align, int bg)  {    GC my_gc;    int nl=1, i; @@ -255,7 +258,7 @@ static int XRotDrawHorizontalString(Display *dpy, XFontStruct *font, Drawable dr    /* count number of sections in string */    if(align!=XR_LEFT) -    for(i=0; i<strlen(text)-1; i++) +    for(i=0; i<len-1; i++)        if(text[i]=='\n')          nl++; @@ -278,16 +281,16 @@ static int XRotDrawHorizontalString(Display *dpy, XFontStruct *font, Drawable dr    else      yp=y; -  str1=my_strdup(text); +  str1=my_strdup(text, len);    if(str1==NULL)      return 1; -  str3=my_strtok(str1, str2); -      /* loop through each section in the string */ +  str3=my_strtok(str1, str2);    do     { -    XTextExtents(font, str3, strlen(str3), &dir, &asc, &desc, &overall); +    int len3 = strlen(str3); +    XTextExtents(font, str3, len3, &dir, &asc, &desc, &overall);      /* where to draw section in x ? */      if(align==XR_TLEFT || align==XR_MLEFT || align==XR_BLEFT || align==XR_LEFT) @@ -299,9 +302,9 @@ static int XRotDrawHorizontalString(Display *dpy, XFontStruct *font, Drawable dr      /* draw string onto bitmap */      if(!bg) -      XDrawString(dpy, drawable, my_gc, xp, yp, str3, strlen(str3)); +      XDrawString(dpy, drawable, my_gc, xp, yp, str3, len3);      else -      XDrawImageString(dpy, drawable, my_gc, xp, yp, str3, strlen(str3)); +      XDrawImageString(dpy, drawable, my_gc, xp, yp, str3, len3);      /* move to next line */      yp+=height; @@ -324,7 +327,7 @@ static int XRotDrawHorizontalString(Display *dpy, XFontStruct *font, Drawable dr  /*       request, otherwise arrange for its creation                      */  /**************************************************************************/ -static RotatedTextItem *XRotRetrieveFromCache(Display *dpy, XFontStruct *font, double angle, const char *text, int align) +static RotatedTextItem *XRotRetrieveFromCache(Display *dpy, XFontStruct *font, double angle, const char *text, int len, int align)  {    Font fid;    char *font_name=NULL; @@ -413,17 +416,17 @@ static RotatedTextItem *XRotRetrieveFromCache(Display *dpy, XFontStruct *font, d    if(!item)     {      /* create new item */ -    item=XRotCreateTextItem(dpy, font, angle, text, align); +    item=XRotCreateTextItem(dpy, font, angle, text, len, align);      if(!item)        return NULL;      /* record what it shows */ -    item->text=my_strdup(text); +    item->text=my_strdup(text, len);      /* fontname or ID */      if(font_name!=NULL)       { -      item->font_name=my_strdup(font_name); +      item->font_name=my_strdup(font_name, strlen(font_name));        item->fid=0;      }      else  @@ -477,7 +480,7 @@ static RotatedTextItem *XRotRetrieveFromCache(Display *dpy, XFontStruct *font, d  /*  Create a rotated text item                                            */  /**************************************************************************/ -static RotatedTextItem *XRotCreateTextItem(Display *dpy, XFontStruct *font, double angle, char *text, int align) +static RotatedTextItem *XRotCreateTextItem(Display *dpy, XFontStruct *font, double angle, const char *text, int len, int align)  {    RotatedTextItem *item=NULL;    Pixmap canvas; @@ -507,7 +510,7 @@ static RotatedTextItem *XRotCreateTextItem(Display *dpy, XFontStruct *font, doub    /* count number of sections in string */    item->nl=1;    if(align!=XR_LEFT) -    for(i=0; i<strlen(text)-1; i++) +    for(i=0; i<len-1; i++)        if(text[i]=='\n')          item->nl++; @@ -518,7 +521,7 @@ static RotatedTextItem *XRotCreateTextItem(Display *dpy, XFontStruct *font, doub      str2=str2_b;    /* find width of longest section */ -  str1=my_strdup(text); +  str1=my_strdup(text, len);    if(str1==NULL)      return NULL; @@ -535,8 +538,7 @@ static RotatedTextItem *XRotCreateTextItem(Display *dpy, XFontStruct *font, doub      if(str3!=NULL)       { -      XTextExtents(font, str3, strlen(str3), &dir, &asc, &desc, -        &overall); +      XTextExtents(font, str3, strlen(str3), &dir, &asc, &desc, &overall);        if(overall.rbearing>item->max_width)          item->max_width=overall.rbearing; @@ -590,7 +592,7 @@ static RotatedTextItem *XRotCreateTextItem(Display *dpy, XFontStruct *font, doub    /* start at top of bitmap */    yp=font->ascent; -  str1=my_strdup(text); +  str1=my_strdup(text, len);    if(str1==NULL)      return NULL; @@ -641,8 +643,7 @@ static RotatedTextItem *XRotCreateTextItem(Display *dpy, XFontStruct *font, doub      return NULL;    /* extract horizontal text */ -  XGetSubImage(dpy, canvas, 0, 0, item->cols_in, item->rows_in, -    1, XYPixmap, I_in, 0, 0); +  XGetSubImage(dpy, canvas, 0, 0, item->cols_in, item->rows_in, 1, XYPixmap, I_in, 0, 0);    I_in->format=XYBitmap;    /* magnify horizontal text */ @@ -1073,7 +1074,7 @@ void XRotSetBoundingBoxPad(int p)  /* Calculate the bounding box some text will have when painted            */  /**************************************************************************/ -XPoint *XRotTextExtents(Display* dpy, XFontStruct* font, double angle, int x, int y, const char* text, int align) +XPoint *XRotTextExtents(Display* dpy, XFontStruct* font, double angle, int x, int y, const char* text, int len, int align)  {    register int i;    char *str1, *str2, *str3; @@ -1099,7 +1100,7 @@ XPoint *XRotTextExtents(Display* dpy, XFontStruct* font, double angle, int x, in    /* count number of sections in string */    nl=1;    if(align!=XR_LEFT) -    for(i=0; i<strlen(text)-1; i++) +    for(i=0; i<len-1; i++)        if(text[i]=='\n')          nl++; @@ -1110,7 +1111,7 @@ XPoint *XRotTextExtents(Display* dpy, XFontStruct* font, double angle, int x, in      str2=str2_b;    /* find width of longest section */ -  str1=my_strdup(text); +  str1=my_strdup(text, len);    if(str1==NULL)      return NULL; @@ -1208,7 +1209,7 @@ XPoint *XRotTextExtents(Display* dpy, XFontStruct* font, double angle, int x, in  /*  Aligns and paints a rotated string                                    */  /**************************************************************************/ -int XRotDrawString(Display* dpy, XFontStruct* font, double angle, Drawable drawable, GC gc, int x, int y, const char* text, int align, int bg) +int XRotDrawString(Display* dpy, XFontStruct* font, double angle, Drawable drawable, GC gc, int x, int y, const char* text, int len, int align, int bg)  {    int i;    GC my_gc; @@ -1230,10 +1231,10 @@ int XRotDrawString(Display* dpy, XFontStruct* font, double angle, Drawable drawa    /* horizontal text made easy */    if(angle==0. && style.magnify==1.)  -    return(XRotDrawHorizontalString(dpy, font, drawable, gc, x, y, text, align, bg)); +    return(XRotDrawHorizontalString(dpy, font, drawable, gc, x, y, text, len, align, bg));    /* get a rotated bitmap */ -  item=XRotRetrieveFromCache(dpy, font, angle, text, align); +  item=XRotRetrieveFromCache(dpy, font, angle, text, len, align);    if(item==NULL)      return 0; diff --git a/src/x11/xvertex.h b/src/x11/xvertex.h index b1b4e3a..8bb247d 100644 --- a/src/x11/xvertex.h +++ b/src/x11/xvertex.h @@ -21,8 +21,8 @@ enum {XR_LEFT, XR_CENTRE, XR_RIGHT, XR_TLEFT, XR_TCENTRE, XR_TRIGHT, XR_MLEFT, X  double   XRotVersion(char* str, int n);  void    XRotSetMagnification(double m);  void    XRotSetBoundingBoxPad(int p); -XPoint *XRotTextExtents(Display* dpy, XFontStruct* font, double angle, int x, int y, const char* text, int align); -int     XRotDrawString(Display* dpy, XFontStruct* font, double angle, Drawable drawable, GC gc, int x, int y, const char* text, int align, int bg); +XPoint *XRotTextExtents(Display* dpy, XFontStruct* font, double angle, int x, int y, const char* text, int len, int align); +int     XRotDrawString(Display* dpy, XFontStruct* font, double angle, Drawable drawable, GC gc, int x, int y, const char* text, int len, int align, int bg);  #ifdef __cplusplus  } | 
