1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# -----------------------------------------------------------------------------
#
# FreeType high-level python API - Copyright 2011-2015 Nicolas P. Rougier
# Distributed under the terms of the new BSD license.
#
# -----------------------------------------------------------------------------
'''
Basic outline wrapper test
'''
from freetype import *
import ctypes
import contextlib
@contextlib.contextmanager
def new_outline(n_points, n_contours):
library = get_handle()
raw_ft_outline = FT_Outline()
err = FT_Outline_New(
library, FT_UInt(n_points), FT_Int(n_contours),
ctypes.byref(raw_ft_outline)
)
if err: raise FT_Exception(err)
try:
raw_ft_outline.n_points = 0
raw_ft_outline.n_contours = 0
yield Outline(raw_ft_outline)
finally:
FT_Outline_Done(library, ctypes.byref(raw_ft_outline))
if __name__ == '__main__':
face = Face('./Vera.ttf')
face.set_char_size( 4*48*64 )
flags = FT_LOAD_DEFAULT | FT_LOAD_NO_BITMAP
face.load_char('S', flags )
slot = face.glyph
outline = slot.outline
bbox = outline.get_bbox()
cbox = outline.get_cbox()
assert (bbox.xMin, bbox.yMin, bbox.xMax, bbox.yMax) == \
(810, -192, 7116, 9152)
assert (cbox.xMin, cbox.yMin, cbox.xMax, cbox.yMax) == \
(810, -192, 7116, 9152)
assert outline.get_outside_border() == 0
assert outline.get_inside_border() == 1
assert len(outline.contours) == 1
assert len(outline.points) == 40
assert len(outline.tags) == 40
stroker = Stroker()
stroker.set(64, FT_STROKER_LINECAP_ROUND, FT_STROKER_LINEJOIN_ROUND, 0)
stroker.parse_outline(outline, False)
n_points, n_contours = stroker.get_counts()
with new_outline(n_points, n_contours) as stroked_outline:
stroker.export(stroked_outline)
bbox = stroked_outline.get_bbox()
cbox = stroked_outline.get_cbox()
assert (bbox.xMin, bbox.yMin, bbox.xMax, bbox.yMax) == \
(746, -256, 7180, 9216)
assert (cbox.xMin, cbox.yMin, cbox.xMax, cbox.yMax) == \
(746, -256, 7180, 9216)
assert stroked_outline.get_outside_border() == 0
assert stroked_outline.get_inside_border() == 1
assert len(stroked_outline.contours) == 2
assert len(stroked_outline.points) == 225
assert len(stroked_outline.tags) == 225
border = outline.get_outside_border()
n_points, n_contours = stroker.get_border_counts(border)
with new_outline(n_points, n_contours) as outer_outline:
stroker.export_border(border, outer_outline)
bbox = outer_outline.get_bbox()
cbox = outer_outline.get_cbox()
assert (bbox.xMin, bbox.yMin, bbox.xMax, bbox.yMax) == \
(746, -256, 7180, 9216)
assert (cbox.xMin, cbox.yMin, cbox.xMax, cbox.yMax) == \
(746, -256, 7180, 9216)
assert outer_outline.get_outside_border() == 0
assert outer_outline.get_inside_border() == 1
assert len(outer_outline.contours) == 1
assert len(outer_outline.points) == 121
assert len(outer_outline.tags) == 121
border = outline.get_inside_border()
n_points, n_contours = stroker.get_border_counts(border)
with new_outline(n_points, n_contours) as inner_outline:
stroker.export_border(border, inner_outline)
bbox = inner_outline.get_bbox()
cbox = inner_outline.get_cbox()
assert (bbox.xMin, bbox.yMin, bbox.xMax, bbox.yMax) == \
(813, -128, 7052, 9088)
assert (cbox.xMin, cbox.yMin, cbox.xMax, cbox.yMax) == \
(813, -128, 7052, 9088)
assert inner_outline.get_outside_border() == 1
assert inner_outline.get_inside_border() == 0
assert len(inner_outline.contours) == 1
assert len(inner_outline.points) == 104
assert len(inner_outline.tags) == 104
|