diff --git a/kittens/choose_fonts/face.go b/kittens/choose_fonts/face.go index be878528f..0ff0951a4 100644 --- a/kittens/choose_fonts/face.go +++ b/kittens/choose_fonts/face.go @@ -2,6 +2,7 @@ package choose_fonts import ( "fmt" + "maps" "math" "strings" "sync" @@ -22,6 +23,23 @@ type face_panel struct { preview_cache_mutex sync.Mutex } +func (self *face_panel) variable_spec(named_style string, axis_overrides map[string]float64) string { + ans := fmt.Sprintf(`family="%s" variable_name="%s"`, self.family, self.current_preview.Variable_data.Variations_postscript_name_prefix) + if axis_overrides != nil { + axis_values := self.current_preview.current_axis_values() + maps.Copy(axis_values, axis_overrides) + default_axis_values := self.current_preview.default_axis_values() + for tag, val := range axis_values { + if default_axis_values[tag] != val { + ans += fmt.Sprintf(" %s=%g", tag, val) + } + } + } else if named_style != "" { + ans += fmt.Sprintf(" style=\"%s\"", named_style) + } + return ans +} + func (self *face_panel) draw_variable_fine_tune(sz loop.ScreenSize, start_y int, preview RenderedSampleTransmit) (y int, err error) { s := styles_for_variable_data(preview.Variable_data) lines := []string{} @@ -175,8 +193,7 @@ func (self *face_panel) on_click(id string) (err error) { case "style": self.set(fmt.Sprintf(`family="%s" style="%s"`, self.family, val)) case "variable_style": - self.set(fmt.Sprintf(`family="%s" variable_name="%s" style="%s"`, self.family, - self.current_preview.Variable_data.Variations_postscript_name_prefix, val)) + self.set(self.variable_spec(val, nil)) } return self.handler.draw_screen() } diff --git a/kittens/choose_fonts/types.go b/kittens/choose_fonts/types.go index 3a92e6329..9307898a4 100644 --- a/kittens/choose_fonts/types.go +++ b/kittens/choose_fonts/types.go @@ -2,6 +2,7 @@ package choose_fonts import ( "fmt" + "maps" "sync" ) @@ -95,6 +96,28 @@ type RenderedSampleTransmit struct { Variable_axis_map map[string]float64 `json:"variable_axis_map"` } +func (self RenderedSampleTransmit) default_axis_values() (ans map[string]float64) { + ans = make(map[string]float64) + for _, ax := range self.Variable_data.Axes { + ans[ax.Tag] = ax.Default + } + return +} + +func (self RenderedSampleTransmit) current_axis_values() (ans map[string]float64) { + ans = make(map[string]float64) + if self.Variable_named_style.Name != "" { + maps.Copy(ans, self.Variable_named_style.Axis_values) + } else { + ans := make(map[string]float64) + for _, ax := range self.Variable_data.Axes { + ans[ax.Tag] = ax.Default + } + maps.Copy(ans, self.Variable_axis_map) + } + return +} + var variable_data_cache map[string]VariableData var variable_data_cache_mutex sync.Mutex