You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

188 lines
5.4 KiB

  1. /**
  2. * libcaca Java bindings for libcaca
  3. * Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org>
  4. *
  5. * $Id$
  6. *
  7. * This library is free software. It comes without any warranty, to
  8. * the extent permitted by applicable law. You can redistribute it
  9. * and/or modify it under the terms of the Do What The Fuck You Want
  10. * To Public License, Version 2, as published by Sam Hocevar. See
  11. * http://sam.zoy.org/wtfpl/COPYING for more details.
  12. */
  13. #include "caca_java_common.h"
  14. #include "org_zoy_caca_Display.h"
  15. #include <stdlib.h>
  16. #include "caca.h"
  17. #define DISPLAY_CREATION_ERROR "Cannot create display"
  18. JNIEXPORT jlong JNICALL
  19. Java_org_zoy_caca_Display_createDisplayAndCanvas(JNIEnv *env, jclass cls)
  20. {
  21. caca_display_t *display = caca_create_display(NULL);
  22. if(display == NULL) {
  23. THROW_EX(DISPLAY_CREATION_ERROR);
  24. return 0;
  25. }
  26. return (jlong)display;
  27. }
  28. JNIEXPORT jlong JNICALL
  29. Java_org_zoy_caca_Display_createDisplay(JNIEnv *env, jclass cls, jlong canvas_ptr)
  30. {
  31. caca_display_t *display = caca_create_display((caca_canvas_t *)canvas_ptr);
  32. if(display == NULL) {
  33. THROW_EX(DISPLAY_CREATION_ERROR);
  34. return 0;
  35. }
  36. return (jlong)display;
  37. }
  38. JNIEXPORT jlong JNICALL
  39. Java_org_zoy_caca_Display_createDisplayAndCanvasWithDriver(JNIEnv *env, jclass cls,
  40. jstring driver_name)
  41. {
  42. const char *driver_name_chars = (*env)->GetStringUTFChars(env, driver_name, 0);
  43. caca_display_t *ret = caca_create_display_with_driver(NULL, driver_name_chars);
  44. (*env)->ReleaseStringUTFChars(env, driver_name, driver_name_chars);
  45. if(ret == NULL) {
  46. THROW_EX(DISPLAY_CREATION_ERROR);
  47. return 0;
  48. }
  49. return (jlong)ret;
  50. }
  51. JNIEXPORT jlong JNICALL
  52. Java_org_zoy_caca_Display_createDisplayWithDriver(JNIEnv *env, jclass cls,
  53. jlong canvas_ptr, jstring driver_name)
  54. {
  55. const char *driver_name_chars = (*env)->GetStringUTFChars(env, driver_name, 0);
  56. caca_display_t *ret = caca_create_display_with_driver((caca_canvas_t *)canvas_ptr, driver_name_chars);
  57. (*env)->ReleaseStringUTFChars(env, driver_name, driver_name_chars);
  58. if(ret == NULL) {
  59. THROW_EX(DISPLAY_CREATION_ERROR);
  60. return 0;
  61. }
  62. return (jlong)ret;
  63. }
  64. JNIEXPORT jobjectArray JNICALL
  65. Java_org_zoy_caca_Display_getDisplayDriverList(JNIEnv *env, jclass cls)
  66. {
  67. const char *const *drivers = caca_get_display_driver_list();
  68. return caca_java_to_string_array(env, drivers);
  69. }
  70. JNIEXPORT void JNICALL
  71. Java_org_zoy_caca_Display_setDisplayDriver(JNIEnv *env, jclass cls, jlong ptr, jstring driver_name)
  72. {
  73. const char *driver_name_chars = (*env)->GetStringUTFChars(env, driver_name, 0);
  74. caca_set_display_driver((caca_display_t *)ptr, driver_name_chars);
  75. (*env)->ReleaseStringUTFChars(env, driver_name, driver_name_chars);
  76. }
  77. JNIEXPORT jstring JNICALL
  78. Java_org_zoy_caca_Display_getDisplayDriver(JNIEnv *env, jclass cls, jlong ptr)
  79. {
  80. return (*env)->NewStringUTF(env, caca_get_display_driver((caca_display_t *)ptr));
  81. }
  82. JNIEXPORT jlong JNICALL
  83. Java_org_zoy_caca_Display_getDisplayCanvas(JNIEnv *env, jclass cls, jlong ptr)
  84. {
  85. return (jlong)caca_get_canvas((caca_display_t *)ptr);
  86. }
  87. JNIEXPORT void JNICALL
  88. Java_org_zoy_caca_Display_displayRefresh(JNIEnv *env, jclass cls, jlong ptr)
  89. {
  90. caca_refresh_display((caca_display_t *)ptr);
  91. }
  92. JNIEXPORT void JNICALL
  93. Java_org_zoy_caca_Display_setDisplayTime(JNIEnv *env, jclass cls, jlong ptr, jint time)
  94. {
  95. caca_set_display_time((caca_display_t *)ptr, time);
  96. }
  97. JNIEXPORT jint JNICALL
  98. Java_org_zoy_caca_Display_getDisplayTime(JNIEnv *env, jclass cls, jlong ptr)
  99. {
  100. return caca_get_display_time((caca_display_t *)ptr);
  101. }
  102. JNIEXPORT jint JNICALL
  103. Java_org_zoy_caca_Display_getDisplayWidth(JNIEnv *env, jclass cls, jlong ptr)
  104. {
  105. return caca_get_display_width((caca_display_t *)ptr);
  106. }
  107. JNIEXPORT jint JNICALL
  108. Java_org_zoy_caca_Display_getDisplayHeight(JNIEnv *env, jclass cls, jlong ptr)
  109. {
  110. return caca_get_display_height((caca_display_t *)ptr);
  111. }
  112. JNIEXPORT void JNICALL
  113. Java_org_zoy_caca_Display_setDisplayTitle(JNIEnv *env, jclass cls, jlong ptr, jstring title)
  114. {
  115. const char *title_chars = (*env)->GetStringUTFChars(env, title, 0);
  116. caca_set_display_title((caca_display_t *)ptr, title_chars);
  117. (*env)->ReleaseStringUTFChars(env, title, title_chars);
  118. }
  119. JNIEXPORT void JNICALL
  120. Java_org_zoy_caca_Display_setDisplayMouse(JNIEnv *env, jclass cls, jlong ptr, jboolean st)
  121. {
  122. caca_set_mouse((caca_display_t *)ptr, st);
  123. }
  124. JNIEXPORT void JNICALL
  125. Java_org_zoy_caca_Display_setDisplayCursor(JNIEnv *env, jclass cls, jlong ptr, jboolean st)
  126. {
  127. caca_set_cursor((caca_display_t *)ptr, st);
  128. }
  129. JNIEXPORT jlong JNICALL
  130. Java_org_zoy_caca_Display_getDisplayEvent(JNIEnv *env, jclass cls, jlong ptr, jint mask, jint timeout)
  131. {
  132. caca_event_t *ev = malloc(sizeof(caca_event_t));
  133. if (caca_get_event((caca_display_t *)ptr, mask, ev, timeout))
  134. {
  135. return (jlong) ev;
  136. }
  137. free(ev);
  138. (*env)->ThrowNew(env, (*env)->FindClass(env, "org/zoy/caca/TimeoutException"), "No event received");
  139. return -1;
  140. }
  141. JNIEXPORT jint JNICALL
  142. Java_org_zoy_caca_Display_getDisplayMouseX(JNIEnv *env, jclass cls, jlong ptr)
  143. {
  144. return caca_get_mouse_x((caca_display_t *)ptr);
  145. }
  146. JNIEXPORT jint JNICALL
  147. Java_org_zoy_caca_Display_getDisplayMouseY(JNIEnv *env, jclass cls, jlong ptr)
  148. {
  149. return caca_get_mouse_y((caca_display_t *)ptr);
  150. }
  151. JNIEXPORT void JNICALL
  152. Java_org_zoy_caca_Display_freeDisplay(JNIEnv *env, jclass cls, jlong ptr)
  153. {
  154. caca_free_display((caca_display_t *)ptr);
  155. }