axisregistry icon indicating copy to clipboard operation
axisregistry copied to clipboard

Add Dot Shape [DOTS] axis

Open yanone opened this issue 2 years ago • 2 comments

Requirements

By ticking the cases (or putting x between the square brackets in text mode), you confirm the following:

  • [x] I have inspected the current Axis Registry and there is not a registered custom axis that could be used for the variation purpose on the upcoming font project.
  • [X] The metadata fields of the proposed axis meet the Axis Requirements as specified in the Protocol (linked above).

Font project(s) using the axis

https://github.com/aminabedi68/Mikhak

Short description of what the axis does

Transforms and/or switching dot style in precomposed glyphs

Image

Bildschirm­foto 2023-03-20 um 10 16 26 Bildschirm­foto 2023-03-20 um 10 16 19 Bildschirm­foto 2023-03-20 um 10 16 13

Why is the axis needed

In Arabic, and possibly other scripts, dot styles contribute a lot to the appearance of a typeface. Traditional rombic dots (as written with a broad nib pen) give off a feeling of authoritativeness, while round dots or even several dots written cursively as either a line or a bent line or a loop communicate informality and a hand-written origin.

A font may implement several different dot styles that may be chosen at user discretion depending on design intent.

Axis metadata fields

#DSTY based on [Mikhak](https://github.com/aminabedi68/Mikhak)
tag: "DSTY"
display_name: "Dot Style"
min_value: 1
default_value: 1
max_value: 1000
precision: 1
fallback {
  name: "Default"
  value: 1.00
}
fallback_only: false
description: ""

Note: I'm not sure what fallback_only means and it wasn't described in the Guide, so leaving it at default value.

yanone avatar Mar 20 '23 09:03 yanone

Note: I'm not sure what fallback_only means and it wasn't described in the Guide, so leaving it at default value.

Technical answer from Garret in the chat group:

// Whether only the fallback positions should be used, for example, an axis // might have only three relevant positions: the min, the middle, and the max. An example where it would be set true is italic

This field affects the way the type tester surfaces the axis control. A true value would be used in cases like a boolean axis to display an "on/off" toggle (hence the Italic example above), or pseudo boolean like Cursive, which was registered with three fallbacks positions, and so it uses radio buttons to give access to those positions. A false value is used for a continuous range axis displaying a slider to reach all the intermediate points.

When inspecting the current implementation of DSTY in Mikhak it would require a true value. However, since we no longer include fallbacks at the axis registry level, this will need further revision.

vv-monsalve avatar Mar 22 '23 15:03 vv-monsalve

@vv-monsalve and @evanwadams and I discussed this and propose:

#DOTS based on [Mikhak](https://github.com/aminabedi68/Mikhak)
tag: "DOTS"
display_name: "Dot Shape"
min_value: 0
default_value: 0
max_value: 9
precision: -1
fallback {
  name: "Default"
  value: 0.0
}
fallback_only: false
description: "Customizes the shapes of dots, in writing systems from Latin (i) to Arabic (ي)."

Note that "DOTS" is fun, and breaking the 'system' of tag characters where SH has been used for other Shape axes, but this 4 character word works so nicely :)

Note also the max_value here is 9 to avoid the risk that it is misunderstood as a percent, when it should be understood as a enum axis; we've seen this issue with Bitcount, where each shape is not mapped to an integer. We can easily increase the value when we have a font with more than 6 (since we start at zero) whole shapes. I used 9 because I can think of 9 so far: Invisible, Circle, Oval, Square, Rombic, Line, Curved Line, Rounded Line, Rounded Curved Line.

We await comments before approving :)

davelab6 avatar Apr 12 '24 19:04 davelab6