extra/pygame_font_render_glyph.patch
changeset 56 282a07d20680
parent 55 1ab0edd5d784
child 57 911927edbdde
--- a/extra/pygame_font_render_glyph.patch	Mon Jan 07 00:23:45 2013 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,109 +0,0 @@
-# Add Font.render_glyph() method to PyGame.
-#
-# This is nicer than full string rendering, as Tuikit renders screen
-# one character at the time and render_glyph is optimized for caching.
-# See documentation for TTF_RenderGlyph_Shaded and TTF_GlyphMetrics.
-#
-# Radek Brich <radek.brich@devl.cz>
-diff -rupd pygame-1.9.1release/src/font.c pygame-1.9.1release-my/src/font.c
---- pygame-1.9.1release/src/font.c	2009-06-17 01:18:34.000000000 +0200
-+++ pygame-1.9.1release-my/src/font.c	2011-10-09 23:19:46.000000000 +0200
-@@ -371,6 +371,78 @@ font_render (PyObject* self, PyObject* a
- }
- 
- static PyObject*
-+font_render_glyph (PyObject* self, PyObject* args)
-+{
-+    TTF_Font* font = PyFont_AsFont (self);
-+    int aa;
-+    PyObject* text, *final;
-+    PyObject* fg_rgba_obj, *bg_rgba_obj = NULL;
-+    Uint8 rgba[4];
-+    SDL_Surface* surf;
-+    SDL_Color foreg, backg;
-+
-+    if (!PyArg_ParseTuple (args, "OiO|O", &text, &aa, &fg_rgba_obj,
-+                           &bg_rgba_obj))
-+        return NULL;
-+
-+    if (!RGBAFromColorObj (fg_rgba_obj, rgba))
-+        return RAISE (PyExc_TypeError, "Invalid foreground RGBA argument");
-+    foreg.r = rgba[0];
-+    foreg.g = rgba[1];
-+    foreg.b = rgba[2];
-+    if (bg_rgba_obj)
-+    {
-+        if (!RGBAFromColorObj (bg_rgba_obj, rgba))
-+            return RAISE (PyExc_TypeError, "Invalid background RGBA argument");
-+        backg.r = rgba[0];
-+        backg.g = rgba[1];
-+        backg.b = rgba[2];
-+        backg.unused = 0;
-+    }
-+    else
-+    {
-+        backg.r = 0;
-+        backg.g = 0;
-+        backg.b = 0;
-+        backg.unused = 0;
-+    }
-+
-+    if (PyUnicode_Check (text) && PyObject_Length (text) == 1)
-+    {
-+        Py_UNICODE *buf = PyUnicode_AsUnicode (text);
-+        Uint16 ch = (Uint16) buf[0];
-+
-+        if (aa)
-+        {
-+            if (!bg_rgba_obj)
-+                surf = TTF_RenderGlyph_Blended (font, ch, foreg);
-+            else
-+                surf = TTF_RenderGlyph_Shaded (font, ch, foreg, backg);
-+        }
-+        else
-+            surf = TTF_RenderGlyph_Solid (font, ch, foreg);
-+    }
-+    else
-+        return RAISE (PyExc_TypeError, "char must be string of exactly one unicode character");
-+
-+    if (!surf)
-+        return RAISE (PyExc_SDLError, TTF_GetError());
-+
-+    if (!aa && bg_rgba_obj) /*turn off transparancy*/
-+    {
-+        SDL_SetColorKey (surf, 0, 0);
-+        surf->format->palette->colors[0].r = backg.r;
-+        surf->format->palette->colors[0].g = backg.g;
-+        surf->format->palette->colors[0].b = backg.b;
-+    }
-+
-+    final = PySurface_New (surf);
-+    if (!final)
-+        SDL_FreeSurface (surf);
-+    return final;
-+}
-+
-+static PyObject*
- font_size (PyObject* self, PyObject* args)
- {
-     TTF_Font* font = PyFont_AsFont (self);
-@@ -509,6 +581,7 @@ static PyMethodDef font_methods[] =
- 
-     { "metrics", font_metrics, METH_VARARGS, DOC_FONTMETRICS },
-     { "render", font_render, METH_VARARGS, DOC_FONTRENDER },
-+    { "render_glyph", font_render_glyph, METH_VARARGS, DOC_FONTRENDERGLYPH },
-     { "size", font_size, METH_VARARGS, DOC_FONTSIZE },
- 
-     { NULL, NULL, 0, NULL }
-diff -rupd pygame-1.9.1release/src/pygamedocs.h pygame-1.9.1release-my/src/pygamedocs.h
---- pygame-1.9.1release/src/pygamedocs.h	2009-06-19 08:20:25.000000000 +0200
-+++ pygame-1.9.1release-my/src/pygamedocs.h	2011-10-09 23:27:34.000000000 +0200
-@@ -299,6 +299,8 @@
- 
- #define DOC_FONTRENDER "Font.render(text, antialias, color, background=None): return Surface\ndraw text on a new Surface"
- 
-+#define DOC_FONTRENDERGLYPH "Font.render_glyph(char, antialias, color, background=None): return Surface\ndraw glyph of char on a new Surface"
-+
- #define DOC_FONTSIZE "Font.size(text): return (width, height)\ndetermine the amount of space needed to render text"
- 
- #define DOC_FONTSETUNDERLINE "Font.set_underline(bool): return None\ncontrol if text is rendered with an underline"