diff android/dw.cpp @ 2637:22105f99dd6a

Android: Add support for transparent background color for text drawing.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Wed, 11 Aug 2021 23:24:06 +0000
parents 3d20fcfd8583
children 7101b5692601
line wrap: on
line diff
--- a/android/dw.cpp	Wed Aug 11 20:32:13 2021 +0000
+++ b/android/dw.cpp	Wed Aug 11 23:24:06 2021 +0000
@@ -178,7 +178,7 @@
         pthread_key_create(&_dw_fgcolor_key, nullptr);
         pthread_setspecific(_dw_fgcolor_key, nullptr);
         pthread_key_create(&_dw_bgcolor_key, nullptr);
-        pthread_setspecific(_dw_bgcolor_key, nullptr);
+        pthread_setspecific(_dw_bgcolor_key, (void *)DW_RGB_TRANSPARENT);
 
         /* Create the dwmain event */
         _dw_main_event = dw_event_new();
@@ -842,6 +842,10 @@
     {
         return _dw_colors[thiscolor];
     }
+    else if(thiscolor == DW_RGB_TRANSPARENT)
+    {
+        return -1;
+    }
     return 0;
 }
 
@@ -2849,7 +2853,7 @@
  */
 void API dw_color_foreground_set(unsigned long value)
 {
-    pthread_setspecific(_dw_fgcolor_key, (void *)_dw_get_color(value));
+    pthread_setspecific(_dw_fgcolor_key, (void *)value);
 }
 
 /* Sets the current background drawing color.
@@ -2860,7 +2864,7 @@
  */
 void API dw_color_background_set(unsigned long value)
 {
-    pthread_setspecific(_dw_bgcolor_key, (void *)_dw_get_color(value));
+    pthread_setspecific(_dw_bgcolor_key, (void *)value);
 }
 
 /* Allows the user to choose a color using the system's color chooser dialog.
@@ -2887,8 +2891,8 @@
 
     if((handle || pixmap) && (env = (JNIEnv *)pthread_getspecific(_dw_env_key)))
     {
-        jlong fgcolor = (jlong)pthread_getspecific(_dw_fgcolor_key);
-        jlong bgcolor = (jlong)pthread_getspecific(_dw_bgcolor_key);
+        jlong fgcolor = _dw_get_color((unsigned long)pthread_getspecific(_dw_fgcolor_key));
+        jlong bgcolor = _dw_get_color((unsigned long)pthread_getspecific(_dw_bgcolor_key));
 
         // First get the class that contains the method you need to call
         jclass clazz = _dw_find_class(env, DW_CLASS_NAME);
@@ -2916,8 +2920,8 @@
 
     if((handle || pixmap) && (env = (JNIEnv *)pthread_getspecific(_dw_env_key)))
     {
-        jlong fgcolor = (jlong)pthread_getspecific(_dw_fgcolor_key);
-        jlong bgcolor = (jlong)pthread_getspecific(_dw_bgcolor_key);
+        jlong fgcolor = _dw_get_color((unsigned long)pthread_getspecific(_dw_fgcolor_key));
+        jlong bgcolor = _dw_get_color((unsigned long)pthread_getspecific(_dw_bgcolor_key));
 
         // First get the class that contains the method you need to call
         jclass clazz = _dw_find_class(env, DW_CLASS_NAME);
@@ -2944,8 +2948,8 @@
 
     if((handle || pixmap) && text && (env = (JNIEnv *)pthread_getspecific(_dw_env_key)))
     {
-        jlong fgcolor = (jlong)pthread_getspecific(_dw_fgcolor_key);
-        jlong bgcolor = (jlong)pthread_getspecific(_dw_bgcolor_key);
+        jlong fgcolor = _dw_get_color((unsigned long)pthread_getspecific(_dw_fgcolor_key));
+        jlong bgcolor = _dw_get_color((unsigned long)pthread_getspecific(_dw_bgcolor_key));
 
         // Construct the string
         jstring jstr = env->NewStringUTF(text);
@@ -3016,8 +3020,8 @@
 
         if(jx && jy)
         {
-            jlong fgcolor = (jlong)pthread_getspecific(_dw_fgcolor_key);
-            jlong bgcolor = (jlong)pthread_getspecific(_dw_bgcolor_key);
+            jlong fgcolor = _dw_get_color((unsigned long)pthread_getspecific(_dw_fgcolor_key));
+            jlong bgcolor = _dw_get_color((unsigned long)pthread_getspecific(_dw_bgcolor_key));
 
             // Construct the integer arrays
             env->SetIntArrayRegion(jx, 0, npoints, x);
@@ -3050,8 +3054,8 @@
 
     if((handle || pixmap) && (env = (JNIEnv *)pthread_getspecific(_dw_env_key)))
     {
-        jlong fgcolor = (jlong)pthread_getspecific(_dw_fgcolor_key);
-        jlong bgcolor = (jlong)pthread_getspecific(_dw_bgcolor_key);
+        jlong fgcolor = _dw_get_color((unsigned long)pthread_getspecific(_dw_fgcolor_key));
+        jlong bgcolor = _dw_get_color((unsigned long)pthread_getspecific(_dw_bgcolor_key));
 
         // First get the class that contains the method you need to call
         jclass clazz = _dw_find_class(env, DW_CLASS_NAME);
@@ -3083,8 +3087,8 @@
 
     if((handle || pixmap) && (env = (JNIEnv *)pthread_getspecific(_dw_env_key)))
     {
-        jlong fgcolor = (jlong)pthread_getspecific(_dw_fgcolor_key);
-        jlong bgcolor = (jlong)pthread_getspecific(_dw_bgcolor_key);
+        jlong fgcolor = _dw_get_color((unsigned long)pthread_getspecific(_dw_fgcolor_key));
+        jlong bgcolor = _dw_get_color((unsigned long)pthread_getspecific(_dw_bgcolor_key));
 
         // First get the class that contains the method you need to call
         jclass clazz = _dw_find_class(env, DW_CLASS_NAME);
@@ -6857,7 +6861,7 @@
     _dw_jvm->AttachCurrentThread(&env, nullptr);
     pthread_setspecific(_dw_env_key, env);
     pthread_setspecific(_dw_fgcolor_key, nullptr);
-    pthread_setspecific(_dw_bgcolor_key, nullptr);
+    pthread_setspecific(_dw_bgcolor_key, (void *)DW_RGB_TRANSPARENT);
 }
 
 /*