UBWindowCapture_mac.mm 1.23 KB
Newer Older
Claudio Valerio's avatar
Claudio Valerio committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55

#include "UBWindowCapture.h"
#include "UBDesktopAnnotationController.h"

#import <Foundation/NSAutoreleasePool.h>
#import <Carbon/Carbon.h>


UBWindowCapture::UBWindowCapture(UBDesktopAnnotationController *parent) 
	: QObject(parent)
	, mParent(parent)
{
	// NOOP
}


UBWindowCapture::~UBWindowCapture() 
{
	// NOOP
}


const QPixmap UBWindowCapture::getCapturedWindow() 
{
	return mWindowPixmap;
}


int UBWindowCapture::execute()
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSString *path = [NSString pathWithComponents: [NSArray arrayWithObjects: NSTemporaryDirectory(), 
			[[NSString stringWithFormat:@"%d",[NSDate timeIntervalSinceReferenceDate]] stringByAppendingPathExtension:@"uninote"], 
			nil]];
	
    NSTask *task = [[NSTask alloc] init];
	NSArray *arguments = [NSArray arrayWithObjects: @"-i", @"-W", @"-m", @"-tpng", path, nil];
    [task setLaunchPath: @"/usr/sbin/screencapture"];
    [task setArguments: arguments];
	
    [task launch];
    [task waitUntilExit];
    [task release];
	
    QString resultPath = QString::fromUtf8([path UTF8String], strlen([path UTF8String]));
	
    mWindowPixmap.load(resultPath);
    
    QFile::remove(resultPath);
    
    [pool drain];
    
    return QDialog::Accepted;
}