File: outline-test.py

package info (click to toggle)
freetype-py 2.5.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,976 kB
  • sloc: python: 7,676; makefile: 111
file content (101 lines) | stat: -rwxr-xr-x 3,928 bytes parent folder | download | duplicates (3)
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