Join Now
Quality Rating:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)
Expertise Level:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)

This page was last modified 22:43, 7 July 2008.

Font On Image Using Pys60

From Forum Nokia Wiki


With the launch of new version of PyS60 i.e. 1.4.4, font on an image is a very easy task. The code snippet below shows an example of that.

# Copyright (c) 2008 Nokia Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
 
from appuifw import *
from graphics import *
import e32
import time
 
app.body=c=Canvas()
 
fonts=[None,
       (None,20),
       'normal',
       ('normal',20),
       (u'fasfsafs',20),
       (u'Nokia Sans S60',10,0),
       (u'Nokia Sans S60',20),
       'dense',
       'title',
       (None,10,FONT_BOLD),
       (None,10,FONT_ITALIC),
       (None,10,FONT_ANTIALIAS),
       (None,10,FONT_NO_ANTIALIAS),
       ('normal',None,FONT_BOLD),
       ('normal',None,FONT_ITALIC),
       ('normal',None,FONT_NO_ANTIALIAS)      
       ]
 
def font_canvas():
    app.body=c=Canvas()
    c.clear()
    tl=(0,0)
    for font in fonts:
        text_to_draw=u'font:'+str(font)
        (bbox,advance,ichars)=c.measure_text(text_to_draw, font=font)
        print bbox, advance, ichars    
        # position the next piece of text so the top-left corner of its bounding box is at tl.    
        o=(tl[0]-bbox[0],tl[1]-bbox[1])
        # Draw the bounding box of the text as returned by measure_text
        c.rectangle((o[0]+bbox[0],o[1]+bbox[1],o[0]+bbox[2],o[1]+bbox[3]),outline=0x00ff00) 
        c.text(o, text_to_draw, font=font)                
        # Compute the new top-left.
        tl=(0,o[1]+bbox[3])
 
def font_image():   
    app.body=c=Canvas()
    image = Image.new(c.size) # create an image
    image.clear(0)
    y = 20    
    for font in fonts:
        text_to_draw=u'font:'+str(font)
        # Draw the full text
        image.text((0, y), text_to_draw, fill = 0x0000ff, font = font) # blue text on the image
        y += 25
        c.blit(image) # copy the image's contents to the lower part of the canvas
 
def measure_text():
    app.body=c=Canvas()
    c.clear()
    tl=(0,0)
    font='normal'
    for maxwidth in (50,100,150,200,250):
        text_to_draw=u'Lorem ipsum dolor sit amet'
        (bbox,advance,maxchars)=c.measure_text(text_to_draw, font=font, maxwidth=maxwidth)
        print bbox, advance, maxchars
        # Position the next piece of text so the top-left corner of its bounding box is at tl.    
        o=(tl[0]-bbox[0],tl[1]-bbox[1])
        # Draw the bounding box of the text as returned by measure_text
        c.rectangle((o[0]+bbox[0],o[1]+bbox[1],o[0]+bbox[2],o[1]+bbox[3]),outline=0x00ff00) 
        # Draw the maximum width specification line.
        c.line((tl[0],tl[1]+10,tl[0]+maxwidth,tl[1]+10), outline=0xff0000)
        # Draw the full text
        c.text(o, text_to_draw, font=font, fill=0x000080)                
        # Draw the text limited to given number of chars.
        c.text(o, text_to_draw[0:maxchars], font=font, fill=0)                
        # Compute the new top-left.
        tl=(0,o[1]+bbox[3]+3)
 
def font_benchmark():
    app.body=c=Canvas()
    c.clear()
    tl=(0,0)
    font='normal'
    text=u'Lorem ipsum dolor sit amet'
    def bench(name, func):
        start=time.time()
        func()
        end=time.time()
        print "%s: %d s"%(name,end-start)
    def default_font_test(c,t):
        for k in range(1000):
            c.text((0,30),t)        
    bench("default font", lambda:default_font_test(c,text))    
 
def font_attributes():
    app.body=c=Canvas()
    c.clear()
    y=20
    for font in [(None,None,0),
                 (None,None,FONT_ITALIC),
                 (None,None,FONT_BOLD),
                 (None,None,FONT_ITALIC|FONT_BOLD),
                 (None,None,FONT_ANTIALIAS),
                 (None,None,FONT_SUPERSCRIPT),
                 (None,None,FONT_SUBSCRIPT),
                 (None,None,FONT_NO_ANTIALIAS)]:
        c.text((20,y), u'abcd '+str(font), font=font)
        y+=20
 
 
def font_text():
    app.body=t=Text()
    for font in fonts:
        t.font=None
        t.add(u'font:'+str(font))
        t.font=font
        t.add(u'abcd1234')
        
        
 
lock=e32.Ao_lock()
app.screen='full'
app.exit_key_handler=lock.signal
 
app.menu=[(u'Fonts on canvas', font_canvas),
          (u'Fonts on image', font_image),
          (u'Measure text', measure_text),
          (u'Font attributes', font_attributes),
          (u'Font benchmark', font_benchmark),
          (u'Fonts on Text', font_text)]
font_canvas()
lock.wait()
Related Discussions
Thread Thread Starter Forum Replies Last Post
API providing font mailkamlesh General Symbian C++ 4 2006-08-25 16:15
problem with CFont .. karanala General Symbian C++ 4 2007-03-07 07:01
Container Font moja_a General Symbian C++ 4 2008-03-31 07:30
How to query the available font (typeface and point size) in S60 phone and then use t Wah General Symbian C++ 1 2006-01-25 12:13
Create font of any size? space2 Mobile Java Media (Graphics & Sounds) 5 2007-02-07 08:52
 
Powered by MediaWiki
     
     RDF Facets:
     
     
     qfnZtopicQUqfnTopicZpythonQ
     qfnZtopicQUqfnTopicZseriesE5f60Q
     qfnZtypeQUqfnTypeZCommunityContentQ
     qfnZtypeQUqfnTypeZWebpageQ
     qfnZtypeQUqfnTypeZWikiContentQ
     qmarsZlanguageQUxhttpE3aE2fE2fswE2enokiaE2ecomE2flanguageE2d1E2fenX