src/solaris/native/sun/xawt/XlibWrapper.c

Print this page




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