wxWidgets/wxPython/tests/test_scaleText.py

72 lines
2.0 KiB
Python
Raw Normal View History

import wx
METHOD = 1
SCALE = 0.5
class TestPanel(wx.Panel):
"""
Shows some ways to scale text down
"""
def __init__(self, *args, **kw):
wx.Panel.__init__(self, *args, **kw)
self.Bind(wx.EVT_PAINT, self.OnPaint)
def OnPaint(self, evt):
pdc = wx.PaintDC(self)
font = wx.FFont(28, wx.SWISS)
pdc.SetFont(font)
txt = "Here is some text"
# draw the original unscaled text
pdc.DrawText(txt, 10, 10)
if METHOD == 0:
# Create a new font that is scaled
points = font.GetPointSize() * SCALE
font.SetPointSize(points)
pdc.SetFont(font)
pdc.DrawText(txt, 10, 100)
if METHOD == 1:
# Draw to a bitmap and scale that
w,h = pdc.GetTextExtent(txt)
bmp = wx.EmptyBitmap(w, h)
mdc = wx.MemoryDC(bmp)
mdc.SetBackground(wx.Brush(self.GetBackgroundColour()))
mdc.Clear()
mdc.SetFont(font)
mdc.DrawText(txt, 0,0)
del mdc
image = bmp.ConvertToImage()
image = image.Scale(w*SCALE, h*SCALE, wx.IMAGE_QUALITY_HIGH)
bmp = wx.BitmapFromImage(image)
bmp.SetMaskColour(self.GetBackgroundColour())
pdc.DrawBitmap(bmp, 10,100)
elif METHOD == 2:
# Just scale the DC and draw the text again
pdc.SetUserScale(SCALE, SCALE)
pdc.DrawText(txt, 10/SCALE, 100/SCALE)
elif METHOD == 3:
# Use a GraphicsContext for scaling. Since it uses a
# floating point coordinate system, it can be more
# accurate.
gc = wx.GraphicsContext.Create(pdc)
gc.Scale(SCALE, SCALE)
gc.SetFont(font)
gc.DrawText(txt, 10/SCALE, 100/SCALE)
app = wx.App()
frm = wx.Frame(None, title="test_scaleText")
pnl = TestPanel(frm)
frm.Show()
app.MainLoop()