diff options
author | Thomas Martitz <kugel@rockbox.org> | 2010-10-29 23:12:08 +0000 |
---|---|---|
committer | Thomas Martitz <kugel@rockbox.org> | 2010-10-29 23:12:08 +0000 |
commit | 6bb75228529382d59fda7bf455cf578766ed995e (patch) | |
tree | 90cf92c7c22ce31198c57568b00d240db513f7ab /firmware | |
parent | 669a327a2e6ee83795b0916e82e96ba4f2a44463 (diff) | |
download | rockbox-6bb75228529382d59fda7bf455cf578766ed995e.tar.gz rockbox-6bb75228529382d59fda7bf455cf578766ed995e.zip |
Initialize (instantiate) RockboxFramebuffer from the C code like with the othe java objects.
Remove some @Override annotations to make the Java code build with certain javac versions.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@28386 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/target/hosted/android/lcd-android.c | 78 |
1 files changed, 42 insertions, 36 deletions
diff --git a/firmware/target/hosted/android/lcd-android.c b/firmware/target/hosted/android/lcd-android.c index 1043dfa35c..fc9e22a921 100644 --- a/firmware/target/hosted/android/lcd-android.c +++ b/firmware/target/hosted/android/lcd-android.c | |||
@@ -29,7 +29,8 @@ extern JNIEnv *env_ptr; | |||
29 | extern jclass RockboxService_class; | 29 | extern jclass RockboxService_class; |
30 | extern jobject RockboxService_instance; | 30 | extern jobject RockboxService_instance; |
31 | 31 | ||
32 | static jobject Framebuffer_instance; | 32 | static jclass RockboxFramebuffer_class; |
33 | static jobject RockboxFramebuffer_instance; | ||
33 | static jmethodID java_lcd_update; | 34 | static jmethodID java_lcd_update; |
34 | static jmethodID java_lcd_update_rect; | 35 | static jmethodID java_lcd_update_rect; |
35 | 36 | ||
@@ -37,46 +38,51 @@ static bool display_on; | |||
37 | 38 | ||
38 | void lcd_init_device(void) | 39 | void lcd_init_device(void) |
39 | { | 40 | { |
40 | /* get the RockboxFramebuffer instance allocated by the activity */ | 41 | JNIEnv e = *env_ptr; |
41 | jfieldID id = (*env_ptr)->GetStaticFieldID(env_ptr, | 42 | RockboxFramebuffer_class = e->FindClass(env_ptr, |
42 | RockboxService_class, | 43 | "org/rockbox/RockboxFramebuffer"); |
43 | "fb", | 44 | /* instantiate a RockboxFramebuffer instance |
44 | "Lorg/rockbox/RockboxFramebuffer;"); | 45 | * |
45 | 46 | * Pass lcd width and height and our framebuffer so the java layer | |
46 | Framebuffer_instance = (*env_ptr)->GetStaticObjectField(env_ptr, | 47 | * can create a Bitmap which directly maps to it |
47 | RockboxService_class, | 48 | **/ |
48 | id); | 49 | |
49 | 50 | /* map the framebuffer to a ByteBuffer, this way lcd updates will | |
50 | jclass Framebuffer_class = (*env_ptr)->GetObjectClass(env_ptr, | 51 | * be directly feched from the framebuffer */ |
51 | Framebuffer_instance); | 52 | jobject buf = e->NewDirectByteBuffer(env_ptr, |
52 | 53 | lcd_framebuffer, | |
53 | /* get the java init function and call it. it'll set up a bitmap | 54 | (jlong)sizeof(lcd_framebuffer)); |
54 | * based on LCD_WIDTH, LCD_HEIGHT and the ByteBuffer which directly maps | 55 | |
55 | * our framebuffer */ | 56 | jmethodID constructor = e->GetMethodID(env_ptr, |
56 | 57 | RockboxFramebuffer_class, | |
57 | jmethodID java_init_lcd = (*env_ptr)->GetMethodID(env_ptr, | 58 | "<init>", |
58 | Framebuffer_class, | 59 | "(Landroid/content/Context;" /* Service */ |
59 | "java_lcd_init", | 60 | "II" /* lcd width/height */ |
60 | "(IILjava/nio/ByteBuffer;)V"); | 61 | "Ljava/nio/ByteBuffer;)V"); /* ByteBuffer */ |
62 | |||
63 | RockboxFramebuffer_instance = e->NewObject(env_ptr, | ||
64 | RockboxFramebuffer_class, | ||
65 | constructor, | ||
66 | RockboxService_instance, | ||
67 | (jint)LCD_WIDTH, | ||
68 | (jint)LCD_HEIGHT, | ||
69 | buf); | ||
70 | |||
71 | /* cache update functions */ | ||
61 | java_lcd_update = (*env_ptr)->GetMethodID(env_ptr, | 72 | java_lcd_update = (*env_ptr)->GetMethodID(env_ptr, |
62 | Framebuffer_class, | 73 | RockboxFramebuffer_class, |
63 | "java_lcd_update", | 74 | "java_lcd_update", |
64 | "()V"); | 75 | "()V"); |
65 | java_lcd_update_rect = (*env_ptr)->GetMethodID(env_ptr, | 76 | java_lcd_update_rect = (*env_ptr)->GetMethodID(env_ptr, |
66 | Framebuffer_class, | 77 | RockboxFramebuffer_class, |
67 | "java_lcd_update_rect", | 78 | "java_lcd_update_rect", |
68 | "(IIII)V"); | 79 | "(IIII)V"); |
69 | 80 | ||
70 | /* map the framebuffer to a ByteBuffer, this way lcd updates will | 81 | /* at last, give RockboxService the Framebuffer instance */ |
71 | * be directly feched from the framebuffer */ | 82 | jfieldID id = e->GetStaticFieldID(env_ptr, RockboxService_class, |
72 | jobject buf = (*env_ptr)->NewDirectByteBuffer(env_ptr, | 83 | "fb", "Lorg/rockbox/RockboxFramebuffer;"); |
73 | lcd_framebuffer, | 84 | e->SetStaticObjectField(env_ptr, RockboxService_class, |
74 | sizeof(lcd_framebuffer)); | 85 | id, RockboxFramebuffer_instance); |
75 | |||
76 | (*env_ptr)->CallVoidMethod(env_ptr, | ||
77 | Framebuffer_instance, | ||
78 | java_init_lcd, | ||
79 | LCD_WIDTH, LCD_HEIGHT, buf); | ||
80 | display_on = true; | 86 | display_on = true; |
81 | } | 87 | } |
82 | 88 | ||
@@ -84,14 +90,14 @@ void lcd_update(void) | |||
84 | { | 90 | { |
85 | /* tell the system we're ready for drawing */ | 91 | /* tell the system we're ready for drawing */ |
86 | if (display_on) | 92 | if (display_on) |
87 | (*env_ptr)->CallVoidMethod(env_ptr, Framebuffer_instance, java_lcd_update); | 93 | (*env_ptr)->CallVoidMethod(env_ptr, RockboxFramebuffer_instance, java_lcd_update); |
88 | } | 94 | } |
89 | 95 | ||
90 | void lcd_update_rect(int x, int y, int height, int width) | 96 | void lcd_update_rect(int x, int y, int height, int width) |
91 | { | 97 | { |
92 | if (display_on) | 98 | if (display_on) |
93 | { | 99 | { |
94 | (*env_ptr)->CallVoidMethod(env_ptr, Framebuffer_instance, java_lcd_update_rect, | 100 | (*env_ptr)->CallVoidMethod(env_ptr, RockboxFramebuffer_instance, java_lcd_update_rect, |
95 | x, y, height, width); | 101 | x, y, height, width); |
96 | } | 102 | } |
97 | } | 103 | } |