Re: How to compute font size ?
Nicolas Pinault <[email protected]> Tue, 1 Jan 2019 18:53:36 +0100
| Newsgroups | gmane.comp.python.wxpython.devel |
|---|---|
| Message-ID | <[email protected]> |
Le 01/01/2019 à 18:03, 'Chris Barker' via wxPython-dev a écrit :
> https://wxpython.org/Phoenix/docs/html/wx.GraphicsContext.html#wx.GraphicsContext.GetFullTextExtent
>
> -CHB
GetFullTextExtent() is usefull but not enought.
I tried several methods. I ended with the following code :
def _set_overlay(self, win, text, colour=(192, 192, 192)):
dc = wx.ClientDC(win)
odc = wx.DCOverlay(self.overlay, dc)
odc.Clear()
ctx = wx.GraphicsContext.Create(dc)
ctx_size = ctx.GetSize() # Get
window size
col = wx.Colour(*colour, 128) # Add alpha
to colour
brush = ctx.CreateBrush(wx.Brush(wx.Colour((0,0,0,128)))) #
Create background brush with alpha
fnt = wx.Font(wx.FontInfo(10).FaceName("Arial")) # Create
font with size 10
font = ctx.CreateFont(fnt, col=col) # Create
graphics font
ctx.SetFont(font) # Use graphics font
txt_size = ctx.GetFullTextExtent(text) # Get text size
scale = (ctx_size[0] / 3) / txt_size[0] # Compute
scale (text is third the width of the window)
fnt.Scale(scale) # Scale font
font = ctx.CreateFont(fnt, col=col) # Create
new graphics font
ctx.SetFont(font) # Use new graphicsfont
txt_size = ctx.GetFullTextExtent(text) # Get new
text size
ctx.DrawText(text, (ctx_size[0]-txt_size[0])/2,
(ctx_size[1]-txt_size[1])/2, brush) # Draw text (centered)
del odc
So : Create a font of size 10, determine the text width with this font
size, scale the font, and draw with the scaled font.
Nicolas
>
>
> On Fri, Dec 28, 2018 at 2:40 PM Nicolas Pinault <[email protected]
> <mailto:[email protected]>> wrote:
>
> Hi,
>
> In my app, I have a window(a panel) where I write some text as an
> overlay :
>
> def _set_overlay(self, win, text, colour=(192, 192, 192)):
> dc = wx.ClientDC(win)
> odc = wx.DCOverlay(self.overlay, dc)
> odc.Clear()
> ctx = wx.GraphicsContext.Create(dc)
> col = wx.Colour(*colour, 128)
> brush = ctx.CreateBrush(wx.Brush(wx.Colour((0,0,0,128))))
> font = ctx.CreateFont(10, "ARIAL",
> flags=wx.FONTFLAG_DEFAULT,
> col=col)
> ctx.SetFont(font)
> ctx.DrawText(text, 10, 10, brush)
> del odc
>
> For now, the font size is fixed. I'd like to compute the font size to
> make the text half the width of the window.
> What is the best way to compute the font size ?
>
> Regards,
> Nicolas
>
> --
> You received this message because you are subscribed to the Google
> Groups "wxPython-dev" group.
> To unsubscribe from this group and stop receiving emails from it,
> send an email to [email protected]
> <mailto:wxPython-dev%[email protected]>.
> For more options, visit https://groups.google.com/d/optout.
>
>
>
> --
>
> Christopher Barker, Ph.D.
> Oceanographer
>
> Emergency Response Division
> NOAA/NOS/OR&R (206) 526-6959 voice
> 7600 Sand Point Way NE (206) 526-6329 fax
> Seattle, WA 98115 (206) 526-6317 main reception
>
> [email protected] <mailto:[email protected]>
> --
> You received this message because you are subscribed to the Google
> Groups "wxPython-dev" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to [email protected]
> <mailto:[email protected]>.
> For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "wxPython-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
For more options, visit https://groups.google.com/d/optout.