PageRenderTime 57ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/error.ml

http://github.com/dmsh/ocaml-xlib
OCaml | 47 lines | 36 code | 8 blank | 3 comment | 3 complexity | a6568f63cd6737a2bc162362dbaac5a3 MD5 | raw file
  1. (* error.ml, from: http://www.u-picardie.fr/~ferment/xwindow/erreur.htm *)
  2. (* tests the error handler *)
  3. open Xlib
  4. let errorHandler ~dpy ~event =
  5. Printf.printf "#### ERROR HANDLER ####\n%!";
  6. ;;
  7. let () =
  8. let display = xOpenDisplay "" in
  9. let screen = xDefaultScreen display in
  10. let gc = xDefaultGC display screen in
  11. let root = xRootWindow display screen in
  12. let white_pixel = xWhitePixel display screen in
  13. let black_pixel = xBlackPixel display screen in
  14. let win = xCreateSimpleWindow display root 0 0 200 150 2
  15. black_pixel white_pixel in
  16. xSelectInput display win [ExposureMask; ButtonPressMask];
  17. xStoreName display win "erreur";
  18. xMapWindow display win;
  19. (* will produce an error which will be handled by the error handler *)
  20. let wim = (Obj.magic 0 : Xlib.window) in
  21. xSetErrorHandler errorHandler;
  22. let ev = new_xEvent() in
  23. while true do
  24. xNextEvent display ev;
  25. match xEventType ev with
  26. | Expose ->
  27. xDrawString display win gc 10 30 "Hello !";
  28. | ButtonPress ->
  29. let d = xButtonEvent_datas(to_xButtonEvent ev) in
  30. if ((d.button_x + d.button_y) mod 2) = 0 then begin
  31. xDrawString display win gc (d.button_x) (d.button_y) "hi";
  32. xDrawString display win gc (d.button_x +20) (d.button_y) "ho";
  33. end else begin
  34. xDrawString display win gc (d.button_x) (d.button_y) "hi";
  35. xDrawString display wim gc (d.button_x +20) (d.button_y) "ho";
  36. end;
  37. | _ -> ()
  38. done;
  39. ;;