#! /usr/bin/env python
import cairo
from math import pi, sqrt
class Tips(object):
def __init__(self, filename, width, height):
self.surface = cairo.SVGSurface(filename + '.svg', width, height)
cr = self.cr = cairo.Context(self.surface)
cr.scale(width, height)
cr.select_font_face("Sans", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD)
self.draw_dest(cr)
self.surface.write_to_png(filename + '.png')
cr.show_page()
self.surface.finish()
class TextLetterAlign(Tips):
def draw_dest(self, cr):
cr.scale(1.0/26, 1.0)
cr.set_font_size(0.8)
for cx, letter in enumerate('AbCdEfGhIjKlMnOpQrStUvWxYz'): #center
xbearing, ybearing, width, height, xadvance, yadvance = ( #center
cr.text_extents(letter)) #center
cr.move_to(cx + 0.5 - xbearing - width / 2, #center
0.5 - ybearing - height / 2) #center
cr.show_text(letter) #center
class TextFontAlign(Tips):
def draw_dest(self, cr):
cr.scale(1.0/26, 1.0)
cr.set_font_size(0.8)
fascent, fdescent, fheight, fxadvance, fyadvance = cr.font_extents() #baseline
for cx, letter in enumerate('AbCdEfGhIjKlMnOpQrStUvWxYz'): #baseline
xbearing, ybearing, width, height, xadvance, yadvance = ( #baseline
cr.text_extents(letter)) #baseline
cr.move_to(cx + 0.5 - xbearing - width / 2, #baseline
0.5 - fdescent + fheight / 2) #baseline
cr.show_text(letter) #baseline
class Ellipse(Tips):
def draw_dest(self, cr):
cr.set_line_width(0.1)
cr.save() #deform
cr.scale(0.5, 1) #deform
cr.arc(0.5, 0.5, 0.40, 0, 2 * pi) #deform
cr.stroke() #deform
#deform
cr.translate(1, 0) #deform
cr.arc(0.5, 0.5, 0.40, 0, 2 * pi) #deform
cr.restore() #deform
cr.stroke() #deform
if __name__ == '__main__':
size = 120
TextLetterAlign('tips-letter', 26 * size/4, size / 4)
TextFontAlign('tips-font', 26 * size/4, size / 4)
Ellipse('tips-ellipse', size, size)