您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

org_zoy_caca_Canvas.c 12 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389
  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 "org_zoy_caca_Canvas.h"
  14. #include "caca.h"
  15. JNIEXPORT jint JNICALL
  16. Java_org_zoy_caca_Canvas_getCursorX(JNIEnv *env, jclass cls, jlong ptr)
  17. {
  18. return caca_get_cursor_x((caca_canvas_t *)ptr);
  19. }
  20. JNIEXPORT jint JNICALL
  21. Java_org_zoy_caca_Canvas_getCursorY (JNIEnv *env, jclass cls, jlong ptr)
  22. {
  23. return caca_get_cursor_y((caca_canvas_t *)ptr);
  24. }
  25. JNIEXPORT void JNICALL
  26. Java_org_zoy_caca_Canvas_setCursorXY(JNIEnv *env, jclass cls, jlong ptr, jint x, jint y)
  27. {
  28. caca_gotoxy((caca_canvas_t *)ptr, x, y);
  29. }
  30. JNIEXPORT jint JNICALL
  31. Java_org_zoy_caca_Canvas_getHandleX(JNIEnv *env, jclass cls, jlong ptr)
  32. {
  33. return caca_get_canvas_handle_x((caca_canvas_t *)ptr);
  34. }
  35. JNIEXPORT jint JNICALL
  36. Java_org_zoy_caca_Canvas_getHandleY(JNIEnv *env, jclass cls, jlong ptr)
  37. {
  38. return caca_get_canvas_handle_x((caca_canvas_t *)ptr);
  39. }
  40. JNIEXPORT void JNICALL
  41. Java_org_zoy_caca_Canvas_setHandleXY(JNIEnv *env, jclass cls, jlong ptr, jint x, jint y)
  42. {
  43. caca_set_canvas_handle((caca_canvas_t *)ptr, x, y);
  44. }
  45. JNIEXPORT jlong JNICALL
  46. Java_org_zoy_caca_Canvas_createCanvas(JNIEnv *env, jclass cls, jint w, jint h)
  47. {
  48. return (jlong)caca_create_canvas(w, h);
  49. }
  50. JNIEXPORT jint JNICALL
  51. Java_org_zoy_caca_Canvas_getCanvasWidth(JNIEnv *env, jclass cls, jlong ptr)
  52. {
  53. return caca_get_canvas_width((caca_canvas_t *)ptr);
  54. }
  55. JNIEXPORT jint JNICALL
  56. Java_org_zoy_caca_Canvas_getCanvasHeight(JNIEnv *env, jclass cls, jlong ptr)
  57. {
  58. return caca_get_canvas_height((caca_canvas_t *)ptr);
  59. }
  60. JNIEXPORT void JNICALL
  61. Java_org_zoy_caca_Canvas_setCanvasSize(JNIEnv *env, jclass cls, jlong ptr, jint w, jint h)
  62. {
  63. caca_set_canvas_size((caca_canvas_t *)ptr, w, h);
  64. }
  65. JNIEXPORT void JNICALL
  66. Java_org_zoy_caca_Canvas_clearCanvas(JNIEnv *env, jclass cls, jlong ptr)
  67. {
  68. caca_clear_canvas((caca_canvas_t *)ptr);
  69. }
  70. JNIEXPORT jint JNICALL
  71. Java_org_zoy_caca_Canvas_getCanvasChar(JNIEnv *env, jclass cls, jlong ptr, jint x, jint y)
  72. {
  73. return caca_get_char((caca_canvas_t *)ptr, x, y);
  74. }
  75. JNIEXPORT void JNICALL
  76. Java_org_zoy_caca_Canvas_putCanvasChar(JNIEnv *env, jclass cls, jlong ptr, jint x, jint y, jint ch)
  77. {
  78. caca_put_char((caca_canvas_t *)ptr, x, y, ch);
  79. }
  80. JNIEXPORT void JNICALL
  81. Java_org_zoy_caca_Canvas_putCanvasString(JNIEnv *env, jclass cls, jlong ptr, jint x, jint y, jstring s)
  82. {
  83. const char *chars;
  84. chars = (*env)->GetStringUTFChars(env, s, 0);
  85. caca_put_str((caca_canvas_t *)ptr, x, y, chars);
  86. (*env)->ReleaseStringUTFChars(env, s, chars);
  87. }
  88. JNIEXPORT void JNICALL
  89. Java_org_zoy_caca_Canvas_blitCanvas(JNIEnv *env, jclass cls, jlong ptr, jint x,
  90. jint y, jlong cv, jlong mask)
  91. {
  92. caca_blit((caca_canvas_t *)ptr, x, y, (caca_canvas_t *)cv, (caca_canvas_t *)mask);
  93. }
  94. JNIEXPORT void JNICALL
  95. Java_org_zoy_caca_Canvas_setCanvasBoundaries(JNIEnv *env, jclass cls, jlong ptr,
  96. jint x, jint y, jint w, jint h)
  97. {
  98. caca_set_canvas_boundaries((caca_canvas_t *)ptr, x, y, w, h);
  99. }
  100. JNIEXPORT void JNICALL
  101. Java_org_zoy_caca_Canvas_invertCanvas(JNIEnv *env, jclass cls, jlong ptr)
  102. {
  103. caca_invert((caca_canvas_t *)ptr);
  104. }
  105. JNIEXPORT void JNICALL
  106. Java_org_zoy_caca_Canvas_flipCanvas(JNIEnv *env, jclass cls, jlong ptr)
  107. {
  108. caca_flip((caca_canvas_t *)ptr);
  109. }
  110. JNIEXPORT void JNICALL
  111. Java_org_zoy_caca_Canvas_flopCanvas(JNIEnv *env, jclass cls, jlong ptr)
  112. {
  113. caca_flop((caca_canvas_t *)ptr);
  114. }
  115. JNIEXPORT void JNICALL
  116. Java_org_zoy_caca_Canvas_rotateCanvas180(JNIEnv *env, jclass cls, jlong ptr)
  117. {
  118. caca_rotate_180((caca_canvas_t *)ptr);
  119. }
  120. JNIEXPORT void JNICALL
  121. Java_org_zoy_caca_Canvas_rotateCanvasLeft(JNIEnv *env, jclass cls, jlong ptr)
  122. {
  123. caca_rotate_left((caca_canvas_t *)ptr);
  124. }
  125. JNIEXPORT void JNICALL
  126. Java_org_zoy_caca_Canvas_rotateCanvasRight(JNIEnv *env, jclass cls, jlong ptr)
  127. {
  128. caca_rotate_right((caca_canvas_t *)ptr);
  129. }
  130. JNIEXPORT void JNICALL
  131. Java_org_zoy_caca_Canvas_stretchCanvasLeft(JNIEnv *env, jclass cls, jlong ptr)
  132. {
  133. caca_stretch_left((caca_canvas_t *)ptr);
  134. }
  135. JNIEXPORT void JNICALL
  136. Java_org_zoy_caca_Canvas_stretchCanvasRight(JNIEnv *env, jclass cls, jlong ptr)
  137. {
  138. caca_stretch_right((caca_canvas_t *)ptr);
  139. }
  140. JNIEXPORT jint JNICALL
  141. Java_org_zoy_caca_Canvas_getCanvasAttribute(JNIEnv *env, jclass cls, jlong ptr, jint x, jint y)
  142. {
  143. return caca_get_attr((caca_canvas_t *)ptr, x, y);
  144. }
  145. JNIEXPORT void JNICALL
  146. Java_org_zoy_caca_Canvas_setCanvasAttribute(JNIEnv *env, jclass cls, jlong ptr, jint attr)
  147. {
  148. caca_set_attr((caca_canvas_t *)ptr, attr);
  149. }
  150. JNIEXPORT void JNICALL
  151. Java_org_zoy_caca_Canvas_putCanvasAttribute(JNIEnv *env, jclass cls, jlong ptr,
  152. jint x, jint y, jint attr)
  153. {
  154. caca_put_attr((caca_canvas_t *)ptr, x, y, attr);
  155. }
  156. JNIEXPORT void JNICALL
  157. Java_org_zoy_caca_Canvas_setCanvasColorAnsi(JNIEnv *env, jclass cls, jlong ptr, jbyte fg, jbyte bg)
  158. {
  159. caca_set_color_ansi((caca_canvas_t *)ptr, fg, bg);
  160. }
  161. JNIEXPORT void JNICALL
  162. Java_org_zoy_caca_Canvas_setCanvasColorArgb(JNIEnv *env, jclass cls, jlong ptr, jshort fg, jshort bg)
  163. {
  164. caca_set_color_argb((caca_canvas_t *)ptr, fg, bg);
  165. }
  166. JNIEXPORT void JNICALL
  167. Java_org_zoy_caca_Canvas_canvasDrawLine(JNIEnv *env, jclass cls, jlong ptr, jint x1, jint y1,
  168. jint x2, jint y2, jint ch)
  169. {
  170. caca_draw_line((caca_canvas_t *)ptr, x1, y1, x2, y2, ch);
  171. }
  172. JNIEXPORT void JNICALL
  173. Java_org_zoy_caca_Canvas_canvasDrawPolyline(JNIEnv *env, jclass cls, jlong ptr,
  174. jintArray xs, jintArray ys, jint ch)
  175. {
  176. jsize size;
  177. jint *x_elems;
  178. jint *y_elems;
  179. size = (*env)->GetArrayLength(env, xs);
  180. x_elems = (*env)->GetIntArrayElements(env, xs, 0);
  181. y_elems = (*env)->GetIntArrayElements(env, ys, 0);
  182. caca_draw_polyline((caca_canvas_t *)ptr, x_elems, y_elems, size, ch);
  183. (*env)->ReleaseIntArrayElements(env, xs, x_elems, 0);
  184. (*env)->ReleaseIntArrayElements(env, ys, y_elems, 0);
  185. }
  186. JNIEXPORT void JNICALL
  187. Java_org_zoy_caca_Canvas_canvasDrawThinLine(JNIEnv *env, jclass cls, jlong ptr,
  188. jint x1, jint y1, jint x2, jint y2)
  189. {
  190. caca_draw_thin_line((caca_canvas_t *)ptr, x1, y1, x2, y2);
  191. }
  192. JNIEXPORT void JNICALL
  193. Java_org_zoy_caca_Canvas_canvasDrawThinPolyline(JNIEnv *env, jclass cls, jlong ptr,
  194. jintArray xs, jintArray ys)
  195. {
  196. jsize size;
  197. jint *x_elems;
  198. jint *y_elems;
  199. size = (*env)->GetArrayLength(env, xs);
  200. x_elems = (*env)->GetIntArrayElements(env, xs, 0);
  201. y_elems = (*env)->GetIntArrayElements(env, ys, 0);
  202. caca_draw_thin_polyline((caca_canvas_t *)ptr, x_elems, y_elems, size);
  203. (*env)->ReleaseIntArrayElements(env, xs, x_elems, 0);
  204. (*env)->ReleaseIntArrayElements(env, ys, y_elems, 0);
  205. }
  206. JNIEXPORT void JNICALL
  207. Java_org_zoy_caca_Canvas_canvasDrawCircle(JNIEnv * env, jclass cls, jlong ptr,
  208. jint x, jint y, jint r, jint ch)
  209. {
  210. caca_draw_circle((caca_canvas_t *)ptr, x, y, r, ch);
  211. }
  212. JNIEXPORT void JNICALL
  213. Java_org_zoy_caca_Canvas_canvasDrawEllipse(JNIEnv *env, jclass cls, jlong ptr,
  214. jint x, jint y, jint a, jint b, jint ch)
  215. {
  216. caca_draw_ellipse((caca_canvas_t *)ptr, x, y, a, b, ch);
  217. }
  218. JNIEXPORT void JNICALL
  219. Java_org_zoy_caca_Canvas_canvasDrawThinEllipse(JNIEnv *env, jclass cls, jlong ptr,
  220. jint x, jint y, jint a, jint b)
  221. {
  222. caca_draw_thin_ellipse((caca_canvas_t *)ptr, x, y, a, b);
  223. }
  224. JNIEXPORT void JNICALL
  225. Java_org_zoy_caca_Canvas_canvasFillEllipse(JNIEnv *env, jclass cls, jlong ptr, jint x,
  226. jint y, jint a, jint b, jint ch)
  227. {
  228. caca_fill_ellipse((caca_canvas_t *)ptr, x, y, a, b, ch);
  229. }
  230. JNIEXPORT void JNICALL
  231. Java_org_zoy_caca_Canvas_canvasDrawBox(JNIEnv *env, jclass cls, jlong ptr, jint x, jint y,
  232. jint w, jint h, jint ch)
  233. {
  234. caca_draw_box((caca_canvas_t *)ptr, x, y, w, h, ch);
  235. }
  236. JNIEXPORT void JNICALL
  237. Java_org_zoy_caca_Canvas_canvasDrawThinBox(JNIEnv *env, jclass cls, jlong ptr,
  238. jint x, jint y, jint w, jint h)
  239. {
  240. caca_draw_thin_box((caca_canvas_t *)ptr, x, y, w, h);
  241. }
  242. JNIEXPORT void JNICALL
  243. Java_org_zoy_caca_Canvas_canvasDrawCp437Box(JNIEnv *env, jclass cls, jlong ptr,
  244. jint x, jint y, jint w, jint h)
  245. {
  246. caca_draw_cp437_box((caca_canvas_t *)ptr, x, y, w, h);
  247. }
  248. JNIEXPORT void JNICALL
  249. Java_org_zoy_caca_Canvas_canvasFillBox(JNIEnv *env, jclass cls, jlong ptr,
  250. jint x, jint y, jint w, jint h, jint ch)
  251. {
  252. caca_fill_box((caca_canvas_t *)ptr, x, y, w, h, ch);
  253. }
  254. JNIEXPORT void JNICALL
  255. Java_org_zoy_caca_Canvas_canvasDrawTriangle(JNIEnv *env, jclass cls, jlong ptr,
  256. jint x1, jint y1, jint x2, jint y2,
  257. jint x3, jint y3, jint ch)
  258. {
  259. caca_draw_triangle((caca_canvas_t *)ptr, x1, y1, x2, y2, x3, y3, ch);
  260. }
  261. JNIEXPORT void JNICALL
  262. Java_org_zoy_caca_Canvas_canvasDrawThinTriangle(JNIEnv *env, jclass cls, jlong ptr,
  263. jint x1, jint y1, jint x2, jint y2,
  264. jint x3, jint y3)
  265. {
  266. caca_draw_thin_triangle((caca_canvas_t *)ptr, x1, y1, x2, y2, x3, y3);
  267. }
  268. JNIEXPORT void JNICALL
  269. Java_org_zoy_caca_Canvas_canvasFillTriangle(JNIEnv *env, jclass cls, jlong ptr,
  270. jint x1, jint y1, jint x2, jint y2,
  271. jint x3, jint y3, jint ch)
  272. {
  273. caca_fill_triangle((caca_canvas_t *)ptr, x1, y1, x2, y2, x3, y3, ch);
  274. }
  275. JNIEXPORT jint JNICALL
  276. Java_org_zoy_caca_Canvas_getCanvasFrameCount(JNIEnv *env, jclass cls, jlong ptr)
  277. {
  278. return caca_get_frame_count((caca_canvas_t *)ptr);
  279. }
  280. JNIEXPORT void JNICALL
  281. Java_org_zoy_caca_Canvas_setCanvasFrame(JNIEnv *env, jclass cls, jlong ptr, jint id)
  282. {
  283. caca_set_frame((caca_canvas_t *)ptr, id);
  284. }
  285. JNIEXPORT jstring JNICALL
  286. Java_org_zoy_caca_Canvas_getCanvasFrameName(JNIEnv *env, jclass cls, jlong ptr)
  287. {
  288. const char *frame_name = caca_get_frame_name((caca_canvas_t *)ptr);
  289. return (*env)->NewStringUTF(env, frame_name);
  290. }
  291. JNIEXPORT void JNICALL
  292. Java_org_zoy_caca_Canvas_setCanvasFrameName(JNIEnv *env, jclass cls, jlong ptr, jstring frame_name)
  293. {
  294. const char *frame_name_chars = (*env)->GetStringUTFChars(env, frame_name, 0);
  295. caca_set_frame_name((caca_canvas_t *)ptr, frame_name_chars);
  296. (*env)->ReleaseStringUTFChars(env, frame_name, frame_name_chars);
  297. }
  298. JNIEXPORT void JNICALL
  299. Java_org_zoy_caca_Canvas_createCanvasFrame(JNIEnv *env, jclass cls, jlong ptr, jint id)
  300. {
  301. caca_create_frame((caca_canvas_t *)ptr, id);
  302. }
  303. JNIEXPORT void JNICALL
  304. Java_org_zoy_caca_Canvas_freeCanvasFrame(JNIEnv *env, jclass cls, jlong ptr, jint id)
  305. {
  306. caca_free_frame((caca_canvas_t *)ptr, id);
  307. }
  308. JNIEXPORT void JNICALL
  309. Java_org_zoy_caca_Canvas_canvasRender(JNIEnv *env, jclass cls, jlong ptr, jlong font_ptr,
  310. jbyteArray buf, jint width, jint height, jint pitch)
  311. {
  312. jbyte *elems = (*env)->GetByteArrayElements(env, buf, 0);
  313. caca_render_canvas((caca_canvas_t *)ptr, (caca_font_t *)font_ptr, elems, width, height, pitch);
  314. (*env)->ReleaseByteArrayElements(env, buf, elems, 0);
  315. }
  316. JNIEXPORT void JNICALL
  317. Java_org_zoy_caca_Canvas_canvasDitherBitmap(JNIEnv *env, jclass cls, jlong ptr, jint x, jint y,
  318. jint w, jint h, jlong dither_ptr, jbyteArray pixels)
  319. {
  320. jbyte *elems = (*env)->GetByteArrayElements(env, pixels, 0);
  321. jsize size = (*env)->GetArrayLength(env, pixels);
  322. caca_dither_bitmap((caca_canvas_t *)ptr, x, y, w, h, (caca_dither_t *)dither_ptr, elems);
  323. (*env)->ReleaseByteArrayElements(env, pixels, elems, 0);
  324. }
  325. JNIEXPORT void JNICALL
  326. Java_org_zoy_caca_Canvas_freeCanvas(JNIEnv *env, jclass cls, jlong ptr)
  327. {
  328. caca_free_canvas((caca_canvas_t *)ptr);
  329. }