mirror of https://github.com/xemu-project/xemu.git
ui/cocoa: Scale with NSView instead of Core Graphics
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>
This commit is contained in:
parent
f4de9688d4
commit
fcb03de7e1
24
ui/cocoa.m
24
ui/cocoa.m
|
@ -504,10 +504,8 @@ static CGEventRef handleTapEvent(CGEventTapProxy proxy, CGEventType type, CGEven
|
|||
|
||||
[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
|
||||
|
@ -553,6 +551,11 @@ static CGEventRef handleTapEvent(CGEventTapProxy proxy, CGEventType type, CGEven
|
|||
}
|
||||
}
|
||||
|
||||
- (void) updateBounds
|
||||
{
|
||||
[self setBoundsSize:NSMakeSize(screen.width, screen.height)];
|
||||
}
|
||||
|
||||
- (void) updateUIInfoLocked
|
||||
{
|
||||
/* Must be called with the BQL, i.e. via updateUIInfo */
|
||||
|
@ -642,6 +645,7 @@ static CGEventRef handleTapEvent(CGEventTapProxy proxy, CGEventType type, CGEven
|
|||
screen.height = h;
|
||||
[self setContentDimensions];
|
||||
[self setFrame:NSMakeRect(cx, cy, cw, ch)];
|
||||
[self updateBounds];
|
||||
}
|
||||
|
||||
// update screenBuffer
|
||||
|
@ -1305,6 +1309,7 @@ static CGEventRef handleTapEvent(CGEventTapProxy proxy, CGEventType type, CGEven
|
|||
|
||||
- (void)windowDidResize:(NSNotification *)notification
|
||||
{
|
||||
[cocoaView updateBounds];
|
||||
[cocoaView updateUIInfo];
|
||||
}
|
||||
|
||||
|
@ -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];
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue