JAVAFX on ANDROID
Matthias Hänel
haenel at ultramixer.com
Fri Oct 18 04:19:15 PDT 2013
Hi Tomas,
I am currently running a bit different openjfx than yours and got it kind of running.
1. the main difference is font deactivation. You disabled the entire CSS renderer, which I did not.
I am deactivating just the font renderer. That means a lot more patching but it gives me the chance
to see CSS rendering taking place ;) It works pretty well even without fonts (hard coded font sizes).
2. I probably found the touch handling crash. Since I have an old Samusung Galaxy Tab 10.1 here
I can assure this bug effects the device as well. It's the Platform.runLater bugfix. This is also quite
stable and makes it possible to play Brickbreaker ;)
3. I had to disable the new security stuff in GlassStage and GlassScene.
further testing:
================
Tobi, gave me his iOS/JavaFX testing tool that just displays a colored ListView and while it scrolls
the rendering process writes fps to stdout. This tool compiles and runs but it does nothing while touching.
The reason is probably that some javafx controls are still using mouse emulation.
I see in the iOS port that the events are fired twice at first as touch events and then
as mouse events. It looks like the latest change for multitouch events dropped the dual event
sending. I tried to patch android.c like this:
JNIEXPORT void JNICALL Java_com_oracle_dalvik_FXActivity_00024InternalSurfaceView_onMultiTouchEventNative
(JNIEnv *env, jobject jview, jint jpcount, jintArray jactions, jintArray jids,
jintArray jtouchXs, jintArray jtouchYs) {
...
(*_notifyMultiTouchEvent)(jpcount, actions, ids, touchXs, touchYs);
if( jpcount == 1
&& (actions[0]==com_sun_glass_events_TouchEvent_TOUCH_PRESSED || actions[0]==com_sun_glass_events_TouchEvent_TOUCH_RELEASED) )
{
int pressed = 0;
if (actions[0] == com_sun_glass_events_TouchEvent_TOUCH_PRESSED)
pressed = com_sun_glass_events_MouseEvent_DOWN;
else
if (actions[0] == com_sun_glass_events_TouchEvent_TOUCH_RELEASED)
pressed = com_sun_glass_events_MouseEvent_UP;
LOGV(TAG, "emulate button click event - UM hacked pressed:%i x:%i y:%i\n", pressed, touchXs[0], touchYs[0] );
(*_notifyButtonEvent)(pressed,
com_sun_glass_events_MouseEvent_BUTTON_LEFT,
touchXs[0], touchYs[0]);
}
...
}
Unfortunately, it doesn't work as expected.
I have some questions:
1. Is that mouse emulation supposed to be eliminated due to the latest lensWindow changes?
I believe that must be handled in higher layers not in the input layer itself.
2. What is the best way to fix this issue? Reimplementing the mouse emulation is not a real good solution.
3. The Listview shows a scrollbar. That makes me believe that the control doesn't really know that it is running
in embedded mode. Maybe the mouse emulation is not possible if the embedded mode is correcly enabled.
Where do I enable the embedded mode? I though it is this property android.com.sun.javafx.isEmbedded=true. That's of course enabled
in javafx.platform.properties.
4. What is the input layer for the Dukepad? I think it's the udev implementation and this does pretty much the same as the current
android implementation. I just want to have a "stable" reference to look at ;)
Probably those questions are not only for Tomas since they are pretty general.
regards
Matthias
More information about the openjfx-dev
mailing list