-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathfonts-and-faces-variable.html
111 lines (111 loc) · 5.68 KB
/
fonts-and-faces-variable.html
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
102
103
104
105
106
107
108
109
110
111
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Working with OpenType Variable Fonts: HarfBuzz Manual</title>
<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="HarfBuzz Manual">
<link rel="up" href="fonts-and-faces.html" title="Fonts, faces, and output">
<link rel="prev" href="fonts-and-faces-native-opentype.html" title="Font objects and HarfBuzz's native OpenType implementation">
<link rel="next" href="glyphs-and-rendering.html" title="Glyphs and rendering">
<meta name="generator" content="GTK-Doc V1.34.0 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
<td width="100%" align="left" class="shortcuts"></td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="fonts-and-faces.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
<td><a accesskey="p" href="fonts-and-faces-native-opentype.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
<td><a accesskey="n" href="glyphs-and-rendering.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="fonts-and-faces-variable"></a>Working with OpenType Variable Fonts</h2></div></div></div>
<p>
If you are working with OpenType Variable Fonts, there are a few
additional functions you should use to specify the
variation-axis settings of your font object. Without doing so,
your variable font's font object can still be used, but only at
the default setting for every axis (which, of course, is
sometimes what you want, but does not cover general usage).
</p>
<p>
HarfBuzz manages variation settings in the
<span class="type">hb_variation_t</span> data type, which holds a <span class="property">tag</span> for the
variation-axis identifier tag and a <span class="property">value</span> for its
setting. You can retrieve the list of variation axes in a font
binary from the face object (not from a font object, notably) by
calling <code class="function">hb_ot_var_get_axis_count(face)</code> to
find the number of axes, then using
<code class="function">hb_ot_var_get_axis_infos()</code> to collect the
axis structures:
</p>
<pre class="programlisting">
axes = hb_ot_var_get_axis_count(face);
...
hb_ot_var_get_axis_infos(face, 0, axes, axes_array);
</pre>
<p>
For each axis returned in the array, you can can access the
identifier in its <span class="property">tag</span>. HarfBuzz also has
tag definitions predefined for the five standard axes specified
in OpenType (<code class="literal">ital</code> for italic,
<code class="literal">opsz</code> for optical size,
<code class="literal">slnt</code> for slant, <code class="literal">wdth</code> for
width, and <code class="literal">wght</code> for weight). Each axis also
has a <span class="property">min_value</span>, a
<span class="property">default_value</span>, and a <span class="property">max_value</span>.
</p>
<p>
To set your font object's variation settings, you call the
<code class="function">hb_font_set_variations()</code> function with an
array of <span class="type">hb_variation_t</span> variation settings. Let's
say our font has weight and width axes. We need to specify each
of the axes by tag and assign a value on the axis:
</p>
<pre class="programlisting">
unsigned int variation_count = 2;
hb_variation_t variation_data[variation_count];
variation_data[0].tag = HB_OT_TAG_VAR_AXIS_WIDTH;
variation_data[1].tag = HB_OT_TAG_VAR_AXIS_WEIGHT;
variation_data[0].value = 80;
variation_data[1].value = 750;
...
hb_font_set_variations(font, variation_data, variation_count);
</pre>
<p>
That should give us a slightly condensed font ("normal" on the
<code class="literal">wdth</code> axis is 100) at a noticeably bolder
weight ("regular" is 400 on the <code class="literal">wght</code> axis).
</p>
<p>
In practice, though, you should always check that the value you
want to set on the axis is within the
[<span class="property">min_value</span>,<span class="property">max_value</span>]
range actually implemented in the font's variation axis. After
all, a font might only provide lighter-than-regular weights, and
setting a heavier value on the <code class="literal">wght</code> axis will
not change that.
</p>
<p>
Once your variation settings are specified on your font object,
however, shaping with a variable font is just like shaping a
static font.
</p>
<p>
In addition to providing the variation axes themselves, fonts may also
pre-define certain variation coordinates as named instances. HarfBuzz
makes these coordinates (and their associated names) available via
<code class="function">hb_ot_var_named_instance_get_design_coords()</code> and
<code class="function">hb_ot_var_named_instance_get_subfamily_name_id()</code>.
</p>
<p>
Applications should treat named instances like multiple independent,
static fonts.
</p>
</div>
<div class="footer">
<hr>Generated by GTK-Doc V1.34.0</div>
</body>
</html>