X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d14a1e28567de23c586bc80017073d0c39f8d18f..aa0ff209bc82d0f7c48263bb28609769d09f051b:/wxPython/wx/lib/fancytext.py diff --git a/wxPython/wx/lib/fancytext.py b/wxPython/wx/lib/fancytext.py index d6f751bd86..df7772e94b 100644 --- a/wxPython/wx/lib/fancytext.py +++ b/wxPython/wx/lib/fancytext.py @@ -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)