こんな感じで生の値はとれるみたいだが…。
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
周辺の動きを見る限りでは、ascender
を0
とした場合に下方向を正として幾らのところから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.TSB
とthisLayer.BSB
のスクリプトで直接書き込むのが一番うまくvmtx、つまりvertOriginY
とvertAdvanceY
を制御できるんじゃないかなと思う。