File: org_zoy_caca_Font.c

package info (click to toggle)
libcaca 0.99.beta20-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 5,264 kB
  • sloc: ansic: 25,091; php: 2,763; python: 2,637; cs: 1,213; cpp: 1,127; java: 916; objc: 836; makefile: 543; perl: 505; sh: 472; asm: 297; ruby: 215; xml: 33
file content (115 lines) | stat: -rw-r--r-- 2,816 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/**
 *  libcaca       Java bindings for libcaca
 *  Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org>
 *
 *  This library is free software. It comes without any warranty, to
 *  the extent permitted by applicable law. You can redistribute it
 *  and/or modify it under the terms of the Do What the Fuck You Want
 *  to Public License, Version 2, as published by Sam Hocevar. See
 *  http://www.wtfpl.net/ for more details.
 */

#include "caca_java_common.h"
#include "org_zoy_caca_Font.h"

#include "caca.h"

#define FONT_CREATION_ERROR "Cannot load font"

JNIEXPORT jlong JNICALL
Java_org_zoy_caca_Font_loadFont__Ljava_lang_String_2(JNIEnv *env, jclass cls, jstring font_name)
{
  const char *font_name_chars;
  caca_font_t *font;

  font_name_chars = (*env)->GetStringUTFChars(env, font_name, 0);
  font = caca_load_font(font_name_chars, 0);
  (*env)->ReleaseStringUTFChars(env, font_name, font_name_chars);

  if (!font)
  {
    THROW_EX(FONT_CREATION_ERROR);
    return 0;
  }

  return (jlong)font;
}


JNIEXPORT jlong JNICALL
Java_org_zoy_caca_Font_loadFont___3B(JNIEnv *env, jclass cls, jbyteArray font_bytes)
{
  jbyte *elems;
  jsize size;
  caca_font_t *font;

  elems = (*env)->GetByteArrayElements(env, font_bytes, 0);
  size = (*env)->GetArrayLength(env, font_bytes);
  font = caca_load_font(elems, size);
  (*env)->ReleaseByteArrayElements(env, font_bytes, elems, 0);

  if (!font)
  {
    THROW_EX(FONT_CREATION_ERROR);
    return 0;
  }

  return (jlong)font;
}


JNIEXPORT jobjectArray JNICALL
Java_org_zoy_caca_Font_getFontNames(JNIEnv *env, jclass cls)
{
  const char *const *fonts = caca_get_font_list();
  return caca_java_to_string_array(env, fonts);
}


JNIEXPORT jint JNICALL
Java_org_zoy_caca_Font_getFontWidth(JNIEnv *env, jclass cls, jlong ptr)
{
  return caca_get_font_width(ptr);
}


JNIEXPORT jint JNICALL
Java_org_zoy_caca_Font_getFontHeight(JNIEnv *env, jclass cls, jlong ptr)
{
  return caca_get_font_height(ptr);
}


JNIEXPORT jobjectArray JNICALL
Java_org_zoy_caca_Font_getFontBlocks(JNIEnv *env, jclass cls, jlong ptr)
{
  const uint32_t *blocks;
  jclass int_array;
  jobjectArray ret;
  jsize size;
  jsize i;

  blocks = caca_get_font_blocks(ptr);
  for (size = 0; blocks[2*size] || blocks[2*size+1]; ++size);

  int_array = (*env)->FindClass(env, "[I");
  ret = (*env)->NewObjectArray(env, size, int_array, NULL);
  for (i = 0; i < size; ++i)
  {
    jintArray nth = (*env)->NewIntArray(env, 2); /* Size is 2 */
    jint nth_elems[] = { blocks[2*i], blocks[2*i+1] };
    (*env)->SetIntArrayRegion(env, nth, 0, 2, nth_elems);
    (*env)->SetObjectArrayElement(env, ret, i, nth);
    (*env)->DeleteLocalRef(env, nth);
  }

  return ret;
}


JNIEXPORT void JNICALL
Java_org_zoy_caca_Font_freeFont(JNIEnv *env, jclass cls, jlong ptr)
{
  caca_free_font((caca_font_t *)ptr);
}