diff options
-rw-r--r-- | unix/tkUnixFont.c | 4 | ||||
-rw-r--r-- | unix/tkUnixRFont.c | 80 | ||||
-rw-r--r-- | win/tkWinFont.c | 4 |
3 files changed, 84 insertions, 4 deletions
diff --git a/unix/tkUnixFont.c b/unix/tkUnixFont.c index a1b969e..c91da55 100644 --- a/unix/tkUnixFont.c +++ b/unix/tkUnixFont.c @@ -1413,7 +1413,6 @@ TkpDrawCharsInContext( rangeLength, x+widthUntilStart, y); } -/* UNTESTED */ void TkpDrawAngledCharsInContext( Display *display, /* Display on which to draw. */ @@ -1437,12 +1436,13 @@ TkpDrawAngledCharsInContext( double angle) /* What angle to put text at, in degrees. */ { int widthUntilStart; + double sinA = sin(angle * PI/180.0), cosA = cos(angle * PI/180.0); (void) numBytes; /*unused*/ Tk_MeasureChars(tkfont, source, rangeStart, -1, 0, &widthUntilStart); TkDrawAngledChars(display, drawable, gc, tkfont, source + rangeStart, - rangeLength, x+widthUntilStart, y, angle); + rangeLength, x+cosA*widthUntilStart, y-sinA*widthUntilStart, angle); } /* diff --git a/unix/tkUnixRFont.c b/unix/tkUnixRFont.c index 2c3d91f..069598f 100644 --- a/unix/tkUnixRFont.c +++ b/unix/tkUnixRFont.c @@ -1300,6 +1300,86 @@ TkDrawAngledChars( } } +/* + *--------------------------------------------------------------------------- + * + * TkpDrawCharsInContext -- + * + * Draw a string of characters on the screen like Tk_DrawChars(), but + * with access to all the characters on the line for context. On X11 this + * context isn't consulted, so we just call Tk_DrawChars(). + * + * Results: + * None. + * + * Side effects: + * Information gets drawn on the screen. + * + *--------------------------------------------------------------------------- + */ + +void +TkpDrawCharsInContext( + Display *display, /* Display on which to draw. */ + Drawable drawable, /* Window or pixmap in which to draw. */ + GC gc, /* Graphics context for drawing characters. */ + Tk_Font tkfont, /* Font in which characters will be drawn; + * must be the same as font used in GC. */ + const char *source, /* UTF-8 string to be displayed. Need not be + * '\0' terminated. All Tk meta-characters + * (tabs, control characters, and newlines) + * should be stripped out of the string that + * is passed to this function. If they are not + * stripped out, they will be displayed as + * regular printing characters. */ + int numBytes, /* Number of bytes in string. */ + int rangeStart, /* Index of first byte to draw. */ + int rangeLength, /* Length of range to draw in bytes. */ + int x, int y) /* Coordinates at which to place origin of the + * whole (not just the range) string when + * drawing. */ +{ + int widthUntilStart; + + (void) numBytes; /*unused*/ + + Tk_MeasureChars(tkfont, source, rangeStart, -1, 0, &widthUntilStart); + Tk_DrawChars(display, drawable, gc, tkfont, source + rangeStart, + rangeLength, x+widthUntilStart, y); +} + +void +TkpDrawAngledCharsInContext( + Display *display, /* Display on which to draw. */ + Drawable drawable, /* Window or pixmap in which to draw. */ + GC gc, /* Graphics context for drawing characters. */ + Tk_Font tkfont, /* Font in which characters will be drawn; must + * be the same as font used in GC. */ + const char * source, /* UTF-8 string to be displayed. Need not be + * '\0' terminated. All Tk meta-characters + * (tabs, control characters, and newlines) + * should be stripped out of the string that is + * passed to this function. If they are not + * stripped out, they will be displayed as + * regular printing characters. */ + int numBytes, /* Number of bytes in string. */ + int rangeStart, /* Index of first byte to draw. */ + int rangeLength, /* Length of range to draw in bytes. */ + double x, double y, /* Coordinates at which to place origin of the + * whole (not just the range) string when + * drawing. */ + double angle) /* What angle to put text at, in degrees. */ +{ + int widthUntilStart; + double sinA = sin(angle * PI/180.0), cosA = cos(angle * PI/180.0); + + (void) numBytes; /*unused*/ + + Tk_MeasureChars(tkfont, source, rangeStart, -1, 0, &widthUntilStart); + TkDrawAngledChars(display, drawable, gc, tkfont, source + rangeStart, + rangeLength, x+cosA*widthUntilStart, y-sinA*widthUntilStart, angle); +} + void TkUnixSetXftClipRegion( TkRegion clipRegion) /* The clipping region to install. */ diff --git a/win/tkWinFont.c b/win/tkWinFont.c index 39abda4..91f8f14 100644 --- a/win/tkWinFont.c +++ b/win/tkWinFont.c @@ -1402,7 +1402,6 @@ TkpDrawCharsInContext( rangeLength, x+widthUntilStart, y); } -/* UNTESTED */ void TkpDrawAngledCharsInContext( Display *display, /* Display on which to draw. */ @@ -1426,11 +1425,12 @@ TkpDrawAngledCharsInContext( double angle) /* What angle to put text at, in degrees. */ { int widthUntilStart; + double sinA = sin(angle * PI/180.0), cosA = cos(angle * PI/180.0); (void) numBytes; /*unused*/ Tk_MeasureChars(tkfont, source, rangeStart, -1, 0, &widthUntilStart); TkDrawAngledChars(display, drawable, gc, tkfont, source + rangeStart, - rangeLength, x+widthUntilStart, y, angle); + rangeLength, x+cosA*widthUntilStart, y-sinA*widthUntilStart, angle); } /* |