Xnest: replace XDrawString[8|16]() by xcb_poly_text_[8|16]()
Replace XDrawString8() by xcb_poly_text_8(), as well as XDrawString16() by xcb_poly_text_16(). Some care needs to be taken to prepend the xTextElt header before sending the request out. GC operation handlers don't need to care about poly-strings or length above 254, as this is already handled by their caller, doPolyText(). Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
		
							parent
							
								
									0fdcadba09
								
							
						
					
					
						commit
						463dd69d9b
					
				| 
						 | 
				
			
			@ -318,8 +318,24 @@ xnestPolyText8(DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count,
 | 
			
		|||
{
 | 
			
		||||
    int width;
 | 
			
		||||
 | 
			
		||||
    XDrawString(xnestDisplay, xnestDrawable(pDrawable), xnestGC(pGC),
 | 
			
		||||
                x, y, string, count);
 | 
			
		||||
    // we need to prepend a xTextElt struct before our actual characters
 | 
			
		||||
    // won't get more than 254 elements, since it's already processed by doPolyText()
 | 
			
		||||
    int const bufsize = sizeof(xTextElt) + count;
 | 
			
		||||
    uint8_t *buffer = malloc(bufsize);
 | 
			
		||||
    xTextElt *elt = (xTextElt*)buffer;
 | 
			
		||||
    elt->len = count;
 | 
			
		||||
    elt->delta = 0;
 | 
			
		||||
    memcpy(buffer+2, string, count);
 | 
			
		||||
 | 
			
		||||
    xcb_poly_text_8(xnestUpstreamInfo.conn,
 | 
			
		||||
                    xnestDrawable(pDrawable),
 | 
			
		||||
                    xnestUpstreamGC(pGC),
 | 
			
		||||
                    x,
 | 
			
		||||
                    y,
 | 
			
		||||
                    bufsize,
 | 
			
		||||
                    (uint8_t*)buffer);
 | 
			
		||||
 | 
			
		||||
    free(buffer);
 | 
			
		||||
 | 
			
		||||
    width = XTextWidth(xnestFontStruct(pGC->font), string, count);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -332,8 +348,24 @@ xnestPolyText16(DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count,
 | 
			
		|||
{
 | 
			
		||||
    int width;
 | 
			
		||||
 | 
			
		||||
    XDrawString16(xnestDisplay, xnestDrawable(pDrawable), xnestGC(pGC),
 | 
			
		||||
                  x, y, (XChar2b *) string, count);
 | 
			
		||||
    // we need to prepend a xTextElt struct before our actual characters
 | 
			
		||||
    // won't get more than 254 elements, since it's already processed by doPolyText()
 | 
			
		||||
    int const bufsize = sizeof(xTextElt) + count*2;
 | 
			
		||||
    uint8_t *buffer = malloc(bufsize);
 | 
			
		||||
    xTextElt *elt = (xTextElt*)buffer;
 | 
			
		||||
    elt->len = count;
 | 
			
		||||
    elt->delta = 0;
 | 
			
		||||
    memcpy(buffer+2, string, count*2);
 | 
			
		||||
 | 
			
		||||
    xcb_poly_text_16(xnestUpstreamInfo.conn,
 | 
			
		||||
                     xnestDrawable(pDrawable),
 | 
			
		||||
                     xnestUpstreamGC(pGC),
 | 
			
		||||
                     x,
 | 
			
		||||
                     y,
 | 
			
		||||
                     bufsize,
 | 
			
		||||
                     buffer);
 | 
			
		||||
 | 
			
		||||
    free(buffer);
 | 
			
		||||
 | 
			
		||||
    width = XTextWidth16(xnestFontStruct(pGC->font), (XChar2b *) string, count);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue