From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LRDVD-00067W-Ci for qemu-devel@nongnu.org; Sun, 25 Jan 2009 17:30:51 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LRDVA-00066b-W5 for qemu-devel@nongnu.org; Sun, 25 Jan 2009 17:30:50 -0500 Received: from [199.232.76.173] (port=52635 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LRDVA-00066U-SF for qemu-devel@nongnu.org; Sun, 25 Jan 2009 17:30:48 -0500 Received: from yx-out-1718.google.com ([74.125.44.157]:8554) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LRDVA-0001uE-EZ for qemu-devel@nongnu.org; Sun, 25 Jan 2009 17:30:48 -0500 Received: by yx-out-1718.google.com with SMTP id 3so2304123yxi.82 for ; Sun, 25 Jan 2009 14:30:46 -0800 (PST) Message-ID: <497CE807.7030104@codemonkey.ws> Date: Sun, 25 Jan 2009 16:30:31 -0600 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH] [v2] Update cocoa.m to match new DisplayState code References: <3097312F-7315-42BA-AF5D-4C026CD874FD@digitalescape.info> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org C.W. Betts wrote: > It would help if the patch file was included. Either the mail browser > that I use (Mac OS X Mail) or the mail transport messes up the > formatting, making it hard to apply the patch using the patch command. Inlining is fine (and preferred to me) but Samuel's mail client munged the white space in the patch. Regards, Anthony Liguori > On Jan 25, 2009, at 1:23 AM, Samuel Benson wrote: > >> diff --git a/cocoa.m b/cocoa.m >> index fe13952..55ff2b4 100644 >> --- a/cocoa.m >> +++ b/cocoa.m >> @@ -57,7 +57,7 @@ typedef struct { >> int qemu_main(int argc, char **argv); // main defined in qemu/vl.c >> NSWindow *normalWindow; >> id cocoaView; >> -static void *screenBuffer; >> +static DisplayChangeListener *dcl; >> >> int gArgc; >> char **gArgv; >> @@ -292,9 +292,6 @@ int cocoa_keycode_to_qemu(int keycode) >> { >> COCOA_DEBUG("QemuCocoaView: dealloc\n"); >> >> - if (screenBuffer) >> - free(screenBuffer); >> - >> if (dataProviderRef) >> CGDataProviderRelease(dataProviderRef); >> >> @@ -305,9 +302,6 @@ int cocoa_keycode_to_qemu(int keycode) >> { >> COCOA_DEBUG("QemuCocoaView: drawRect\n"); >> >> - if ((int)screenBuffer == -1) >> - return; >> - >> // get CoreGraphic context >> CGContextRef viewContextRef = [[NSGraphicsContext currentContext] >> graphicsPort]; >> CGContextSetInterpolationQuality (viewContextRef, >> kCGInterpolationNone); >> @@ -320,10 +314,10 @@ int cocoa_keycode_to_qemu(int keycode) >> screen.height, //height >> screen.bitsPerComponent, //bitsPerComponent >> screen.bitsPerPixel, //bitsPerPixel >> - (screen.width * 4), //bytesPerRow >> + (screen.width * (screen.bitsPerComponent/2)), //bytesPerRow >> #if __LITTLE_ENDIAN__ >> CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB), >> //colorspace for OS X >= 10.4 >> - kCGImageAlphaNoneSkipLast, >> + kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst, >> #else >> CGColorSpaceCreateDeviceRGB(), //colorspace for OS X < >> 10.4 (actually ppc) >> kCGImageAlphaNoneSkipFirst, //bitmapInfo >> @@ -395,22 +389,12 @@ int cocoa_keycode_to_qemu(int keycode) >> // update screenBuffer >> if (dataProviderRef) >> CGDataProviderRelease(dataProviderRef); >> - if (screenBuffer) >> - free(screenBuffer); >> - screenBuffer = malloc( w * 4 * h ); >> - >> - ds->data = screenBuffer; >> - ds->linesize = (w * 4); >> - ds->depth = 32; >> - ds->width = w; >> - ds->height = h; >> -#ifdef __LITTLE_ENDIAN__ >> - ds->bgr = 1; >> -#else >> - ds->bgr = 0; >> -#endif >> >> - dataProviderRef = CGDataProviderCreateWithData(NULL, >> screenBuffer, w * 4 * h, NULL); >> + //sync host window color space with guests >> + screen.bitsPerPixel = ds_get_bits_per_pixel(ds); >> + screen.bitsPerComponent = ds_get_bytes_per_pixel(ds) * 2; >> + >> + dataProviderRef = CGDataProviderCreateWithData(NULL, >> ds_get_data(ds), w * 4 * h, NULL); >> >> // update windows >> if (isFullscreen) { >> @@ -423,6 +407,7 @@ int cocoa_keycode_to_qemu(int keycode) >> } >> screen.width = w; >> screen.height = h; >> + [normalWindow center]; >> [self setContentDimensions]; >> [self setFrame:NSMakeRect(cx, cy, cw, ch)]; >> } >> @@ -740,6 +725,7 @@ int cocoa_keycode_to_qemu(int keycode) >> [normalWindow setTitle:[NSString stringWithFormat:@"QEMU"]]; >> [normalWindow setContentView:cocoaView]; >> [normalWindow makeKeyAndOrderFront:self]; >> + [normalWindow center]; >> >> } >> return self; >> @@ -939,11 +925,11 @@ static void cocoa_update(DisplayState *ds, int >> x, int y, int w, int h) >> [cocoaView displayRect:rect]; >> } >> >> -static void cocoa_resize(DisplayState *ds, int w, int h) >> +static void cocoa_resize(DisplayState *ds) >> { >> COCOA_DEBUG("qemu_cocoa: cocoa_resize\n"); >> >> - [cocoaView resizeContentToWidth:w height:h displayState:ds]; >> + [cocoaView resizeContentToWidth:(int)(ds_get_width(ds)) >> height:(int)(ds_get_height(ds)) displayState:ds]; >> } >> >> static void cocoa_refresh(DisplayState *ds) >> @@ -975,20 +961,21 @@ static void cocoa_refresh(DisplayState *ds) >> static void cocoa_cleanup(void) >> { >> COCOA_DEBUG("qemu_cocoa: cocoa_cleanup\n"); >> - >> + qemu_free(dcl); >> } >> >> void cocoa_display_init(DisplayState *ds, int full_screen) >> { >> COCOA_DEBUG("qemu_cocoa: cocoa_display_init\n"); >> >> - // register vga outpu callbacks >> - ds->dpy_update = cocoa_update; >> - ds->dpy_resize = cocoa_resize; >> - ds->dpy_refresh = cocoa_refresh; >> + dcl = qemu_mallocz(sizeof(DisplayChangeListener)); >> + >> + // register vga output callbacks >> + dcl->dpy_update = cocoa_update; >> + dcl->dpy_resize = cocoa_resize; >> + dcl->dpy_refresh = cocoa_refresh; >> >> - // give window a initial Size >> - cocoa_resize(ds, 640, 400); >> + register_displaychangelistener(ds, dcl); >> >> // register cleanup function >> atexit(cocoa_cleanup); >> >