らんだむな記憶

blogというものを体験してみようか!的なー

縦メトリクス

こんな感じで生の値はとれるみたいだが…。

cur_layer = Glyphs.font.selectedLayers[0]
if hasattr(cur_layer, "vertOrigin"):
    print cur_layer.vertOrigin()
if hasattr(cur_layer, "vertWidth"):
    print cur_layer.vertWidth()

Vertical width? - Glyphs - Glyphs Forumに書いてあるように

for thisLayer in Glyphs.font.selectedLayers:
   thisLayer.TSB = 50
   thisLayer.BSB = 50

とすると、なんか必要以上にずれるみたいだなぁ...。

vertOrigin周辺の動きを見る限りでは、ascender0とした場合に下方向を正として幾らのところからVertOriginYが始まるか?が格納されていそうだ。つまり、ascender=880とした場合に、vertOrigin=100であれば、VertOriginY=780となるように見える。
一方、view上のT/H/Bについては、Hはグリフの縦の長さが入るようなのだが、TについてはUI上でどう編集しようとも実質「yMaxからascenderまでの長さ」しか入らないように見える(vertOriginへの書き込みがその値ということ)。何故だろう?
thisLayer.TSBの読み取りでは「yMaxからascenderまでの長さ」が得られるようだが、thisLayer.TSBの書き込みでは「yMaxにその値を加えたY座標」(直感的なTSB)がvertOriginに書き込まれるように見える。
read/writeの実装がうまく対応していないのかな?

GSLayer.TSB = property( lambda self: self.valueForKey_("TSB").floatValue(),
                        lambda self, value: self.setTSB_(float(value)))
'''.. attribute:: TSB
    Top sidebearing
    :type: float'''

いまのところthisLayer.TSBthisLayer.BSBスクリプトで直接書き込むのが一番うまくvmtx、つまりvertOriginYvertAdvanceYを制御できるんじゃないかなと思う。