Tue, 02 Dec 2008
Ocaml : Null Cursor in lablgtk.
I need to be able to hide the cursor in an Ocaml/lablgtk/Cairo program I'm writing (a touchscreen calibration utility to go with the Zytouch driver). Usually this is done by creating a small 1x1 pixel cursor that is transparent, but I couldn't find any existing Ocaml/lablgtk code to do it. With a little help from Jacques Garrigue on the lablgtk mailing list I came up with the following function to create a cursor:
let create_null_cursor win = let w, h = 1, 1 in let mask = Gdk.Bitmap.create ~window:win ~width:w ~height:h () in let pixmap = Gdk.Pixmap.create ~window:win ~width:w ~height:h ~depth:1 () in let color = Gdk.Color.alloc (Gdk.Color.get_system_colormap ()) (`RGB (0, 0, 0)) in Gdk.Cursor.create_from_pixmap pixmap mask color color w h
which I use as follows:
let win = GWindow.window ~resizable:true () in ignore (win#connect#destroy GMain.quit) ; (* More code here. *) win#show () ; (* Must set the cursor after win#show () or we get a Gpointer.NULL exception. *) let cursor = create_null_cursor win#misc#window in Gdk.Window.set_cursor win#misc#window cursor ; GMain.main ()
Problem solved.
Posted at: 21:36 | Category: CodeHacking/Ocaml | Permalink