Systems for simultaneously modifying multiple variable fonts

In implementations of systems for simultaneously modifying multiple variable fonts, a computing device implements a modification system to identify a first range of values of a glyph attribute that are adjustable by changing values of a particular design axis of a first variable font that is common to the first variable font and a second variable font. The modification system identifies a second range of values of the glyph attribute that are adjustable by changing values of the particular design axis of the second variable font. An overlapping range of values of the glyph attribute is determined between the first range of values and the second range of values. The modification system generates an additional instance of the first variable font and an additional instance of the second variable font for display in a user interface based on the overlapping range of values of the glyph attribute.

BACKGROUND

Variable fonts are capable of incorporating multiple font faces into a single font resource by defining design axes over which font characteristics are changeable to generate different instances of the variable fonts. These different instances are usable to render glyphs having different visual features. In one example, instances of a variable font generated by increasing or decreasing values of a Weight design axis are usable to render glyphs having vertical stems with different thicknesses.

When designing instances of variable fonts, it is often beneficial to reproduce visual features of glyphs rendered using an instance of a first variable font by generating an instance of a second variable font. For example, reproducing the visual features identically or proportionally promotes visual consistency across different variable fonts, improves aesthetics of a collection of different variable fonts, makes text rendered using different variable fonts easier to read, and so forth. However, reproducing these visual features is challenging because there is no consistency between design axis values of different variable fonts. Conventional systems for reproducing visual features across instances of different variable fonts are limited to iterative adjustments of design axis values which is time consuming and tedious.

SUMMARY

Techniques and systems are described for simultaneously modifying multiple variable fonts. In an example, a computing device implements a modification system to receive input data describing a selection of glyphs rendered using an instance of a first variable font and an instance of a second variable font. The first variable font and the second variable font have a design axis in common. For example, the first and second variable fonts each have a specified range of design axis values for the design axis which are changeable to generate different instances of the variable fonts. These different instances are usable to render the glyphs having different values of a glyph attribute.

The modification system identifies a first range of values of the glyph attribute that are adjustable by changing values of the design axis of the first variable font. In an example, the modification system also identifies a second range of values of the glyph attribute that are adjustable by changing values of the design axis of the second variable font. An overlapping range of values of the glyph attribute is determined between the first range of values and the second range of values. The modification system generates an additional instance of the first variable font and an additional instance of the second variable font based on the overlapping range of values of the glyph attribute. For example, the modification system renders the glyphs using the additional instances of the variable fonts to simultaneously modify the first and second variable fonts.

DETAILED DESCRIPTION

Overview

Conventional systems for reproducing a visual feature across instances of different variable fonts are limited to iteratively estimating values of a design axis of a variable font and generating instances of the variable font until a particular generated instance is usable to render glyphs that reproduce the visual feature. This iterative process is tedious and time consuming because there is no consistency between design axis values of different variable fonts. In order to overcome these limitations, systems and techniques are described for simultaneously modifying multiple variable fonts.

In one example, a computing device implements a modification system to receive input data describing a selection of glyphs rendered using an instance of a first variable font and an instance of a second variable font. The first variable font and the second variable font have a design axis in common. The design axis is a registered design axis in one example. In another example, the design axis is an unregistered design axis such as a custom design axis.

The first and second variable fonts each have a specified range of design axis values for the design axis which are changeable to generate different instances of the variable fonts. These different instances are usable to render the glyphs having different values of a glyph attribute. The modification system identifies a first range of values of the glyph attribute that are adjustable by changing values of the design axis of the first variable font. In an example, the modification system also identifies a second range of values of the glyph attribute that are adjustable by changing values of the design axis of the second variable font.

An overlapping range of values of the glyph attribute is determined between the first range of values and the second range of values. For example, the first range of values has a first minimum value and a first maximum value and the second range of values has a second minimum value and a second maximum value. In this example, the overlapping range of values has a minimum value equal to the greater of the first minimum and the second minimum and a maximum value equal to the lesser of the first maximum and the second maximum.

The modification system generates an additional instance of the first variable font and an additional instance of the second variable font based on the overlapping range of values of the glyph attribute in accordance with one of several example adjustment policies. For example, the modification system generates the additional instances based on a proportional ratio computed by dividing a value of the glyph attribute for a glyph rendered using the instance of the first variable font by a value of the glyph attribute for a glyph rendered using the instance of the second variable font. In this example, a value of the glyph attribute for a glyph rendered using the additional instance of the second variable font is equal to a value of the glyph attribute for a glyph rendered using the additional instance of the first variable font divided by the proportional ratio.

In one example, the modification system generates the additional instances such that a difference between a value of the glyph attribute for a glyph rendered using the instance of the first variable font and a value of the glyph attribute for a glyph rendered using the additional instance of the first variable font is equal to a difference between a value of the glyph attribute for a glyph rendered using the instance of the second variable front and a value of the glyph attribute for a glyph rendered using the additional instance of the second variable font. In another example, the modification system generates the additional instances of the first and second variable fonts such that a glyph rendered using the additional instance of the first variable font has a same value of the glyph attribute as a glyph rendered using the additional instance of the second variable font.

By generating the additional instances of the variable fonts in this manner, the described systems improve variable font technology. For example, the modification system renders the glyphs using the additional instances of the variable fonts to simultaneously modify the first and second variable fonts which is not possible using conventional systems that are limited to iterative adjustments of design axis values which is time consuming and tedious. The described systems further improve variable font technology by leveraging the overlapping range of values of the glyph attribute to simultaneously modify multiple variable fonts which is also not possible in conventional systems.

Term Examples

As used herein, the term “variable font” refers to a font that supports multiple font faces along at least one design axis.

As used herein, the term “design axis” refers to an axis of a variable font having a range of design axis values which are changeable within a design-variation space of the variable font to modify an attribute of glyphs rendered using instances of the variable font. By way of example, a design axis is either registered or unregistered. Examples of registered design axes include Italic, Optical Size, Slant, Width, Weight, etc. Examples of unregistered design axes include Serif, xHeight, Ascent, Descent, and so forth.

As used herein, the term “value” of a design axis or a design axis “value” refers to a particular position in the design-variation space of the variable font. By way of example, each value of the design axis is usable to generate an instance of the variable font.

As used herein, the term “instance” of a variable font refers to a font face corresponding to the particular position in the design-variation space of the variable font. By way of example, the font face of an instance of a variable font is usable to render glyphs of the variable font.

As used herein, the term “attribute” of a glyph refers to a visual feature of the glyph. Examples of attributes include Weight, Width, Slant, Optical Size, etc.

As used herein, the term “value” of a glyph attribute or a glyph attribute “value” refers to a quantification of a visual feature of a glyph that corresponds to the glyph attribute. For example, glyphs rendered using instances of different variable fonts having equal Weight values have vertical stems with thicknesses that are visually similar or indistinguishable. By way of example, glyphs rendered using instances of variable fonts having equal Slant values have vertical stems with angles relative to a y-axis of a bounding box that are visually similar or indistinguishable.

As used herein, the term “master” refers to a set of source font data that includes complete outline data for a particular font face.

In the following discussion, an example environment is first described that employs examples of techniques described herein. Example procedures are also described which are performable in the example environment and other environments. Consequently, performance of the example procedures is not limited to the example environment and the example environment is not limited to performance of the example procedures.

Example Environment

FIG. 1is an illustration of an environment100in an example implementation that is operable to employ digital systems and techniques as described herein. The illustrated environment100includes a computing device102connected to a network104. The computing device102is configurable as a desktop computer, a laptop computer, a mobile device (e.g., assuming a handheld configuration such as a tablet or mobile phone), and so forth. Thus, the computing device102is capable of ranging from a full resource device with substantial memory and processor resources (e.g., personal computers, game consoles) to a low-resource device with limited memory and/or processing resources (e.g., mobile devices). In some examples, the computing device102is representative of a plurality of different devices such as multiple servers utilized to perform operations “over the cloud.”

The illustrated environment100also includes a display device106that is communicatively coupled to the computing device102via a wired or a wireless connection. A variety of device configurations are usable to implement the computing device102and/or the display device106. The computing device102includes a storage device108and a modification module110. The storage device108is illustrated to include variable font data112.

The variable font data112describes a plurality of variable fonts available to the modification module110. In one example, the variable font data112includes a font file for each of the plurality of variable fonts. These font files define design axes used by the variable fonts, adjustable values of the design axes, default or named instances of the variable fonts, and so forth.

Each variable font includes a design axis or multiple design axes. Examples of design axes include xHeight axes, Width axes, Weight axes, Italic axes, Optical Size axes, Slant axes, CapHeight axes, Ascent axes, Decent axes, etc. Every design axis includes at least one defined range of design axis values. In this example, each of the design axis values in the range corresponds to an instance of a variable font. Moreover, each instance of the variable font is usable to render glyphs of the variable font that have visual features based on a particular design axis value in the range of design axis values.

Accordingly, for any particular design axis of any particular variable font, there is a direct relationship between the design axis values of the particular design axis and visual features of glyphs rendered using instances of the particular variable font. The visual features of the glyphs rendered using different instances of the variable font are also describable as glyph attributes having different glyph attribute values. Examples of glyph attributes include Weight, Width, Slant, Italic, xHeight, CapHeight, Ascent, Decent, and so forth. Weight denotes a thickness of a glyph's horizontal or vertical stem such as thickness of a vertical stem of a capital letter “I” which is measured horizontally. Width describes a distance between consecutive glyph origins and Slant refers to an angle between an upward y-direction of a glyph's bounding box and the glyph's vertical stem. Italic denotes Slant having a 12 degree angle value. CapHeight refers to a height of a capital Latin letter such as the letter “I” and xHeight refers to a height of a lowercase Latin letter such as the letter “x” measured from a baseline. Ascent and Descent denote a maximum height above a baseline reached by a glyph and a maximum height below the baseline reached by the glyph, respectively.

For example, a first design axis value of the particular design axis is usable to generate a first instance of the particular variable font which is usable to render glyphs having a first glyph attribute value. In this example, the first glyph attribute value is a first visual feature of the glyphs. Continuing the example, a second design axis value of the particular design axis is usable to generate a second instance of the particular variable font. The second instance of the particular variable font is useable to render glyphs having a second glyph attribute value which is a second visual feature of the glyphs. The variable font data112describes relationships between design axis values and corresponding glyph attribute values for each design axis included in every variable font available to the modification module110.

The modification module110is illustrated as receiving input data114. In the illustrated example, the input data114describes a selection of glyphs116rendered using an instance of a first variable font118and an instance of a second variable font120. As shown, the modification module110renders the selection of glyphs116in a user interface122of the display device106.

The modification module110processes the input data114and/or the variable font data112and determines a design axis that is common to both the first variable font118and the second variable font120. Once this design axis is determined, the modification module110identifies a first range of values of a glyph attribute that are adjustable by changing values of the design axis of the first variable font118. For example, the modification module110identifies a second range of values of the glyph attribute that are adjustable by change values of the design axis of the second variable font120.

The modification module110determines an overlapping range of values of the glyph attribute between the first range of values and the second range of values. For example, the modification module110uses the overlapping range of values to generate a selection of glyphs124that are rendered using an additional instance of the first variable font126and an additional instance of the second variable font128. As shown, this selection of glyphs124is displayed in the user interface122.

In this example, the input data114also describes a user input relative to the selection of glyphs116indicating an increase in a Weight attribute value. Thus, the glyph attribute is the Weight and the modification module110generates the selection of glyphs124as having an increased Weight value relative to the selection of glyphs116based on the input data114and the variable font data112. As illustrated inFIG. 1, the modification module110simultaneously modifies the Weight of the selection of glyphs116by generating the additional instance of the first variable font126and the additional instance of the second variable font128.

FIG. 2depicts a system200in an example implementation showing operation of a modification module110. The modification module110is illustrated to include an axis module202, an attribute module204, a policy module206, and a display module208. The axis module202receives the variable font data112and the input data114as inputs and processes the input data114and/or the variable font data112to generate axis data210.

FIGS. 3A, 3B, 3C, 3D, 3E, and 3Fillustrate examples of simultaneously modifying multiple variable fonts.FIG. 3Aillustrates an example representation300of glyph attribute values of glyphs rendered using an instance of a variable font as described by the variable font data112.FIG. 3Billustrates an example representation302of relationships between design axis values and glyph attribute values as described by the variable font data112.FIG. 3Cillustrates a representation304of determining an overlapping range of glyph attribute values.FIG. 3Dillustrates a representation306of simultaneously modifying multiple variable fonts based on a proportional adjustment policy.FIG. 3Eillustrates a representation308of simultaneously modifying multiple variable fonts based on an absolute adjustment policy.FIG. 3Fillustrates a representation310of simultaneously modifying multiple variable fonts based on an equal adjustment policy.

As shown inFIG. 3A, the representation300includes glyphs rendered using an example instance of a variable font312of the variable fonts available to the modification module110. For example, the variable font data112describes a Weight value314based on a thickness of a vertical stem of a glyph of the example instance of the variable font312. The variable font data112describes a Slant value316based on an angle between a vertical stem and a y-axis of a bounding box of a glyph of the example instance of the variable font312. As illustrated, the variable font data112describes a Width value318as a distance between origins of consecutive glyphs of the example instance of the variable font312.

In one example, the modification module110receives and/or accesses the variable font data112describing the Weight value314, the Slant value316, and the Width value318. In another example, the modification module110generates the variable font data112by connecting control points of glyphs rendered using instances of variable fonts with polylines. In this example, the modification module110calculates the Weight value314, the Slant value316, and the Width value318using coordinates of the polylines.

The variable font data112also describes relationships between values of the attributes of glyphs rendered using instances of the variable fonts available to the modification module110and values of design axes of the variable fonts such as Italic axes, Optical Size axes, Slant axes, Width axes, Weight axes, xHeight axes, CapHeight axes, Ascent axes, Decent axes, and so forth. The representation302depicted inFIG. 3Billustrates examples of relationships between attribute values of glyphs and design axis values of variable fonts. In one example, these relationships are expressible as:
AxisValue=k*GlyphAttribute+C
where: AxisValue is a value of a design axis; GlyphAttribute is a glyph attribute value; and k and C are constants.

It is to be appreciated that for a single glyph attribute (e.g., Weight), the relationship between values of the single glyph attribute and values of the design axis of a variable font includes a linear equation or multiple linear equations with varying k and C constants based on a number of masters included in the variable font. This is illustrated by a first example320and a second example322of determined relationships between design axis values of variable fonts and Weight values of glyphs rendered using instances of the variable fonts. The first example320illustrates a single linear relationship between the design axis values and the Weight values for a variable font which is interpolated between first and second masters of the variable font (e.g., Thin and Bold). The second example322illustrates a relationship between the design axis values and the Weight values for a variable font which includes multiple linear relationships. As shown, the second example322includes a first linear relationship interpolated between first and second masters (e.g., Thin and Regular) and a second linear relationship interpolated between second and third masters (e.g., Regular and Bold) of the variable font.

As shown inFIG. 2, the axis module202receives the input data114which describes glyphs rendered using instances of multiple variable fonts. The axis module202processes the input data114and determines a common design axis which is included in each of the multiple variable fonts described by the input data114. To do so in one example, the axis module202extracts axis tags of each design axis included in the multiple variable fonts described by the input data114and compares these axis tags to identify the common design axis or common design axes. The axis module202generates the axis data210as describing the common design axis or common design axes.

The attribute module204receives the axis data210, the variable font data112, and the input data114and processes the axis data210, the variable font data112, and/or the input data114to generate range data212. With reference toFIG. 3C, the input data114describes glyphs rendered using an instance of a first variable font324and an instance of a second variable font326. For example, the first variable font324is AmsterlvarAlpha and the second variable font326is DunbarVariable. The axis data210describes a common design axis328which is included in the first variable font324and the second variable font326. In one example, the common design axis328is an xHeight design axis. In another example, the common design axis328is an Italic axis, an Optical Size axis, a Slant axis, a Width axis, a Weight axis, a CapHeight axis, an Ascent axis, a Decent axis, etc.

As shown, the common design axis328of the first variable font324has a range of adjustable design axis values between a first minimum design axis value330and a first maximum design axis value332. A particular design axis value within this range is specified by a first indicated design axis value334. For example, the first minimum design axis value330is 890, the first maximum design axis value332is 1200, and the first indicated design axis value334is 1000. As previously described, the first indicated design axis value334is changeable within the range of design axis values of the common design axis328to adjust a first indicated glyph attribute value336within a first range of values338of a glyph attribute.

In the illustrated example, the first range of values338of the glyph attribute has a first minimum glyph attribute value340and a first maximum glyph attribute value342. In one example, the glyph attribute is xHeight and the first minimum glyph attribute value340is 444, the first maximum glyph attribute value342is 600, and the first indicated glyph attribute value336is 500. The first minimum design axis value330corresponds to the first minimum glyph attribute value340and the first maximum design axis value332corresponds to the first maximum glyph attribute value342. Similarly, the first indicated design axis value334corresponds to the first indicated glyph attribute value336. The variable font data112describes a relationship between the first indicated design axis value334and the first indicated glyph attribute value336. For example, the variable font data112describes this relationship as a single linear relationship as in the first example320or as including multiple linear relationships as in the second example322.

As shown inFIG. 3C, the common design axis328of the second variable font326has a range of adjustable design axis values between a second minimum design axis value344and a second maximum design axis value346. For example, the common design axis328of the second variable font326also includes a second indicated design axis value348. In one example, the second minimum design axis value344is 353, the second maximum design axis value346is 574, and the second indicated design axis value348is 574. The second indicated design axis value348is changeable within the range of design axis values of the common design axis328to adjust a second indicated glyph attribute value350within a second range of values352of the glyph attribute.

The second range of values352of the glyph attribute has a second minimum glyph attribute value354and a second maximum glyph attribute value356. For example, the glyph attribute is xHeight and the second minimum glyph attribute value354is 332, the second maximum glyph attribute value356is 570, and the second indicated glyph attribute value350is 570. The attribute module204determines an overlapping range of values358of the glyph attribute between the first range of values338of the glyph attribute and the second range of values352of the glyph attribute. To do so, the attribute module204computes an intersection between the first range of values338and the second range of values352of the glyph attribute.

As illustrated, the attribute module204determines a minimum glyph attribute value of the overlapping range of values358as a maximum of the first minimum glyph attribute value340which is 444 and the second minimum glyph attribute value354which is 332. Since the first minimum glyph attribute value340is greater than the second minimum glyph attribute value354, the attribute module204determines that the minimum glyph attribute value of the overlapping range of values358is equal to the first minimum glyph attribute value340. The attribute module204determines a maximum glyph attribute value of the overlapping range of values358as a minimum of the first maximum glyph attribute value342which is 600 and the second maximum glyph attribute value356which is 570. Because the second maximum glyph attribute value356is less than the first maximum glyph attribute value342, the attribute module204determines that the maximum glyph attribute value of the overlapping range of values358is equal to the second maximum glyph attribute value356.

By determining the overlapping range of values358in this manner, the attribute module204ensures that the glyph attribute values within the overlapping range of values358are included in both the first range of values338and the second range of values352of the glyph attribute. For example, a particular glyph attribute value within the overlapping range of values358corresponds to a particular design axis value of the common design axis328of the first variable font324and also corresponds to a particular design axis value of the common design axis328of the second variable font326. The attribute module204generates the range data212as describing the overlapping range of values358of the glyph attribute.

Although the representation304includes two variable fonts324,326, it is to be appreciated that the attribute module204is capable of determining the overlapping range of values358for any number of variable fonts that include the common design axis328. To do so, the attribute module204computes an intersection of ranges of glyph attribute values which correspond to values of the common design axis328for each variable font having the common design axis328. It is also to be appreciated that the first variable font324and the second variable font326are capable of having more than one common design axis328in some examples. In one example, the first variable font324and the second variable font326have an additional common design axis328. In this example, the additional common design axis328includes design axis values which are changeable to adjust values of the glyph attribute. In another example, the additional common design axis328includes design axis values which are changeable to adjust values of an additional glyph attribute.

As illustrated inFIG. 2, the policy module206receives the range data212, the variable font data112, and the input data114and processes the range data212, the variable font data112, and/or the input data114to generate normalized data214. The policy module206generates the normalized data214based on a policy for simultaneously modifying multiple variable fonts. For example, the range data212describes the overlapping range of values358of the glyph attribute and this overlapping range of values358is usable to simultaneously modify multiple variable fonts in several different ways. In this example, the different ways of simultaneously modifying multiple variable fonts are based on a proportional adjustment policy, an absolute adjustment policy, an equal adjustment policy, and so forth.

In one example, the input data114describes an indication of a policy for simultaneously modifying multiple variable fonts. In another example, the policy module206determines a policy for simultaneously modifying multiple variable fonts such as a default policy for modifying multiple variable fonts. Consider an example in which the policy module206generates the normalized data214based on a proportional adjustment policy. In this example, the policy module206computes a ratio of the first indicated glyph attribute value336and the second indicated glyph attribute value350which is expressible as:

R=VnfVnf⁢′
where: R is the ratio; Vnfis a current glyph attribute value of a variable font; and Vnf, is a current glyph attribute value of an additional variable font.

After computing the ratio R, the policy module206assigns values 0 and 1 to a minimum and a maximum of the overlapping range of values358of the glyph attribute, respectively. For example, this is expressible as:

min=maximum⁡(Pnfmin,Pnf⁢′⁢minR)max=minimum⁡(Pnfmax,Pnf⁢′⁢⁢maxR)
where: R is the ratio; Pnf minis a minimum of a range of glyph attribute values adjustable using the variable font; Pnf′minis a minimum of a range of glyph attribute values adjustable using the additional variable font; Pnf maxis a maximum of the range of glyph attribute values adjustable using the variable font; and Pnf′maxis a maximum of the range of glyph attribute values adjustable using the additional variable font.

After computing the overlapping range for the proportional adjustment policy, the policy module206generates the normalized data214as describing a simultaneous proportional modification of the variable font and the additional variable font. In one example, this is expressible as:
V′nf′=X*range(Pnf′)+min(Pnf′)

Vnf′=Vnf⁢′′R
where: R is the ratio; Pnf′is the overlapping range of glyph attribute values for the proportional adjustment policy; X is the normalized value; V′nf′is a proportional glyph attribute value for the variable font; and V′nfis a proportional glyph attribute value for the additional variable font.

Consider an example in which the policy module206generates the normalized data214using the example shown inFIG. 3Cwith respect to the first variable font324and the second variable font326. In this example, the ratio R is computed as the first indicated glyph attribute value336divided by the second indicated glyph attribute value350which is 500/570 or approximately 0.877. Continuing this example, a minimum absolute value for the glyph attribute is a maximum of the first minimum glyph attribute value340and the second minimum glyph attribute value354divided by the ratio R which is 444. A maximum absolute value for the glyph attribute is a minimum of the first maximum glyph attribute value342and the second maximum glyph attribute value356divided by the ratio R which is 600. Accordingly, Pnf′is (444, 600); min (Pnf′) is 444; and range (Pnf′) is 600 minus 444 or 156. From this, X is the first indicated glyph attribute value336minus min (Pnf′) divided by range(Pnf′) which is approximately 0.36. For example, an adjustment of X from 0.36 to 0.25 corresponds to an additional instance of the first variable font324usable to render glyphs having glyph attribute values of approximately 483. In this example, this also corresponds to an additional instance of the second variable font326usable to render glyphs having glyph attribute values of 483 divided by the ratio R which is approximately 550.

In an example in which the policy module206generates the normalized data214based on the proportional adjustment policy, the display module208receives the normalized data214, the variable font data112, and the input data114and processes the normalized data214, the variable font data112, and/or the input data114to generate and display instances of variable fonts based on the proportional adjustment policy. With respect toFIG. 3D, the representation306includes an instance of a first variable font360and an instance of a second variable font362. The input data114describes a simultaneous modification of an xHeight value of glyphs of the first variable font360and glyphs of the second variable font362based on the proportional adjustment policy. As shown, the display module208displays an additional instance of the first variable font364and an additional instance of the second variable font366which have modified xHeight values.

In particular, glyphs rendered using the additional instance of the first variable font364have lower xHeight values than glyphs rendered using the instance of the first variable font360. The glyphs rendered using the additional instance of the second variable font366have lower xHeight values than the glyphs rendered using the instance of the second variable font362. A comparison of xHeight values between the glyphs rendered using the instance of the first variable font360and the glyphs rendered using the instance of the second variable font362indicates that the glyphs rendered using the instance of the second variable font362have greater xHeight values than the glyphs rendered using the instance of the first variable font360. A similar comparison between xHeight values of the glyphs rendered using the additional instance of the first variable font364and the glyphs rendered using the additional instance of the second variable font366indicates that the glyphs rendered the additional instance of the second variable font366have greater xHeight values than the glyphs rendered using the additional instance of the first variable font364.

Consider another example in which the policy module206generates the normalized data214based on an absolute adjustment policy instead of the proportional adjustment policy. In this example, the policy module206uses the overlapping range of values358of the glyph attribute as absolute glyph attribute values and generates the normalized data214as describing these absolute glyph attribute values. The display module208receives the normalized data214, the variable font data112, and the input data114and processes the normalized data214, the variable font data112, and/or the input data114to generate and display instances of variable fonts based on the absolute adjustment policy.

As shown inFIG. 3E, the input data114describes a selection of multiple variable fonts and the display module208displays an instance of a first variable font368and an instance of a second variable font370. Glyphs rendered using the instance of the first variable font368have lower xHeight values than glyphs rendered using the instance of the second variable font370. In an example in which the input data114also describes a user input specifying an xHeight value of the glyphs rendered using the instance of the first variable font368, the display module208generates and displays an additional instance of the first variable font372and an additional instance of the second variable font374.

As illustrated, glyphs rendered using the additional instance of the first variable font372have xHeight values which are the same as the xHeight values of the glyphs rendered using the instance of the first variable font368. However, glyphs rendered using the additional instance of the second variable font374have lower xHeight values than the glyphs rendered using the instance of the second variable font370. Moreover, the xHeight values of the glyphs rendered using the additional instance of the first variable font372and are the same as the xHeight values of the glyphs rendered using the additional instance of the second variable font374.

Consider another example in which the input data114also describes a user input modifying the xHeight values of the glyphs rendered using the additional instance of the first variable font372. In this example and in response to receiving the user input described by the input data114, the display module208generates and displays a second additional instance of the first variable font376and a second additional instance of the second variable font378. As shown, glyphs rendered using the second additional instance of the first variable font376have xHeight values that are greater than the xHeight values of the glyphs rendered using the additional instance of the first variable font372. As further shown, glyphs rendered using the second additional instance of the second variable font378have xHeight values that are the same as the xHeight values of the glyphs rendered using the second additional instance of the first variable font376.

Consider an example in which the policy module206generates the normalized data214based on an equal adjustment policy instead of the absolute adjustment policy or the proportional adjustment policy. In this example, and with respect toFIG. 3C, the policy module206determines differences between the first and second indicated glyph attribute values336,350and the minimum and maximum glyph attribute values of the overlapping range of values358. These differences represent an amount by which the glyph attribute is adjustable within the overlapping range of values358relative to the first and second indicated glyph attribute values336,350. In one example, this is expressible as:
maxAdjust=max(Pnf′)−Vnf′
minAdjust=Vnf′−min(Pnf′)
where: Pnf′is the overlapping range of values of the glyph attribute for the equal adjustment policy; and Vnf′is a current glyph attribute value for each variable font.

For example, the policy module206maps maxAdjust to 1 and minAdjust to 0 as the normalized values X and generates the normalized data214as describing this mapping. The display module208receives the normalized data214, the variable font data112and the input data114and processes the normalized data214, the variable font data112, and/or the input data114to generate and display instances of variable fonts based on the equal adjustment policy. In an example, this is representable as:
range=maxAdjust−minAdjust
V′nf=X*range+Vnf
where: Vnfis a current glyph attribute value for an instance of a variable font; X is the normalized value; and V′nfis an equal glyph attribute value for the variable font.

As illustrated inFIG. 3F, the input data114describes a selection of multiple variable fonts and the display module208displays an instance of a first variable font380and an instance of a second variable font382. Glyphs rendered using the instance of the second variable font382have greater Weight values than glyphs rendered using the instance of the first variable font382. Consider an example in which the input data114also describes a user input modifying a Weight value of the glyphs rendered using the instance of the first variable font380. In this example, the display module208generates and displays an additional instance of the first variable font384and an additional instance of the second variable font386.

As shown, glyphs rendered using the additional instance of the first variable font384have greater Weight values than the glyphs rendered using the instance of the first variable font382. Similarly, glyphs rendered using the additional instance of the second variable font386have greater Weight values than the glyphs rendered using the instance of the second variable font382. A comparison of the glyphs rendered using the additional instance of the first variable font384with the glyphs rendered using the instance of the variable font380as well as a comparison of the glyphs rendered using the additional instance of the second variable font386with the glyphs rendered using the instance of the second variable font382indicates that Weight values of the instances384,386are increased by an equal delta relative to Weight values of the instances380,382, respectively.

In general, functionality, features, and concepts described in relation to the examples above and below are employed in the context of the example procedures described in this section. Further, functionality, features, and concepts described in relation to different figures and examples in this document are interchangeable among one another and are not limited to implementation in the context of a particular figure or procedure. Moreover, blocks associated with different representative procedures and corresponding figures herein are applicable individually, together, and/or combined in different ways. Thus, individual functionality, features, and concepts described in relation to different example environments, devices, components, figures, and procedures herein are usable in any suitable combinations and are not limited to the particular combinations represented by the enumerated examples in this description.

Example Procedures

The following discussion describes techniques which are implementable utilizing the previously described systems and devices. Aspects of each of the procedures are implementable in hardware, firmware, software, or a combination thereof. The procedures are shown as a set of blocks that specify operations performed by one or more devices and are not necessarily limited to the orders shown for performing the operations by the respective blocks. In portions of the following discussion, reference is made toFIGS. 1-3.FIG. 4is a flow diagram depicting a procedure400in an example implementation in which a glyph attribute of glyphs rendered using an instance of a first variable font and an instance of a second variable font is simultaneously modified by generating an additional instance of the first variable font and an additional instance of the second variable font.

Input data is received describing a selection of glyphs rendered using an instance of a first variable font and an instance of a second variable font, (block402), the first variable font and the second variable font have a design axis in common. In one example, the computing device102implements the modification module110to receive the input data. A first range of values of a glyph attribute are identified that are adjustable by changing values of the design axis of the first variable font (block404). For example, the modification module110identifies the first range of values of the glyph attribute.

A second range of values of the glyph attribute are identified that are adjustable by changing values of the design axis of the second variable font (block406). In an example, the modification module110identifies the second range of values of the glyph attribute. An overlapping range of values of the glyph attribute between the first range of values and the second range of values is determined (block408). For example, the modification module110determines the overlapping range of values of the glyph attribute. An additional instance of the first variable font and an additional instance of the second variable font are generated for display in a user interface of a display device based on the overlapping range of values of the glyph attribute (block410). The computing device102implements the modification module110to generate the additional instance of the first variable font and the additional instance of the second variable font in one example.

FIG. 5illustrates an example user interface500for simultaneously modifying multiple variable fonts. The user interface500is illustrated to include an indication502of a first variable font and an indication504of a second variable font. For example, the first variable font includes one design axis which is a Weight design axis. An indication506of the Weight design axis of the first variable font is displayed in a first user interface element508of the user interface500.

In the illustrated example, the second variable font includes two design axes which are a Weight design axis and an Optical Size design axis. An indication510of the Weight design axis and an indication512of the Optical Size design axis are displayed in a second user interface element514of the user interface500. An indication516of a common design axis for the first variable font and the second variable font is displayed in a third user interface element518of the user interface. As shown, the common design axis is the Weight design axis that is included in both the first variable font and the second variable font.

FIG. 6illustrates an example600of generating instances of variable fonts based on a value of a visual feature of a graphic object and based on a value of a glyph attribute of glyphs rendered using a non-variable font. The example600includes a first workflow602and a second workflow604. In the first workflow602an instance of a variable font606is displayed next to a graphic object608which is a rectangle in this example. For example, the modification module110determines a stroke width of the graphic object608as equal to a 7-point stroke width. In this example, the modification module110determines the stroke width of the graphic object608by connecting control points of the graphic object608with polylines and using coordinates of these polylines to compute the stroke width.

After determining the stroke width of the graphic object608, the modification module110determines a design axis value of a Weight design axis of the variable font which corresponds to a Weight attribute value that matches the stroke width of the graphic object608. As shown, the modification module110applies the determined design axis value to the Weight design axis of the variable font and generates the instance of the variable font606. Glyphs rendered using the instance of the variable font606have Weight values that match the stroke width of the graphic object608.

In some examples, the modification module110generates the instance of the variable font606automatically and without user intervention. For example, the computing device102implements the modification module110to generate and display the instance of the variable font606based on a different instance of the variable font being rendered within a threshold proximity of the graphic object608. In another example, the modification module110generates the instance of the variable font606based on glyphs rendered using the different instance of the variable font having Weight values corresponding to a glyph stem thickness within a threshold amount of the stroke width of the graphic object608.

In the second workflow, glyphs rendered using a non-variable font610are displayed next to glyphs rendered using an instance of a variable font612. For example, the modification module110determines a Weight value of the glyphs rendered using the non-variable font610by connecting control points of these glyphs with polylines and computing the Weight value. After the Weight value of the glyphs rendered using the non-variable font610is computed, the modification module110determines a design axis value of a Weight design axis of the variable font that corresponds to a Weight value that matches the Weight value of the glyphs rendered using the non-variable font610. The modification module110applies the design axis value to the Weight design axis and generates an additional instance of the variable font614. As shown, glyphs rendered using the additional instance of the variable font614have Weight values that match Weight values of the glyphs rendered using the non-variable font610.

In some examples, the modification module110generates the additional instance of the variable font614automatically and without user intervention. For example, the modification module110generates and displays the additional instance of the variable font614based on a proximity of the instance of the variable font612being less than a threshold distance from the glyphs rendered using the non-variable font610. In another example, the modification module110generates the additional instance of the variable font614based on glyphs rendered using the instance of the variable font612having Weight values within a threshold amount of the Weight values of the glyphs rendered using the non-variable font610.

Example System and Device

FIG. 7illustrates an example system700that includes an example computing device that is representative of one or more computing systems and/or devices that are usable to implement the various techniques described herein. This is illustrated through inclusion of the modification module110. The computing device702includes, for example, a server of a service provider, a device associated with a client (e.g., a client device), an on-chip system, and/or any other suitable computing device or computing system.

The example computing device702as illustrated includes a processing system704, one or more computer-readable media706, and one or more I/O interfaces708that are communicatively coupled, one to another. Although not shown, the computing device702further includes a system bus or other data and command transfer system that couples the various components, one to another. For example, a system bus includes any one or combination of different bus structures, such as a memory bus or memory controller, a peripheral bus, a universal serial bus, and/or a processor or local bus that utilizes any of a variety of bus architectures. A variety of other examples are also contemplated, such as control and data lines.

The processing system704is representative of functionality to perform one or more operations using hardware. Accordingly, the processing system704is illustrated as including hardware elements710that are configured as processors, functional blocks, and so forth. This includes example implementations in hardware as an application specific integrated circuit or other logic device formed using one or more semiconductors. The hardware elements710are not limited by the materials from which they are formed or the processing mechanisms employed therein. For example, processors are comprised of semiconductor(s) and/or transistors (e.g., electronic integrated circuits (ICs)). In such a context, processor-executable instructions are, for example, electronically-executable instructions.

The computer-readable media706is illustrated as including memory/storage712. The memory/storage712represents memory/storage capacity associated with one or more computer-readable media. In one example, the memory/storage712includes volatile media (such as random access memory (RAM)) and/or nonvolatile media (such as read only memory (ROM), Flash memory, optical disks, magnetic disks, and so forth). In another example, the memory/storage712includes fixed media (e.g., RAM, ROM, a fixed hard drive, and so on) as well as removable media (e.g., Flash memory, a removable hard drive, an optical disc, and so forth). The computer-readable media706is configurable in a variety of other ways as further described below.

Implementations of the described modules and techniques are storable on or transmitted across some form of computer-readable media. For example, the computer-readable media includes a variety of media that is accessible to the computing device702. By way of example, and not limitation, computer-readable media includes “computer-readable storage media” and “computer-readable signal media.”

Combinations of the foregoing are also employable to implement various techniques described herein. Accordingly, software, hardware, or executable modules are implementable as one or more instructions and/or logic embodied on some form of computer-readable storage media and/or by one or more hardware elements710. For example, the computing device702is configured to implement particular instructions and/or functions corresponding to the software and/or hardware modules. Accordingly, implementation of a module that is executable by the computing device702as software is achieved at least partially in hardware, e.g., through use of computer-readable storage media and/or hardware elements710of the processing system704. The instructions and/or functions are executable/operable by one or more articles of manufacture (for example, one or more computing devices702and/or processing systems704) to implement techniques, modules, and examples described herein.

The techniques described herein are supportable by various configurations of the computing device702and are not limited to the specific examples of the techniques described herein. This functionality is also implementable entirely or partially through use of a distributed system, such as over a “cloud”714as described below.

The cloud714includes and/or is representative of a platform716for resources718. The platform716abstracts underlying functionality of hardware (e.g., servers) and software resources of the cloud714. For example, the resources718include applications and/or data that are utilized while computer processing is executed on servers that are remote from the computing device702. In some examples, the resources718also include services provided over the Internet and/or through a subscriber network, such as a cellular or Wi-Fi network.

The platform716abstracts the resources718and functions to connect the computing device702with other computing devices. In some examples, the platform716also serves to abstract scaling of resources to provide a corresponding level of scale to encountered demand for the resources that are implemented via the platform. Accordingly, in an interconnected device embodiment, implementation of functionality described herein is distributable throughout the system700. For example, the functionality is implementable in part on the computing device702as well as via the platform716that abstracts the functionality of the cloud714.

Conclusion

Although implementations of systems for simultaneously modifying multiple variable fonts have been described in language specific to structural features and/or methods, it is to be understood that the appended claims are not necessarily limited to the specific features or methods described. Rather, the specific features and methods are disclosed as example implementations of systems for simultaneously modifying multiple variable fonts, and other equivalent features and methods are intended to be within the scope of the appended claims. Further, various different examples are described and it is to be appreciated that each described example is implementable independently or in connection with one or more other described examples.