[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] Text() class, a pygame.font.Font() helper classes



-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Having a proper text wrapper would be a godsend. I tried making my own
but that didn't end up well.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (MingW32)
Comment: http://getfiregpg.org

iD8DBQFJZ6CMaOkdBMkI09YRArMQAKCS4dK1IsaCMjiQ1dz342T8XE1hEgCff0B/
c7TWsJehQCjEdpR5j+Qf9rc=
=kr21
-----END PGP SIGNATURE-----

On Tue, Jan 6, 2009 at 8:19 AM, Jake b <ninmonkeys@xxxxxxxxx> wrote:
> I'm sure you have your own text wrappers. I think pygame should get some
> support. I'm thinking of having a Text() or TextGroup() that is similar to
> SpriteGroups().
>
> I have a Text() class that is a wrapper to pygame.font.Font(), and does some
> basic functions. It cache's the font.render() result, and uses cache on
> .draw(). It also only re-renders the text, if it has changed ( in color,
> size, text, font, etc... ) otherwise uses cache.
>
> The second class, FPSText() is a quick way to get a Text() object with the
> current FPS.
>
> I was going to make a TextGroup() that acts like a spritegroup, containing
> my Text() objects. I also planned a multi-line object, and the ability to
> have different colors in a single Text() line. ( think of standard RPG has a
> paragraph of text with certain words escaped with color codes ). Right now I
> need to improve the color methods to use multiple types of color definitions
> ( str, or tuple )
>
> [ In the future could maybe even make clickable links ( aka: url), that
> onclick() call a callback function defined on Text() creation. example:
> civilization in-game-help. )
>
> 1)  Is this something that pygame would add? ( I know theres a new dev
> version of pygame, but i'm not sure if it has anything like this. )
> 2)  Should I be using pygame.color.Color() OR pygame.Color() ? ( Or use
> either, they point to same class? )
> 3) Any feedback would be appreciated, thanks.
>
> Here is example usage of Text() and FPSText()
>
> Example usage:
>
>     in Game.init():
>         # create text, later change font
>         t = Text('foo')
>         t.match_font('arial')
>
>         # 2) use filepath to tff
>         t2 = Text('foo', font='ttf/freesansbold.ttf')
>         # 3) list of font names (without .ttf) to search OS for.
>         t3 = Text('foo', font='arial, verdana, foobar')
>
>         # set loc using alignment  [and optional offset ]
>         t = Text("align=topright,offset(x,y)", size=16,color="darkred")
>         t.align( "bottomleft", self.width, self.height)
>         t.align( "topright", self.width, self.height, (-60,80))
>
>         # usage in Game()
>         self.points = Text("Points: None!")
>         self.fps = FPSText()
>
>         # ... append a bunch of Text() objects to align_list
>         self.align_list = []
>         self.align_list.append( t1 )
>         self.align_list.append( t2 )
>         self.align_list.append( t3 )
>
>     in Game.draw(self):
>         self.points = "Points: %s" % ( player_points ) # caches if same
> value
>         self.text.draw()
>         self.fps.draw()
>         self.fps.tick()
>
>         for t in self.align_list: t.draw()
>
> [ note: the attached code has a module 'game', which is just a wrapper to
> boilerplate of a pygame game. makes test_text.py code simpler. ]
>