cursor.c 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /* Copyright 2001-2003 by Norbert Freudemann, David Frese */
  2. #include "xlib.h"
  3. s48_ref_t scx_Create_Pixmap_Cursor(s48_call_t call, s48_ref_t display,
  4. s48_ref_t src, s48_ref_t mask,
  5. s48_ref_t foreground,
  6. s48_ref_t background,
  7. s48_ref_t x, s48_ref_t y) {
  8. XColor f, b;
  9. Cursor xc;
  10. scx_extract_color(call, foreground, &f);
  11. scx_extract_color(call, background, &b);
  12. xc = XCreatePixmapCursor(scx_extract_display(call, display),
  13. scx_extract_pixmap(call, src),
  14. scx_extract_pixmap(call, mask),
  15. &f, &b,
  16. s48_extract_long_2(call, x),
  17. s48_extract_long_2(call, y));
  18. return scx_enter_cursor(call, xc);
  19. }
  20. s48_ref_t scx_Create_Glyph_Cursor(s48_call_t call, s48_ref_t display,
  21. s48_ref_t src_font, s48_ref_t mask_font, s48_ref_t srcc,
  22. s48_ref_t maskc, s48_ref_t foreground, s48_ref_t background) {
  23. XColor f, b;
  24. Cursor xc;
  25. scx_extract_color(call, foreground, &f);
  26. scx_extract_color(call, background, &b);
  27. xc = XCreateGlyphCursor(scx_extract_display(call, display),
  28. scx_extract_font(call, src_font),
  29. scx_extract_font(call, mask_font),
  30. s48_extract_long_2(call, srcc),
  31. s48_extract_long_2(call, maskc),
  32. &f, &b);
  33. return scx_enter_cursor(call, xc);
  34. }
  35. s48_ref_t scx_Create_Font_Cursor(s48_call_t call, s48_ref_t display,
  36. s48_ref_t shape) {
  37. Cursor xc;
  38. xc = XCreateFontCursor(scx_extract_display(call, display),
  39. s48_extract_long_2(call, shape));
  40. return scx_enter_cursor(call, xc);
  41. }
  42. s48_ref_t scx_Define_Cursor(s48_call_t call, s48_ref_t display,
  43. s48_ref_t window, s48_ref_t cursor) {
  44. XDefineCursor(scx_extract_display(call, display),
  45. scx_extract_window(call, window),
  46. scx_extract_cursor(call, cursor));
  47. return s48_unspecific_2(call);
  48. }
  49. s48_ref_t scx_Undefine_Cursor(s48_call_t call, s48_ref_t display,
  50. s48_ref_t window) {
  51. XUndefineCursor(scx_extract_display(call, display),
  52. scx_extract_window(call, window));
  53. return s48_unspecific_2(call);
  54. }
  55. s48_ref_t scx_Recolor_Cursor(s48_call_t call, s48_ref_t display,
  56. s48_ref_t cursor, s48_ref_t foreground, s48_ref_t background) {
  57. XColor f, b;
  58. scx_extract_color(call, foreground, &f);
  59. scx_extract_color(call, background, &b);
  60. XRecolorCursor(scx_extract_display(call, display),
  61. scx_extract_cursor(call, cursor),
  62. &f, &b);
  63. return s48_unspecific_2(call);
  64. }
  65. s48_ref_t scx_Free_Cursor(s48_call_t call, s48_ref_t display, s48_ref_t cursor) {
  66. XFreeCursor(scx_extract_display(call, display),
  67. scx_extract_cursor(call, cursor));
  68. return s48_unspecific_2(call);
  69. }
  70. void scx_init_cursor(void) {
  71. S48_EXPORT_FUNCTION(scx_Create_Pixmap_Cursor);
  72. S48_EXPORT_FUNCTION(scx_Create_Glyph_Cursor);
  73. S48_EXPORT_FUNCTION(scx_Create_Font_Cursor);
  74. S48_EXPORT_FUNCTION(scx_Define_Cursor);
  75. S48_EXPORT_FUNCTION(scx_Undefine_Cursor);
  76. S48_EXPORT_FUNCTION(scx_Recolor_Cursor);
  77. S48_EXPORT_FUNCTION(scx_Free_Cursor);
  78. }