diff --git a/plug-ins/pygimp/plug-ins/Makefile.am b/plug-ins/pygimp/plug-ins/Makefile.am
index 747bfc3996..faa640a786 100644
--- a/plug-ins/pygimp/plug-ins/Makefile.am
+++ b/plug-ins/pygimp/plug-ins/Makefile.am
@@ -10,7 +10,8 @@ scripts = \
palette-to-gradient.py \
py-slice.py \
python-console.py \
- python-eval.py
+ python-eval.py \
+ text-brush.py
test_scripts = \
benchmark-foreground-extract.py \
diff --git a/plug-ins/pygimp/plug-ins/text-brush.py b/plug-ins/pygimp/plug-ins/text-brush.py
new file mode 100755
index 0000000000..0d3c633b97
--- /dev/null
+++ b/plug-ins/pygimp/plug-ins/text-brush.py
@@ -0,0 +1,97 @@
+#!/usr/bin/env python
+# coding: utf-8
+
+# Author: João Sebastião de Oliveira Bueno
+# Copyright: João S. O. Bueno (2009), licensed under the GPL v 3.0
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+from gimpfu import *
+import os
+
+gettext.install("gimp20-python", gimp.locale_directory, unicode=True)
+
+gimp_dir = ".gimp-%d.%d" %(gimp.version[:2])
+BRUSH_DIR = os.path.join(os.path.expanduser('~'),gimp_dir,'brushes')
+
+def text_brush(font_name, font_size, text):
+ pdb.gimp_context_push()
+ pdb.gimp_context_set_default_colors()
+
+ padding = font_size // 4
+ img = gimp.Image(font_size + padding, font_size + padding, GRAY)
+ img.undo_freeze()
+
+ text = text.decode("utf-8")
+ for letter in reversed(text):
+ layer = img.new_layer(fill_mode=BACKGROUND_FILL)
+ text_floating_sel = \
+ pdb.gimp_text_fontname(img, layer,
+ padding // 2,
+ padding // 2,
+ letter.encode("utf-8"),
+ 0,
+ True,
+ font_size,
+ PIXELS,
+ font_name)
+ if text_floating_sel:
+ #whitespace don't generate a floating sel.
+ pdb.gimp_edit_bucket_fill(text_floating_sel,
+ FG_BUCKET_FILL,
+ NORMAL_MODE, 100, 1.0,
+ False,0 ,0)
+ pdb.gimp_floating_sel_anchor(text_floating_sel)
+
+ file_name = (text.lower().replace(" ", "_") + ".gih").encode("utf-8")
+ file_path = os.path.join(BRUSH_DIR, file_name)
+
+ pdb.file_gih_save(img, img.layers[0],
+ file_path, file_path,
+ 100, #spacing
+ text, #description,
+ img.width, img.height,
+ 1, 1,
+ 1, #dimension
+ [len(text)], #rank - number of cells
+ 1, # dimension again - actual size for the
+ # array of the selection mode
+ ["incremental"])
+
+ pdb.gimp_brushes_refresh()
+ pdb.gimp_image_delete(img)
+ pdb.gimp_context_pop()
+
+register(
+ "text_brush",
+ N_("New brush with characters from a text sequence"),
+ """New dynamic brush where each cell is a character from
+the input text in the chosen font """,
+ "Joao S. O. Bueno",
+ "Copyright Joao S.O. Bueno 2009. GPL v3.0",
+ "2009",
+ N_("New _Brush from Text..."),
+ "",
+ [
+ (PF_FONT, "font", "Font","Sans"),
+ (PF_INT, "size", "Pixel Size", 50),
+ (PF_STRING, "text", "text",
+ "The GNU Image Manipulation Program")
+ ],
+ [],
+ text_brush,
+ menu="/File/Create",
+ domain=("gimp20-python", gimp.locale_directory)
+ )
+main()