iTunes Visual Plugin Difficulties

Discussion in 'Mac Programming' started by IndigoFuzzy, Jun 9, 2008.

  1. macrumors newbie

    Joined:
    Jun 8, 2008
    Location:
    DarkCity, Bay of Rainbows, Moon.
    #1
    I'm currently working on a visualizer plugin for iTunes.

    I have most of it working, but i need a way to draw a transparent black rectangle. (For a nice fade-out effect)

    I haven't been able to find what I need in any of the API references - That is, I'm not sure if I should have 2 large bitmaps (one all black, one light grey as an alpha channel) and call CopyMask, or wether I should do something with CoreGraphics (in which case I don't know where to start, I haven't used any of OSX's "Core" APIs yet.

    Any help would be greatly appreciated.
     
  2. thread starter macrumors newbie

    Joined:
    Jun 8, 2008
    Location:
    DarkCity, Bay of Rainbows, Moon.
    #2
    Some good and bad news:
    1, i figured out how to use Quartz to do the fading, but it's slowing things down horribly.

    Here's the code I used:

    Code:
    GrafPtr			oldPort;
    		GDHandle		oldDevice;
    		Rect			srcRect;
    		RGBColor		foreColor;
    		short			j;
    		long			vw, vh, hw, hh, hs, hd;
    		CGContextRef	cgc;
    		CGRect			fadeRect;
    		CGColorRef			chroma;
    		OSErr			err;
    		float			fadeColor[4];
    						
    		srcRect		= *destRect;
    
    		GetGWorld(&oldPort, &oldDevice);
    		SetGWorld(destPort, nil);
    		
    		
    		vw = srcRect.right - srcRect.left;
    		vh = srcRect.bottom - srcRect.top;
    		hw = vw/2;
    		hh = vh/2;
    		hs = hw+hh;
    		hd = hw-hh;
    		
    		err = CreateCGContextForPort(destPort,&cgc);
    		if (err == noErr)
    		{
    			fadeColor[0] = 0.0;
    			fadeColor[1] = 0.0;
    			fadeColor[2] = 0.0;
    			fadeColor[3] = 0.03;
    			
    			//CGContextSetBlendMode(cgc,kCGBlendModeMultiply);
    			chroma = CGColorCreate(CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB),fadeColor);
    			CGContextSetFillColorWithColor(cgc,chroma);
    			fadeRect = CGRectMake(0,0,vw,vh);
    			CGContextFillRect(cgc,fadeRect);
    			CGContextFlush(cgc);
    			CGContextRelease(cgc);
    		}
    		else
    		{
    			foreColor.red = foreColor.green = foreColor.blue = 0;
    			PaintRect(destRect);
    		}
    
    any reason why this would cause a slowdown, and any possible fixes?

    And I suppose I should ask: is calling CoreGraphics here before doing the rest of my drawing with QuickDraw a bad idea?
     

Share This Page