2146 } 2147 2148 pRect = (RECT_T *)malloc(worstBufferSize * sizeof(RECT_T)); 2149 2150 /* Note: the values[0] and values[1] are supposed to contain the width 2151 * and height (see XIconInfo.getIntData() for details). So, we do +2. 2152 */ 2153 int numrects = BitmapToYXBandedRectangles(32, (int)width, (int)height, 2154 (unsigned char *)(values + 2), pRect); 2155 2156 XShapeCombineRectangles((Display *)jlong_to_ptr(display), (Window)jlong_to_ptr(window), 2157 ShapeClip, 0, 0, pRect, numrects, ShapeSet, YXBanded); 2158 XShapeCombineRectangles((Display *)jlong_to_ptr(display), (Window)jlong_to_ptr(window), 2159 ShapeBounding, 0, 0, pRect, numrects, ShapeSet, YXBanded); 2160 2161 free(pRect); 2162 2163 (*env)->ReleaseIntArrayElements(env, bitmap, values, JNI_ABORT); 2164 } 2165 | 2146 } 2147 2148 pRect = (RECT_T *)malloc(worstBufferSize * sizeof(RECT_T)); 2149 2150 /* Note: the values[0] and values[1] are supposed to contain the width 2151 * and height (see XIconInfo.getIntData() for details). So, we do +2. 2152 */ 2153 int numrects = BitmapToYXBandedRectangles(32, (int)width, (int)height, 2154 (unsigned char *)(values + 2), pRect); 2155 2156 XShapeCombineRectangles((Display *)jlong_to_ptr(display), (Window)jlong_to_ptr(window), 2157 ShapeClip, 0, 0, pRect, numrects, ShapeSet, YXBanded); 2158 XShapeCombineRectangles((Display *)jlong_to_ptr(display), (Window)jlong_to_ptr(window), 2159 ShapeBounding, 0, 0, pRect, numrects, ShapeSet, YXBanded); 2160 2161 free(pRect); 2162 2163 (*env)->ReleaseIntArrayElements(env, bitmap, values, JNI_ABORT); 2164 } 2165 2166 typedef struct { 2167 JNIEnv *env; 2168 jobject predicateObject; 2169 jmethodID predicateMID; 2170 2171 jobject event; 2172 } CheckIfEventStruct; 2173 2174 static Bool 2175 check_if_event_predicate(Display* dpy, XEvent* event, char* arg) { 2176 CheckIfEventStruct * data = (CheckIfEventStruct *)arg; 2177 //NOTE: event == data->event.pData 2178 2179 return (Bool)((*(data->env))->CallBooleanMethod(data->env, 2180 data->predicateObject, data->predicateMID, 2181 data->event)); 2182 } 2183 2184 JNIEXPORT jboolean JNICALL 2185 Java_sun_awt_X11_XlibWrapper_CheckIfEvent 2186 (JNIEnv *env, jclass clazz, jlong display, jobject event, jlong event_return, jobject predicate) 2187 { 2188 //NOTE: event_return == event.pData 2189 2190 AWT_CHECK_HAVE_LOCK(); 2191 2192 CheckIfEventStruct data; 2193 2194 data.env = env; 2195 data.predicateObject = predicate; 2196 data.predicateMID = (*env)->GetMethodID(env, 2197 (*env)->GetObjectClass(env, predicate), 2198 "doesMatch", "(Lsun/awt/X11/XEvent;)Z"); 2199 data.event = event; 2200 2201 return (jboolean)XCheckIfEvent((Display *)jlong_to_ptr(display), 2202 (XEvent *)jlong_to_ptr(event_return), check_if_event_predicate, 2203 (char*)&data); 2204 } 2205 |