summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--unix/tkUnixFont.c4
-rw-r--r--unix/tkUnixRFont.c80
-rw-r--r--win/tkWinFont.c4
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);
}
/*