Generalize code to get variable spec

This commit is contained in:
Kovid Goyal
2024-05-17 20:40:48 +05:30
parent f8e2dc1eca
commit 73a6668b17
2 changed files with 42 additions and 2 deletions

View File

@@ -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()
}

View File

@@ -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