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.