Exemplo n.º 1
0
bool wxMetaFile::Play(wxDC *dc)
{
    if (!m_refData)
        return false;

    if (!dc->Ok() )
        return false;

    {
#if wxMAC_USE_CORE_GRAPHICS
        QDPictRef cgPictRef = M_METAFILEDATA->m_qdPictRef ;
        CGContextRef cg = ((wxMacCGContext*)(dc->GetGraphicContext()))->GetNativeContext() ;
        CGRect bounds = QDPictGetBounds( cgPictRef ) ;

        CGContextSaveGState(cg);
        CGContextTranslateCTM(cg, 0 , bounds.size.width );
        CGContextScaleCTM(cg, 1, -1);
        QDPictDrawToCGContext( cg , bounds , cgPictRef ) ;
        CGContextRestoreGState( cg ) ;
#else
        PicHandle pict = (PicHandle) GetHMETAFILE() ;
        wxMacPortSetter helper( dc ) ;
        DrawPicture( pict , &(**pict).picFrame ) ;
#endif
    }
    return true;
}
Exemplo n.º 2
0
JNIEXPORT void JNICALL OS_NATIVE(QDPictGetBounds)
	(JNIEnv *env, jclass that, jint arg0, jobject arg1)
{
	CGRect _arg1, *lparg1=NULL;
	OS_NATIVE_ENTER(env, that, QDPictGetBounds_FUNC);
	if (arg1) if ((lparg1 = getCGRectFields(env, arg1, &_arg1)) == NULL) goto fail;
	*lparg1 = QDPictGetBounds((QDPictRef)arg0);
fail:
	if (arg1 && lparg1) setCGRectFields(env, arg1, lparg1);
	OS_NATIVE_EXIT(env, that, QDPictGetBounds_FUNC);
}
Exemplo n.º 3
0
void wxMetafile::SetPICT(void* pictHandle)
{
    UnRef();

    Handle picHandle = (Handle) pictHandle;
    HLock(picHandle);
    CFDataRef data = CFDataCreateWithBytesNoCopy( kCFAllocatorDefault, (const UInt8*) *picHandle, GetHandleSize(picHandle), kCFAllocatorNull);
    wxCFRef<CGDataProviderRef> provider(wxMacCGDataProviderCreateWithCFData(data));
    QDPictRef pictRef = QDPictCreateWithProvider(provider);
    CGRect rect = QDPictGetBounds(pictRef);
    m_refData = new wxMetafileRefData(static_cast<int>(rect.size.width),
                                      static_cast<int>(rect.size.height));
    QDPictDrawToCGContext( ((wxMetafileRefData*) m_refData)->GetContext(), rect, pictRef );
    CFRelease( data );
    QDPictRelease( pictRef );
    ((wxMetafileRefData*) m_refData)->Close();
}
void		VPictureData_MacPicture::_CreateTransparent(VPictureDrawSettings* inSet)const
{
	CGImageRef result = 0;

	if (fTrans)
		return;
	VPictureDrawSettings set(inSet);
	if (GetWidth() && GetHeight())
	{
		if (fMetaFile)
		{

			CGContextRef    context = NULL;
			CGColorSpaceRef colorSpace;
			void *          bitmapData;
			int             bitmapByteCount;
			int             bitmapBytesPerRow;
			sLONG width, height;

			CGRect cgr = QDPictGetBounds(fMetaFile);

			width = cgr.size.width;
			height = cgr.size.height;
			bitmapBytesPerRow = (4 * width + 15) & ~15;
			bitmapByteCount = (bitmapBytesPerRow * height);

			bitmapData = malloc(bitmapByteCount);
			if (bitmapData)
			{
				colorSpace = CGColorSpaceCreateDeviceRGB();//CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);

				memset(bitmapData, 0, bitmapByteCount);
				context = CGBitmapContextCreate(bitmapData,
					width,
					height,
					8,      // bits per component
					bitmapBytesPerRow,
					colorSpace,
					kCGImageAlphaNoneSkipLast);
				if (context)
				{
					CGRect vr;
					vr.origin.x = 0;
					vr.origin.y = 0;
					vr.size.width = width;
					vr.size.height = height;

					VRect pictrect(0, 0, width, height);
					set.SetScaleMode(PM_SCALE_TO_FIT);
					set.SetYAxisSwap(height, true);
					set.SetPictureMatrix(VAffineTransform());
					CGContextSaveGState(context);

					CGContextSetRGBFillColor(context, 1, 1, 1, 1);
					CGContextFillRect(context, vr);

					xDraw(fMetaFile, context, pictrect, &set);

					CGContextRestoreGState(context);
					CGDataProviderRef dataprov = xV4DPicture_MemoryDataProvider::CGDataProviderCreate((char*) bitmapData, bitmapByteCount, true);

					result = CGImageCreate(width, height, 8, 32, bitmapBytesPerRow, colorSpace, kCGImageAlphaNoneSkipLast, dataprov, 0, 0, kCGRenderingIntentDefault);
					CGContextRelease(context);
					CGDataProviderRelease(dataprov);
					if (set.GetDrawingMode() == 1)
					{
						const VColor& col = set.GetTransparentColor();
						CGFloat MaskingColors[6];
						MaskingColors[0] = col.GetRed();
						MaskingColors[1] = col.GetGreen();
						MaskingColors[2] = col.GetBlue();
						MaskingColors[3] = col.GetRed();
						MaskingColors[4] = col.GetGreen();
						MaskingColors[5] = col.GetBlue();

						CGImageRef trans = CGImageCreateWithMaskingColors(result, MaskingColors);
						if (trans)
						{
							CFRelease(result);
							fTrans = trans;
						}
					}
				}
				CGColorSpaceRelease(colorSpace);
			}
			free(bitmapData);
		}
	}
}