bool RenderSVGResourceMasker::applyResource(RenderObject* object, RenderStyle*, GraphicsContext*& context, unsigned short resourceMode)
{
    ASSERT(object);
    ASSERT(context);
#ifndef NDEBUG
    ASSERT(resourceMode == ApplyToDefaultMode);
#else
    UNUSED_PARAM(resourceMode);
#endif

    if (!m_masker.contains(object))
        m_masker.set(object, new MaskerData);

    MaskerData* maskerData = m_masker.get(object);
    if (!maskerData->maskImage && !maskerData->emptyMask) {
        SVGMaskElement* maskElement = static_cast<SVGMaskElement*>(node());
        if (!maskElement)
            return false;

        createMaskImage(maskerData, maskElement, object);
    }

    if (!maskerData->maskImage)
        return false;

    context->clipToImageBuffer(maskerData->maskRect, maskerData->maskImage.get());
    return true;
}
	void
		Java_java_awt_Toolkit_imgSetRGBPels ( JNIEnv* env, jclass clazz, Image * img,
		jint x, jint y, jint w, jint h,
		jintArray rgbPels, jint off, jint scan)
	{
		register int    row, col;
		COLORREF		   pix;
		jboolean        isCopy;
		jint            *rgbs = env->GetIntArrayElements( rgbPels, &isCopy);
		jint            *rgb = rgbs + off;
		int             maxCol = x + w;
		int             maxRow = y + h;
		

		for ( row = y; row < maxRow; row++) {
			for ( col = x; col < maxCol; col++) {
				pix = rgb[col + row * scan];
				if ( (pix & 0xff000000) == 0xff000000 ) {					
					PIXEL( img->dc, col, row, pix);
				}
				else {
					if ( !img->mask )
						createMaskImage( X, img);
					PIXEL( img->dcMask, col, row, 0x00ffffff);
					PIXEL( img->dc, col, row, 0);					
				}
			}
		}
		
		env->ReleaseIntArrayElements( rgbPels, rgbs, JNI_ABORT);
	}
	void*
		Java_java_awt_Toolkit_imgCreateScaledImage ( JNIEnv* env, jclass clazz,
		Image* img, int width, int height )
	{
		Image *si = createImage( width, height);
		si->bmp = CreateCompatibleBitmap( X->display, width, height);
		
		SelectObject( si->dc, si->bmp);
		StretchBlt( si->dc, 0, 0, width, height,
			img->dc, 0, 0, img->width, img->height, SRCCOPY);
		
		if ( img->mask) {
			createMaskImage( X, si);
			StretchBlt( si->dcMask, 0, 0, width, height,
				img->dcMask, 0, 0, img->width, img->height, SRCCOPY);
		}
		
		return si;
	}
	void
		Java_java_awt_Toolkit_imgSetIdxPels ( JNIEnv* env, jclass clazz, Image * img,
		jint x, jint y, jint w, jint h,
		jintArray clrMap, jbyteArray idxPels, jint trans,
		jint off, jint scan)
	{
		register int    row, col;
		COLORREF		pix;
		jboolean        isCopy;
		jint            *clr = env->GetIntArrayElements( clrMap, &isCopy);
		jbyte           *pel = env->GetByteArrayElements( idxPels, &isCopy);
		unsigned char   *idx = (unsigned char*)(pel + off);
		int             maxCol = x + w;
		int             maxRow = y + h;
		unsigned char   curPel;
		
		if ( (trans >= 0) && !img->mask)
			createMaskImage( X, img);
		
		for ( row = y; row < maxRow; row++) {
			for ( col = x; col < maxCol; col++) {
				curPel = idx[col + row * scan];
				pix = ColorJ2N( clr[curPel] );
				if ( trans >= 0 ) {
					if ( curPel == trans ){
						pix = 0;
						PIXEL( img->dcMask, col, row, 0x00ffffff);
						
					}
					
				}
				PIXEL( img->dc, col, row, pix);
			}
		}
		
		env->ReleaseIntArrayElements( clrMap, clr, JNI_ABORT);
		env->ReleaseByteArrayElements( idxPels, pel, JNI_ABORT);
		
	}