Ver Fonte

Initial Mouse Support.

Steve Thielemann há 2 anos atrás
pai
commit
1ac8ab9a80
3 ficheiros alterados com 36 adições e 3 exclusões
  1. 8 0
      door/door.go
  2. 13 3
      door/input.go
  3. 15 0
      door/menu.go

+ 8 - 0
door/door.go

@@ -48,6 +48,14 @@ var Height int                        // Screen height detected
 var Width int                         // Screen width detected
 var Inactivity int64 = 120            // Inactivity timeout
 
+type MouseInfo struct {
+	Button int
+	X      int
+	Y      int
+}
+
+var Mouse MouseInfo
+
 /*
 door32.sys:
 

+ 13 - 3
door/input.go

@@ -33,6 +33,7 @@ const (
 	XKEY_F10         = 0x102a
 	XKEY_F11         = 0x102b
 	XKEY_F12         = 0x102c
+	XKEY_MOUSE       = 0x1100
 	XKEY_UNKNOWN     = 0x1111
 )
 
@@ -207,7 +208,8 @@ func (d *Door) GetKey() int {
 			// Just escape key
 			return c
 		}
-		var extended string = string(byte(c2))
+		var extended []byte = make([]byte, 1)
+		extended[0] = byte(c2) // string = string(byte(c2))
 
 		c2 = d.getkey_or_pushback()
 		for c2 > 0 {
@@ -215,10 +217,10 @@ func (d *Door) GetKey() int {
 				d.Pushback.Push(c2)
 				break
 			}
-			extended += string(byte(c2))
+			extended = append(extended, byte(c2)) // += string(byte(c2))
 
 			var has bool
-			c2, has = extendedKeys[extended]
+			c2, has = extendedKeys[string(extended)]
 			if has {
 				// break out here if \x1b[ + letter or @
 				// break out if \x1b[ + digits + ~
@@ -228,6 +230,14 @@ func (d *Door) GetKey() int {
 			c2 = d.getkey_or_pushback()
 		}
 
+		if strings.HasPrefix(string(extended), "[M") && len(extended) == 5 {
+			Mouse.Button = int(extended[2]) - 0x20 + 1
+			Mouse.X = int(extended[3]) - 0x21 + 1
+			Mouse.Y = int(extended[4]) - 0x21 + 1
+			return XKEY_MOUSE
+			// log.Printf("MOUSE %d (%d,%d)\n", mouse_button, mouse_x, mouse_y)
+		}
+
 		log.Printf("ERROR Extended %#v\n", extended)
 		return XKEY_UNKNOWN
 	}

+ 15 - 0
door/menu.go

@@ -155,6 +155,21 @@ func (m *Menu) Choose(d *Door) int {
 			}
 		}
 
+		if event == XKEY_MOUSE {
+			if Mouse.Button == 65 {
+				// Translate Mouse Wheel Up
+				event = XKEY_UP_ARROW
+			}
+			if Mouse.Button == 66 {
+				// Translate Mouse Wheel Down
+				event = XKEY_DOWN_ARROW
+			}
+			// Look at Mouse X/Y to determine where they clicked
+			if Mouse.Button == 1 || Mouse.Button == 2 {
+				log.Println("Mouse (", Mouse.X, ",", Mouse.Y, ")")
+			}
+		}
+
 		switch event {
 		case '8':
 			if use_numberpad {