Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re: font measurement

by BrowserUk (Pope)
on Jan 30, 2012 at 16:53 UTC ( #950804=note: print w/ replies, xml ) Need Help??


in reply to font measurement

You need to obtain a TK::Font object for the font you wish to use, then call the measure( $text ) method:

#! perl -slw use strict; use Tk; use Tk::Font; my $mw = MainWindow->new(); for my $name ( 'system' ) { #$mw->fontNames print "Using font $name"; my $font = $mw->fontCreate( $name ); for my $text ( 'The quick brown fox jumps over the lazy dog', 'THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG' ) { printf "$text measures %d pixels\n", $font->measure( $text ); } } __END__ C:\test>junk44 Using font system The quick brown fox jumps over the lazy dog measures 302 pixels THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG measures 409 pixels

See the Tk::Font POD for (a little) more info, then google for more.


With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

The start of some sanity?


Comment on Re: font measurement
Select or Download Code
Re^2: font measurement
by preahkumpii (Novice) on Jan 31, 2012 at 03:12 UTC
    Thank you for your help. Pardon the ignorance, but I have 3 questions:
    1. I don't understand this comment. Why is it there? #$mw->fontNames
    2. What is the use of the %d variable?
    3. Why was the command $font->measure( $text ) placed after the print command?
    UPDATE: I must be missing something. I thought I would put the name of the font of my choice from my system in place of the 'system' in your code. No matter what font I put there, even a very wide one like Trajan Pro, I get the same pixel width.

      Sorry. That's what I assumed also. If it doesn't work, then you'll need to look for more or better documentation than this.

      1. The comment was left there to show my failed attempt to find a list of available fonts.
      2. %d isn't a variable, See the documentation for printf.
      3. See the documentation for printf

      With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.

      The start of some sanity?

        Got it figured out. Here is the code:
        #!/user/bin/perl use warnings; use strict; use Tk; use Tk::Font; my $mw = MainWindow->new(); # window instance $mw->fontCreate('josh', -family=>'Arial', -size=>20); # give the fon +t instance an arbitrary name 'josh'; specify font family and size her +e my $sentence = "This is my sample sentence to measure."; my $length = $mw->fontMeasure('josh', $sentence); # use the arbitr +ary font name here with the text to measure print "Your sample sentence is $length pixels long in the specified fo +nt and size.\n";

        Basically, there are several keys. First, you assign the window instance to a variable. Then, you use that variable to create the instance of the font. You give the font an arbitrary name. The way you pick your font face is by giving a value to the 'family' option. This is better than specifying a ttf file or likewise (which you can't do anyhow) b/c you can also specify the font weight, etc., within that family (Arial bold, italic, etc.). You set the size and the font is ready to go. So to use the fontMeasure procedure, you simply refer to the font instance as you named it and give it a string. It returns the measurement in pixels.

        Thanks for all the help.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://950804]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (4)
As of 2014-10-21 00:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (93 votes), past polls