Skip to content

Commit

Permalink
ui/cocoa: Scale with NSView instead of Core Graphics
Browse files Browse the repository at this point in the history
Core Graphics is not accelerated and slow.

Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Tested-by: Rene Engel <ReneEngel80@emailn.de>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Message-ID: <20240224-cocoa-v12-4-e89f70bdda71@daynix.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
  • Loading branch information
akihikodaki authored and philmd committed Mar 5, 2024
1 parent f4de968 commit fcb03de
Showing 1 changed file with 10 additions and 14 deletions.
24 changes: 10 additions & 14 deletions ui/cocoa.m
Original file line number Diff line number Diff line change
Expand Up @@ -504,10 +504,8 @@ - (void) drawRect:(NSRect) rect

[self getRectsBeingDrawn:&rectList count:&rectCount];
for (i = 0; i < rectCount; i++) {
clipRect.origin.x = rectList[i].origin.x / cdx;
clipRect.origin.y = (float)h - (rectList[i].origin.y + rectList[i].size.height) / cdy;
clipRect.size.width = rectList[i].size.width / cdx;
clipRect.size.height = rectList[i].size.height / cdy;
clipRect = rectList[i];
clipRect.origin.y = (float)h - (clipRect.origin.y + clipRect.size.height);
clipImageRef = CGImageCreateWithImageInRect(
imageRef,
clipRect
Expand Down Expand Up @@ -553,6 +551,11 @@ - (void) setContentDimensions
}
}

- (void) updateBounds
{
[self setBoundsSize:NSMakeSize(screen.width, screen.height)];
}

- (void) updateUIInfoLocked
{
/* Must be called with the BQL, i.e. via updateUIInfo */
Expand Down Expand Up @@ -642,6 +645,7 @@ - (void) switchSurface:(pixman_image_t *)image
screen.height = h;
[self setContentDimensions];
[self setFrame:NSMakeRect(cx, cy, cw, ch)];
[self updateBounds];
}

// update screenBuffer
Expand Down Expand Up @@ -1305,6 +1309,7 @@ - (void)windowDidChangeScreen:(NSNotification *)notification

- (void)windowDidResize:(NSNotification *)notification
{
[cocoaView updateBounds];
[cocoaView updateUIInfo];
}

Expand Down Expand Up @@ -1967,16 +1972,7 @@ static void cocoa_update(DisplayChangeListener *dcl,
COCOA_DEBUG("qemu_cocoa: cocoa_update\n");

dispatch_async(dispatch_get_main_queue(), ^{
NSRect rect;
if ([cocoaView cdx] == 1.0) {
rect = NSMakeRect(x, [cocoaView gscreen].height - y - h, w, h);
} else {
rect = NSMakeRect(
x * [cocoaView cdx],
([cocoaView gscreen].height - y - h) * [cocoaView cdy],
w * [cocoaView cdx],
h * [cocoaView cdy]);
}
NSRect rect = NSMakeRect(x, [cocoaView gscreen].height - y - h, w, h);
[cocoaView setNeedsDisplayInRect:rect];
});
}
Expand Down

0 comments on commit fcb03de

Please sign in to comment.