From f2a9a2c0093f811363166ae10aaef3fc1586f9a0 Mon Sep 17 00:00:00 2001
From: Marcus Comstedt <marcus@mc.pp.se>
Date: Mon, 9 Feb 1998 05:14:36 +0100
Subject: [PATCH] Cursors.

Rev: lib/modules/Protocols.pmod/X.pmod/Requests.pmod:1.18
Rev: lib/modules/Protocols.pmod/X.pmod/Types.pmod:1.21
Rev: lib/modules/Protocols.pmod/X.pmod/Xlib.pmod:1.19
---
 .../Protocols.pmod/X.pmod/Requests.pmod       | 20 ++++++++++
 lib/modules/Protocols.pmod/X.pmod/Types.pmod  | 12 ++++++
 lib/modules/Protocols.pmod/X.pmod/Xlib.pmod   | 37 +++++++++++++++++++
 3 files changed, 69 insertions(+)

diff --git a/lib/modules/Protocols.pmod/X.pmod/Requests.pmod b/lib/modules/Protocols.pmod/X.pmod/Requests.pmod
index bf68109b7a..aa9d8f8916 100644
--- a/lib/modules/Protocols.pmod/X.pmod/Requests.pmod
+++ b/lib/modules/Protocols.pmod/X.pmod/Requests.pmod
@@ -751,6 +751,26 @@ class AllocColor
   }
 }
 
+class CreateGlyphCursor
+{
+  inherit request;
+  constant reqType = 94;
+
+  int cid;
+  int sourcefont, maskfont;
+  int sourcechar, maskchar;
+  int forered, foregreen, foreblue;
+  int backred, backgreen, backblue;
+
+  string to_string()
+  {
+    return build_request(sprintf("%4c%4c%4c%2c%2c%2c%2c%2c%2c%2c%2c",
+				 cid, sourcefont, maskfont, sourcechar,
+				 maskchar, forered, foregreen, foreblue,
+				 backred, backgreen, backblue));
+  }
+}
+
 class QueryExtension
 {
   inherit request;
diff --git a/lib/modules/Protocols.pmod/X.pmod/Types.pmod b/lib/modules/Protocols.pmod/X.pmod/Types.pmod
index 19a39b6eb8..11b5528d6d 100644
--- a/lib/modules/Protocols.pmod/X.pmod/Types.pmod
+++ b/lib/modules/Protocols.pmod/X.pmod/Types.pmod
@@ -54,6 +54,18 @@ class Font
     display->send_request(req);
   }
 
+  object CreateGlyphCursor(int sourcechar, array(int)|void foreground,
+			   array(int)|void background)
+  {
+    return display->CreateGlyphCursor(this_object(), sourcechar, 0, 0,
+				      foreground, background);
+  }
+
+}
+
+class Cursor
+{
+  inherit XResource;
 }
 
 class Visual
diff --git a/lib/modules/Protocols.pmod/X.pmod/Xlib.pmod b/lib/modules/Protocols.pmod/X.pmod/Xlib.pmod
index 5bd5ee22fd..3fc864d923 100644
--- a/lib/modules/Protocols.pmod/X.pmod/Xlib.pmod
+++ b/lib/modules/Protocols.pmod/X.pmod/Xlib.pmod
@@ -901,4 +901,41 @@ class Display
     send_request(req);
     return Types.Font(this_object(), req->fid);
   }
+
+  object CreateGlyphCursor_req(object sourcefont, object maskfont,
+			       int sourcechar, int maskchar,
+			       array(int) foreground, array(int) background)
+  {
+    object req = Requests.CreateGlyphCursor();
+    req->cid = alloc_id();
+    req->sourcefont = sourcefont->id;
+    req->maskfont = maskfont->id;
+    req->sourcechar = sourcechar;
+    req->maskchar = maskchar;
+    req->forered = foreground[0];
+    req->foregreen = foreground[1];
+    req->foreblue = foreground[2];
+    req->backred = background[0];
+    req->backgreen = background[1];
+    req->backblue = background[2];
+    return req;
+  }
+
+  object CreateGlyphCursor(object sourcefont, int sourcechar,
+			   object|void maskfont, int|void maskchar,
+			   array(int)|void foreground,
+			   array(int)|void background)
+  {
+    if(!maskfont) {
+      maskfont = sourcefont;
+      if(!maskchar)
+	maskchar = sourcechar + 1;
+    }
+    object req = CreateGlyphCursor_req(sourcefont, maskfont,
+				       sourcechar, maskchar,
+				       foreground||({0,0,0}),
+				       background||({0xffff,0xffff,0xffff}));
+    send_request(req);
+    return Types.Cursor(this_object(), req->cid);
+  }
 }
-- 
GitLab