Re: How to compute font size ?
"'Chris Barker' via wxPython-dev" <[email protected]> Wed, 2 Jan 2019 21:43:54 -0800
| Newsgroups | gmane.comp.python.wxpython.devel |
|---|---|
| Message-ID | <CALGmxEJ-1zr=Yh046ZesFkr27MGnV7jBQx7Ryy_itCZ+7+G65g@mail.gmail.com> |
On Tue, Jan 1, 2019 at 9:53 AM Nicolas Pinault <[email protected]> wrote: > GetFullTextExtent() is usefull but not enought. > indeed -- there are complications that make it hard to do properly: Fonts do not, necessarily, scale directly with font size. So text in a 20 pt font is not exactly twice as big as text in a 10 pt font. But it's pretty close. I'm not sure I quite understand your use case, but I'd be tempted to get the font size close by assuming "typical" text -- and then use the actual text extent to center it. A little less precise, but easier. -CHB > 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]> 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]. >> 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] > -- > 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. > > > -- > 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. > -- 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] -- 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.