diff --git a/lib/modules/Protocols.pmod/X.pmod/Requests.pmod b/lib/modules/Protocols.pmod/X.pmod/Requests.pmod index bf68109b7ae973611cb3caeb56c1dc6961e019af..aa9d8f89160885731902126347c0ef3ac93beb0a 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 19a39b6eb8904f534a9bbebe901625c9924bc670..11b5528d6d5e747fe544c519f0002bcc57541241 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 5bd5ee22fdb1d0b45f42222842c8139ccb3fd744..3fc864d923b9caea1cba1b35dd4ef4a6e9628b4b 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); + } }