From 46c7fc5b1cb96f1a539bfacfb756f2f7ec6a0ec4 Mon Sep 17 00:00:00 2001 From: "Ronald G. Minnich" Date: Fri, 19 Dec 2025 09:11:36 -0800 Subject: [PATCH] mux_plan9.go: get it to build I don't know what was intended with Set and Clr for Plan 9. I don't understand what to do to finish up Cursor2 yet. For the moment, just trying to figure out if making this work on Plan 9 is of interest. Signed-off-by: Ronald G. Minnich --- draw/drawfcall/mux_plan9.go | 61 ++++++++++++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 4 deletions(-) diff --git a/draw/drawfcall/mux_plan9.go b/draw/drawfcall/mux_plan9.go index 6849bb85..e2d93caa 100644 --- a/draw/drawfcall/mux_plan9.go +++ b/draw/drawfcall/mux_plan9.go @@ -128,7 +128,7 @@ func (c *Conn) ReadMouse() (m Mouse, resized bool, err error) { } m.Point = image.Pt(atoi(f[1]), atoi(f[2])) m.Buttons = atoi(f[3]) - m.Msec = atoi(f[4]) + m.Msec = uint32(atoi(f[4])) if f[0] == "r" { resized = true } @@ -151,14 +151,15 @@ func (c *Conn) Cursor(cursor *Cursor) error { _, err := c.cursor.Write([]byte{0}) return err } - b := make([]byte, 2*4+len(cursor.Clr)+len(cursor.Set)) + // Replaced Clr with White, Set with Black (?) + b := make([]byte, 2*4+len(cursor.White)+len(cursor.Black)) i := 0 binary.LittleEndian.PutUint32(b[i:], uint32(cursor.Point.X)) i += 4 binary.LittleEndian.PutUint32(b[i:], uint32(cursor.Point.Y)) i += 4 - i += copy(b[i:], cursor.Clr[:]) - i += copy(b[i:], cursor.Set[:]) + i += copy(b[i:], cursor.White[:]) + i += copy(b[i:], cursor.Black[:]) _, err := c.cursor.Write(b) return err } @@ -262,3 +263,55 @@ Loop: n, err := c.data.Write(b[i:]) return n + i, err } + +// Cursor2 +// copied from ../cursor.go to avoid import cycle + +var expand = [16]uint8{ + 0x00, 0x03, 0x0c, 0x0f, + 0x30, 0x33, 0x3c, 0x3f, + 0xc0, 0xc3, 0xcc, 0xcf, + 0xf0, 0xf3, 0xfc, 0xff, +} + +// scaleCursor returns a high-DPI version of c. +func scaleCursor(c Cursor) Cursor2 { + var c2 Cursor2 + c2.X = 2 * c.X + c2.Y = 2 * c.Y + for y := 0; y < 16; y++ { + c2.White[8*y+4] = expand[c.White[2*y]>>4] + c2.White[8*y] = c2.White[8*y+4] + c2.Black[8*y+4] = expand[c.Black[2*y]>>4] + c2.Black[8*y] = c2.Black[8*y+4] + c2.White[8*y+5] = expand[c.White[2*y]&15] + c2.White[8*y+1] = c2.White[8*y+5] + c2.Black[8*y+5] = expand[c.Black[2*y]&15] + c2.Black[8*y+1] = c2.Black[8*y+5] + c2.White[8*y+6] = expand[c.White[2*y+1]>>4] + c2.White[8*y+2] = c2.White[8*y+6] + c2.Black[8*y+6] = expand[c.Black[2*y+1]>>4] + c2.Black[8*y+2] = c2.Black[8*y+6] + c2.White[8*y+7] = expand[c.White[2*y+1]&15] + c2.White[8*y+3] = c2.White[8*y+7] + c2.Black[8*y+7] = expand[c.Black[2*y+1]&15] + c2.Black[8*y+3] = c2.Black[8*y+7] + } + return c2 +} + +func (c *Conn) Cursor2(cursor *Cursor, cursor2 *Cursor2) error { + tx := &Msg{Type: Tcursor2} + if cursor == nil { + tx.Arrow = true + } else { + tx.Cursor = *cursor + if cursor2 == nil { + tx.Cursor2 = scaleCursor(*cursor) + } else { + tx.Cursor2 = *cursor2 + } + } + _ = tx + return fmt.Errorf("not yet") +}