From 3e2b3a89cecd768d9fb78df518372d3a90070538 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 17 May 2024 22:15:18 +0530 Subject: [PATCH] more work on axis fine tuning --- kittens/choose_fonts/face.go | 25 +++++++++++++++++++++++-- kittens/choose_fonts/list.go | 11 ++++++++--- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/kittens/choose_fonts/face.go b/kittens/choose_fonts/face.go index 88201beb6..4ec04747c 100644 --- a/kittens/choose_fonts/face.go +++ b/kittens/choose_fonts/face.go @@ -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() } diff --git a/kittens/choose_fonts/list.go b/kittens/choose_fonts/list.go index 5dcf7e8d6..cac6e5afe 100644 --- a/kittens/choose_fonts/list.go +++ b/kittens/choose_fonts/list.go @@ -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))))