Re: How to compute font size ?
Nicolas Pinault <[email protected]> Fri, 4 Jan 2019 22:41:58 +0100
| Newsgroups | gmane.comp.python.wxpython.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi Chris, Le 03/01/2019 à 06:43, 'Chris Barker' via wxPython-dev a écrit : > On Tue, Jan 1, 2019 at 9:53 AM Nicolas Pinault <[email protected] > <mailto:[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. In my function, a text (parameter of the function) is displayed centered in a window. The text width is one third of the window width. The problem is to compute the font size to make the text the correct width. I tried to compute the font size without success. Using a font of size 10 then scaling it works. Nicolas > > 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] >> <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] > <mailto:[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.