123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- package choose_fonts
- import (
- "fmt"
- "strings"
- "kitty/tools/tui/graphics"
- "kitty/tools/tui/loop"
- "kitty/tools/utils"
- )
- var _ = fmt.Print
- type image struct {
- id, image_number uint32
- current_file string
- }
- func (i image) new_graphics_command() *graphics.GraphicsCommand {
- gc := &graphics.GraphicsCommand{}
- if i.id > 0 {
- gc.SetImageId(i.id)
- } else {
- gc.SetImageNumber(i.image_number)
- }
- return gc
- }
- type graphics_manager struct {
- main, bold, italic, bi, extra image
- lp *loop.Loop
- images [5]*image
- }
- func (g *graphics_manager) initialize(lp *loop.Loop) {
- g.images = [5]*image{&g.main, &g.bold, &g.italic, &g.bi, &g.extra}
- g.lp = lp
- payload := []byte("123")
- buf := strings.Builder{}
- gc := &graphics.GraphicsCommand{}
- gc.SetImageNumber(7891230).SetTransmission(graphics.GRT_transmission_direct).SetDataWidth(1).SetDataHeight(1).SetFormat(
- graphics.GRT_format_rgb).SetDataSize(uint64(len(payload)))
- d := func() uint32 {
- im := gc.ImageNumber()
- im++
- gc.SetImageNumber(im)
- _ = gc.WriteWithPayloadTo(&buf, payload)
- return im
- }
- for _, img := range g.images {
- img.image_number = d()
- }
- lp.QueueWriteString(buf.String())
- }
- func (g *graphics_manager) clear_placements() {
- buf := strings.Builder{}
- for _, img := range g.images {
- if img.current_file == "" {
- continue
- }
- gc := img.new_graphics_command()
- gc.SetAction(graphics.GRT_action_delete)
- gc.SetDelete(utils.IfElse(img.id > 0, graphics.GRT_delete_by_id, graphics.GRT_delete_by_number))
- gc.WriteWithPayloadTo(&buf, nil)
- }
- g.lp.QueueWriteString(buf.String())
- }
- func (g *graphics_manager) display_image(slot int, path string, img_width, img_height int) {
- img := g.images[slot]
- if img.current_file != path {
- gc := img.new_graphics_command()
- gc.SetAction(graphics.GRT_action_transmit).SetDataWidth(uint64(img_width)).SetDataHeight(uint64(img_height)).SetTransmission(graphics.GRT_transmission_file)
- gc.WriteWithPayloadToLoop(g.lp, []byte(path))
- img.current_file = path
- }
- gc := img.new_graphics_command()
- gc.SetAction(graphics.GRT_action_display).SetCursorMovement(graphics.GRT_cursor_static)
- gc.WriteWithPayloadToLoop(g.lp, nil)
- }
- func (g *graphics_manager) on_response(gc *graphics.GraphicsCommand) (err error) {
- if gc.ResponseMessage() != "OK" {
- return fmt.Errorf("Failed to load image with error: %s", gc.ResponseMessage())
- }
- for _, img := range g.images {
- if img.image_number == gc.ImageNumber() {
- img.id = gc.ImageId()
- break
- }
- }
- return
- }
- func (g *graphics_manager) finalize() {
- buf := strings.Builder{}
- for _, img := range g.images {
- gc := img.new_graphics_command()
- gc.SetAction(graphics.GRT_action_delete)
- gc.SetDelete(utils.IfElse(img.id > 0, graphics.GRT_free_by_id, graphics.GRT_free_by_number))
- gc.WriteWithPayloadTo(&buf, nil)
- }
- g.lp.QueueWriteString(buf.String())
- }
|