more work on axis fine tuning

This commit is contained in:
Kovid Goyal
2024-05-17 22:15:18 +05:30
parent 81c30cc5fa
commit 3e2b3a89ce
2 changed files with 31 additions and 5 deletions

View File

@@ -4,6 +4,7 @@ import (
"fmt"
"maps"
"math"
"strconv"
"strings"
"sync"
@@ -66,7 +67,7 @@ func (self *face_panel) draw_axis(sz loop.ScreenSize, y int, ax VariableAxis, ax
if i == current_cell {
text = lp.SprintStyled(current_val_style, text)
} else {
text = tui.InternalHyperlink(text, fmt.Sprintf("axis:%d/%d:%s", i, num_of_cells-1, ax.Tag))
text = tui.InternalHyperlink(text, fmt.Sprintf("axis:%d/%d;%s", i, num_of_cells-1, ax.Tag))
}
buf.WriteString(text)
}
@@ -133,6 +134,13 @@ func (self *face_panel) draw_family_style_select(_ loop.ScreenSize, start_y int,
return y, nil
}
func (self *handler) draw_preview_header(x int) {
sz, _ := self.lp.ScreenSize()
width := int(sz.WidthCells) - x
p := center_string(self.lp.SprintStyled("italic", " preview "), width, "─")
self.lp.QueueWriteString(self.lp.SprintStyled("dim", p))
}
func (self *face_panel) draw_screen() (err error) {
lp := self.handler.lp
lp.SetCursorVisible(false)
@@ -198,7 +206,7 @@ func (self *face_panel) draw_screen() (err error) {
if int(sz.HeightCells)-y >= num_lines+2 {
y += 1
lp.MoveCursorTo(1, y+1)
lp.QueueWriteString(lp.SprintStyled(control_name_style, "Preview") + ":")
self.handler.draw_preview_header(0)
y++
lp.MoveCursorTo(1, y+1)
self.handler.graphics_manager.display_image(0, preview.Path, key.width, key.height)
@@ -250,6 +258,19 @@ func (self *face_panel) on_click(id string) (err error) {
self.set(fmt.Sprintf(`family="%s" style="%s"`, self.family, val))
case "variable_style":
self.set(self.variable_spec(val, nil))
case "axis":
p, tag, _ := strings.Cut(val, ";")
num, den, _ := strings.Cut(p, "/")
n, _ := strconv.Atoi(num)
d, _ := strconv.Atoi(den)
frac := float64(n) / float64(d)
for _, ax := range self.current_preview.Variable_data.Axes {
if ax.Tag == tag {
axval := ax.Minimum + (ax.Maximum-ax.Minimum)*frac
self.set(self.variable_spec("", map[string]float64{tag: axval}))
break
}
}
}
return self.handler.draw_screen()
}

View File

@@ -53,10 +53,15 @@ func (self *FontList) draw_search_bar() {
const SEPARATOR = "║"
func center_string(x string, width int) string {
func center_string(x string, width int, filler ...string) string {
space := " "
if len(filler) > 0 {
space = filler[0]
}
l := wcswidth.Stringwidth(x)
spaces := int(float64(width-l) / 2)
return strings.Repeat(" ", utils.Max(0, spaces)) + x
space = strings.Repeat(space, utils.Max(0, spaces))
return space + x + space
}
func (self *handler) format_title(title string, start_x int) string {
@@ -124,7 +129,7 @@ func (self *FontList) draw_preview(x, y int, sz loop.ScreenSize) (err error) {
}
y++
self.handler.lp.MoveCursorTo(x+1, y+1)
self.handler.lp.QueueWriteString(self.handler.lp.SprintStyled(control_name_style, "Preview") + ":")
self.handler.draw_preview_header(x)
y++
height_cells -= 2
height_cells = min(height_cells, int(math.Ceil(100./float64(width_cells))))