]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/wx/lib/fancytext.py
Added Changer classes
[wxWidgets.git] / wxPython / wx / lib / fancytext.py
index d6f751bd86d961d738b14d10842fc1024deb09c3..df7772e94b0697c77f2d0eac29f5c4dedde0bbbb 100644 (file)
@@ -1,44 +1,50 @@
-"""<font weight="bold" size="16">FancyText</font> -- <font style="italic" size="16">methods for rendering XML specified text</font>
-<font family="swiss" size="12">
+# 12/02/2003 - Jeff Grimmett (grimmtooth@softhome.net)
+#
+# o Updated for 2.5 compatability.
+#
+
+"""
+FancyText -- methods for rendering XML specified text
+
 This module exports four main methods::
-<font family="fixed" style="slant">
+
     def GetExtent(str, dc=None, enclose=True)
     def GetFullExtent(str, dc=None, enclose=True)
     def RenderToBitmap(str, background=None, enclose=True)
     def RenderToDC(str, dc, x, y, enclose=True)
-</font>
-In all cases, 'str' is an XML string. Note that start and end tags
-are only required if *enclose* is set to False. In this case the 
-text should be wrapped in FancyText tags.
+
+In all cases, 'str' is an XML string. Note that start and end tags are
+only required if *enclose* is set to False. In this case the text
+should be wrapped in FancyText tags.
 
 In addition, the module exports one class::
-<font family="fixed" style="slant">
+
     class StaticFancyText(self, window, id, text, background, ...)
-</font>
-This class works similar to StaticText except it interprets its text 
+
+This class works similar to StaticText except it interprets its text
 as FancyText.
 
-The text can support<sup>superscripts</sup> and <sub>subscripts</sub>, text
-in different <font size="20">sizes</font>, <font color="blue">colors</font>, <font style="italic">styles</font>, <font weight="bold">weights</font> and
-<font family="script">families</font>. It also supports a limited set of symbols,
-currently <times/>, <infinity/>, <angle/> as well as greek letters in both
-upper case (<Alpha/><Beta/>...<Omega/>) and lower case (<alpha/><beta/>...<omega/>).
+The text can support superscripts and subscripts, text in different
+sizes, colors, styles, weights and families. It also supports a
+limited set of symbols, currently *times*, *infinity*, *angle* as well
+as greek letters in both upper case (*Alpha* *Beta*... *Omega*) and
+lower case (*alpha* *beta*... *omega*).
 
-We can use doctest/guitest to display this string in all its marked up glory.
-<font family="fixed">
 >>> frame = wx.Frame(wx.NULL, -1, "FancyText demo", wx.DefaultPosition)
->>> sft = StaticFancyText(frame, -1, __doc__, wx.Brush("light grey", wx.SOLID))
+>>> sft = StaticFancyText(frame, -1, testText, wx.Brush("light grey", wx.SOLID))
 >>> frame.SetClientSize(sft.GetSize())
 >>> didit = frame.Show()
 >>> from guitest import PauseTests; PauseTests()
 
-</font></font>
-The End"""
+"""
+
 # Copyright 2001-2003 Timothy Hochberg
-# Use as you see fit. No warantees, I cannot be help responsible, etc.
+# Use as you see fit. No warantees, I cannot be held responsible, etc.
+
 import copy
 import math
 import sys
+
 import wx
 import xml.parsers.expat
 
@@ -195,18 +201,19 @@ class Renderer:
 
     def getCurrentFont(self):
         font = self.fonts[-1]
-        return wx.TheFontList.FindOrCreateFont(font.get("size", self.defaultSize),
-                             font.get("family", self.defaultFamily),
-                             font.get("style", self.defaultStyle),
-                             font.get("weight", self.defaultWeight),
-                             encoding = font.get("encoding", self.defaultEncoding))
+        return wx.Font(font.get("size", self.defaultSize),
+                       font.get("family", self.defaultFamily),
+                       font.get("style", self.defaultStyle),
+                       font.get("weight",self.defaultWeight),
+                       False, "",
+                       font.get("encoding", self.defaultEncoding))
 
     def getCurrentColor(self):
         font = self.fonts[-1]
         return wx.TheColourDatabase.FindColour(font.get("color", self.defaultColor))
         
     def getCurrentPen(self):
-        return wx.ThePenList.FindOrCreatePen(self.getCurrentColor(), 1, wx.SOLID)
+        return wx.Pen(self.getCurrentColor(), 1, wx.SOLID)
         
     def renderCharacterData(self, data, x, y):
         raise NotImplementedError()
@@ -269,15 +276,15 @@ class DCRenderer(Renderer):
 
     def renderCharacterData(self, data, x, y):
         self.dc.SetTextForeground(self.getCurrentColor())
-        self.dc.DrawText(data, (x, y))
+        self.dc.DrawText(data, x, y)
 
     def start_angle(self, attrs):
         self.dc.SetFont(self.getCurrentFont())
         self.dc.SetPen(self.getCurrentPen())
         width, height, descent, leading = self.dc.GetFullTextExtent("M")
         y = self.y + self.offsets[-1]
-        self.dc.DrawLine((iround(self.x), iround(y)), (iround( self.x+width), iround(y))) 
-        self.dc.DrawLine((iround(self.x), iround(y)), (iround(self.x+width), iround(y-width)))
+        self.dc.DrawLine(iround(self.x), iround(y), iround( self.x+width), iround(y))
+        self.dc.DrawLine(iround(self.x), iround(y), iround(self.x+width), iround(y-width))
         self.updateDims(width, height, descent, leading)
       
 
@@ -293,8 +300,8 @@ class DCRenderer(Renderer):
         r = iround( 0.95 * width / 4)
         xc = (2*self.x + width) / 2
         yc = iround(y-1.5*r)
-        self.dc.DrawCircle((xc - r, yc), r)
-        self.dc.DrawCircle((xc + r, yc), r)
+        self.dc.DrawCircle(xc - r, yc, r)
+        self.dc.DrawCircle(xc + r, yc, r)
         self.updateDims(width, height, 0, 0)
 
     def start_times(self, attrs):
@@ -305,8 +312,8 @@ class DCRenderer(Renderer):
         width *= 0.8
         width = iround(width+.5)
         self.dc.SetPen(wx.Pen(self.getCurrentColor(), 1))
-        self.dc.DrawLine((iround(self.x), iround(y-width)), (iround(self.x+width-1), iround(y-1)))
-        self.dc.DrawLine((iround(self.x), iround(y-2)), (iround(self.x+width-1), iround(y-width-1)))
+        self.dc.DrawLine(iround(self.x), iround(y-width), iround(self.x+width-1), iround(y-1))
+        self.dc.DrawLine(iround(self.x), iround(y-2), iround(self.x+width-1), iround(y-width-1))
         self.updateDims(width, height, 0, 0)
 
 
@@ -343,6 +350,9 @@ def GetFullExtent(str, dc=None, enclose=True):
 def RenderToBitmap(str, background=None, enclose=1):
     "Return str rendered on a minumum size bitmap"
     dc = wx.MemoryDC()
+    # Chicken and egg problem, we need a bitmap in the DC in order to
+    # measure how big the bitmap should be...
+    dc.SelectObject(wx.EmptyBitmap(1,1))
     width, height, dy = GetFullExtent(str, dc, enclose)
     bmp = wx.EmptyBitmap(width, height)
     dc.SelectObject(bmp)
@@ -395,11 +405,49 @@ renderToDC = RenderToDC
 # Test Driver
 
 def test():
-    app = wx.PyApp()
+    testText = \
+"""<font weight="bold" size="16">FancyText</font> -- <font style="italic" size="16">methods for rendering XML specified text</font>
+<font family="swiss" size="12">
+This module exports four main methods::
+<font family="fixed" style="slant">
+    def GetExtent(str, dc=None, enclose=True)
+    def GetFullExtent(str, dc=None, enclose=True)
+    def RenderToBitmap(str, background=None, enclose=True)
+    def RenderToDC(str, dc, x, y, enclose=True)
+</font>
+In all cases, 'str' is an XML string. Note that start and end tags
+are only required if *enclose* is set to False. In this case the 
+text should be wrapped in FancyText tags.
+
+In addition, the module exports one class::
+<font family="fixed" style="slant">
+    class StaticFancyText(self, window, id, text, background, ...)
+</font>
+This class works similar to StaticText except it interprets its text 
+as FancyText.
+
+The text can support<sup>superscripts</sup> and <sub>subscripts</sub>, text
+in different <font size="20">sizes</font>, <font color="blue">colors</font>, <font style="italic">styles</font>, <font weight="bold">weights</font> and
+<font family="script">families</font>. It also supports a limited set of symbols,
+currently <times/>, <infinity/>, <angle/> as well as greek letters in both
+upper case (<Alpha/><Beta/>...<Omega/>) and lower case (<alpha/><beta/>...<omega/>).
+
+We can use doctest/guitest to display this string in all its marked up glory.
+<font family="fixed">
+>>> frame = wx.Frame(wx.NULL, -1, "FancyText demo", wx.DefaultPosition)
+>>> sft = StaticFancyText(frame, -1, __doc__, wx.Brush("light grey", wx.SOLID))
+>>> frame.SetClientSize(sft.GetSize())
+>>> didit = frame.Show()
+>>> from guitest import PauseTests; PauseTests()
+
+</font></font>
+The End"""
+
+    app = wx.PySimpleApp()
     box = wx.BoxSizer(wx.VERTICAL)
-    frame = wx.Frame(wx.NULL, -1, "FancyText demo", wx.DefaultPosition)
+    frame = wx.Frame(None, -1, "FancyText demo", wx.DefaultPosition)
     frame.SetBackgroundColour("light grey")
-    sft = StaticFancyText(frame, -1, __doc__)
+    sft = StaticFancyText(frame, -1, testText)
     box.Add(sft, 1, wx.EXPAND)
     frame.SetSizer(box)
     frame.SetAutoLayout(True)