pixmap.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /* Copyright 2001-2003 by Norbert Freudemann, David Frese */
  2. #include "xlib.h"
  3. s48_ref_t scx_Create_Pixmap(s48_call_t call, s48_ref_t display,
  4. s48_ref_t drawable, s48_ref_t w, s48_ref_t h, s48_ref_t depth) {
  5. Pixmap pm;
  6. pm = XCreatePixmap(scx_extract_display(call, display),
  7. scx_extract_drawable(call, drawable),
  8. (int)s48_extract_long_2(call, w),
  9. (int)s48_extract_long_2(call, h),
  10. (int)s48_extract_long_2(call, depth));
  11. return scx_enter_pixmap(call, pm);
  12. }
  13. s48_ref_t scx_Free_Pixmap(s48_call_t call, s48_ref_t display, s48_ref_t pixmap) {
  14. XFreePixmap(scx_extract_display(call, display),
  15. scx_extract_pixmap(call, pixmap));
  16. return s48_unspecific_2(call);
  17. }
  18. s48_ref_t scx_Read_Bitmap_File(s48_call_t call, s48_ref_t display,
  19. s48_ref_t drawable, s48_ref_t filename)
  20. {
  21. unsigned width, height;
  22. int res, xhot, yhot;
  23. Pixmap bitmap;
  24. s48_ref_t ret = s48_false_2(call);
  25. res = XReadBitmapFile(scx_extract_display(call, display),
  26. scx_extract_drawable(call, drawable),
  27. s48_extract_string(call, filename),
  28. &width, &height, &bitmap,
  29. &xhot, &yhot);
  30. if (res != BitmapSuccess)
  31. return s48_enter_long_2(call, res);
  32. ret = s48_cons_2(call, s48_enter_long_2(call, yhot), s48_null_2(call));
  33. ret = s48_cons_2(call, s48_enter_long_2(call, xhot), ret);
  34. ret = s48_cons_2(call, s48_enter_long_2(call, height), ret);
  35. ret = s48_cons_2(call, s48_enter_long_2(call, width), ret);
  36. ret = s48_cons_2(call, scx_enter_pixmap(call, bitmap), ret);
  37. return ret;
  38. }
  39. s48_ref_t scx_Write_Bitmap_File(s48_call_t call, s48_ref_t display,
  40. s48_ref_t filename, s48_ref_t bitmap, s48_ref_t w, s48_ref_t h,
  41. s48_ref_t x, s48_ref_t y)
  42. {
  43. int ret;
  44. ret = XWriteBitmapFile(scx_extract_display(call, display),
  45. s48_extract_string(call, filename),
  46. scx_extract_pixmap(call, bitmap),
  47. (int)s48_extract_long_2(call, w),
  48. (int)s48_extract_long_2(call, h),
  49. (int)s48_extract_long_2(call, x),
  50. (int)s48_extract_long_2(call, y));
  51. return s48_enter_long_2(call, ret);
  52. }
  53. s48_ref_t scx_Create_Bitmap_From_Data(s48_call_t call, s48_ref_t display,
  54. s48_ref_t drawable, s48_ref_t data, s48_ref_t w, s48_ref_t h)
  55. {
  56. Pixmap pm;
  57. pm = XCreateBitmapFromData(scx_extract_display(call, display),
  58. scx_extract_drawable(call, drawable),
  59. s48_extract_string(call, data),
  60. s48_extract_long_2(call, w),
  61. s48_extract_long_2(call, h));
  62. return scx_enter_pixmap(call, pm);
  63. }
  64. s48_ref_t scx_Create_Pixmap_From_Bitmap_Data(s48_call_t call,
  65. s48_ref_t display, s48_ref_t drawable, s48_ref_t data,
  66. s48_ref_t w,s48_ref_t h, s48_ref_t f, s48_ref_t b, s48_ref_t depth)
  67. {
  68. Pixmap pm;
  69. pm = XCreatePixmapFromBitmapData(scx_extract_display(call, display),
  70. scx_extract_drawable(call, drawable),
  71. s48_extract_string(call, data),
  72. (int)s48_extract_long_2(call, w),
  73. (int)s48_extract_long_2(call, h),
  74. scx_extract_pixel(call, f),
  75. scx_extract_pixel(call, b),
  76. (int)s48_extract_long_2(call, depth));
  77. return scx_enter_pixmap(call, pm);
  78. }
  79. void scx_init_pixmap(void) {
  80. S48_EXPORT_FUNCTION(scx_Free_Pixmap);
  81. S48_EXPORT_FUNCTION(scx_Create_Pixmap);
  82. S48_EXPORT_FUNCTION(scx_Read_Bitmap_File);
  83. S48_EXPORT_FUNCTION(scx_Write_Bitmap_File);
  84. S48_EXPORT_FUNCTION(scx_Create_Bitmap_From_Data);
  85. S48_EXPORT_FUNCTION(scx_Create_Pixmap_From_Bitmap_Data);
  86. }