]> sigrok.org Git - sigrok-util.git/blob - cross-compile/android/pulseview-cpp.patch
sigrok-cross-android: Make Python work in PulseView, and reenable SRD
[sigrok-util.git] / cross-compile / android / pulseview-cpp.patch
1 diff --git a/CMakeLists.txt b/CMakeLists.txt
2 index 11767a6..b8eed96 100644
3 --- a/CMakeLists.txt
4 +++ b/CMakeLists.txt
5 @@ -317,12 +317,21 @@ if(WIN32)
6         list(APPEND PULSEVIEW_LINK_LIBS "-lqsvg")
7  endif()
8  
9 +if(ANDROID)
10 +add_library(${PROJECT_NAME} SHARED
11 +       ${pulseview_SOURCES}
12 +       ${pulseview_HEADERS_MOC}
13 +       ${pulseview_FORMS_HEADERS}
14 +       ${pulseview_RESOURCES_RCC}
15 +)
16 +else()
17  add_executable(${PROJECT_NAME}
18         ${pulseview_SOURCES}
19         ${pulseview_HEADERS_MOC}
20         ${pulseview_FORMS_HEADERS}
21         ${pulseview_RESOURCES_RCC}
22  )
23 +endif()
24  
25  target_link_libraries(${PROJECT_NAME} ${PULSEVIEW_LINK_LIBS})
26  
27 diff --git a/pv/view/decodetrace.cpp b/pv/view/decodetrace.cpp
28 index e4f0276..861d25b 100644
29 --- a/pv/view/decodetrace.cpp
30 +++ b/pv/view/decodetrace.cpp
31 @@ -373,7 +373,7 @@ void DecodeTrace::draw_instant(const pv::data::decode::Annotation &a, QPainter &
32  {
33         const QString text = a.annotations().empty() ?
34                 QString() : a.annotations().back();
35 -       const double w = min(p.boundingRect(QRectF(), 0, text).width(),
36 +       const double w = min((double)p.boundingRect(QRectF(), 0, text).width(),
37                 0.0) + h;
38         const QRectF rect(x - w / 2, y - h / 2, w, h);
39  
40 diff --git a/main.cpp b/main.cpp
41 index 2c6a59e..79627db 100644
42 --- a/main.cpp 2014-04-26 23:40:24.253187700 +0200
43 +++ b/main.cpp  2014-04-27 00:38:55.378353311 +0200
44 @@ -20,6 +20,9 @@
45  
46  #ifdef ENABLE_DECODE
47  #include <libsigrokdecode/libsigrokdecode.h> /* First, so we avoid a _POSIX_C_SOURCE warning. */
48 +#ifdef ANDROID
49 +#include <jni.h>
50 +#endif
51  #endif
52  
53  #include <stdint.h>
54 @@ -45,6 +48,47 @@
55  Q_IMPORT_PLUGIN(qsvg)
56  #endif
57  
58 +#if defined(ENABLE_DECODE) && defined(ANDROID)
59 +jint JNI_OnLoad(JavaVM *vm, void *reserved)
60 +{
61 +       JNIEnv* env;
62 +
63 +       (void)reserved;
64 +
65 +       if (vm->GetEnv((void **)&env, JNI_VERSION_1_6) != JNI_OK) {
66 +               return -1;
67 +       }
68 +
69 +       jclass envc = env->FindClass("org/sigrok/androidutils/Environment");
70 +       jmethodID getEnv =  env->GetStaticMethodID(envc, "getEnvironment",
71 +                                                  "()[Ljava/lang/String;");
72 +       jobjectArray envs =
73 +               (jobjectArray)env->CallStaticObjectMethod(envc, getEnv);
74 +       jsize i, envn = env->GetArrayLength(envs);
75 +       for (i=0; i<envn; i+=2) {
76 +               jstring key = (jstring)env->GetObjectArrayElement(envs, i);
77 +               jstring value = (jstring)env->GetObjectArrayElement(envs, i+1);
78 +               const char *utfkey = env->GetStringUTFChars(key, 0);
79 +               const char *utfvalue = env->GetStringUTFChars(value, 0);
80 +               setenv(utfkey, utfvalue, 1);
81 +               env->ReleaseStringUTFChars(value, utfvalue);
82 +               env->ReleaseStringUTFChars(key, utfkey);
83 +               env->DeleteLocalRef(value);
84 +               env->DeleteLocalRef(key);
85 +       }
86 +       env->DeleteLocalRef(envs);
87 +       env->DeleteLocalRef(envc);
88 +
89 +       return JNI_VERSION_1_6;
90 +}
91 +
92 +void JNI_OnUnload(JavaVM *vm, void *reserved)
93 +{
94 +       (void)vm;
95 +       (void)reserved;
96 +}
97 +#endif
98 +
99  void usage()
100  {
101         fprintf(stdout,