mirror of
https://github.com/mii443/qemu.git
synced 2025-08-22 15:15:46 +00:00
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:
committed by
Philippe Mathieu-Daudé
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];
|
[self getRectsBeingDrawn:&rectList count:&rectCount];
|
||||||
for (i = 0; i < rectCount; i++) {
|
for (i = 0; i < rectCount; i++) {
|
||||||
clipRect.origin.x = rectList[i].origin.x / cdx;
|
clipRect = rectList[i];
|
||||||
clipRect.origin.y = (float)h - (rectList[i].origin.y + rectList[i].size.height) / cdy;
|
clipRect.origin.y = (float)h - (clipRect.origin.y + clipRect.size.height);
|
||||||
clipRect.size.width = rectList[i].size.width / cdx;
|
|
||||||
clipRect.size.height = rectList[i].size.height / cdy;
|
|
||||||
clipImageRef = CGImageCreateWithImageInRect(
|
clipImageRef = CGImageCreateWithImageInRect(
|
||||||
imageRef,
|
imageRef,
|
||||||
clipRect
|
clipRect
|
||||||
@ -553,6 +551,11 @@ static CGEventRef handleTapEvent(CGEventTapProxy proxy, CGEventType type, CGEven
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void) updateBounds
|
||||||
|
{
|
||||||
|
[self setBoundsSize:NSMakeSize(screen.width, screen.height)];
|
||||||
|
}
|
||||||
|
|
||||||
- (void) updateUIInfoLocked
|
- (void) updateUIInfoLocked
|
||||||
{
|
{
|
||||||
/* Must be called with the BQL, i.e. via updateUIInfo */
|
/* 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;
|
screen.height = h;
|
||||||
[self setContentDimensions];
|
[self setContentDimensions];
|
||||||
[self setFrame:NSMakeRect(cx, cy, cw, ch)];
|
[self setFrame:NSMakeRect(cx, cy, cw, ch)];
|
||||||
|
[self updateBounds];
|
||||||
}
|
}
|
||||||
|
|
||||||
// update screenBuffer
|
// update screenBuffer
|
||||||
@ -1305,6 +1309,7 @@ static CGEventRef handleTapEvent(CGEventTapProxy proxy, CGEventType type, CGEven
|
|||||||
|
|
||||||
- (void)windowDidResize:(NSNotification *)notification
|
- (void)windowDidResize:(NSNotification *)notification
|
||||||
{
|
{
|
||||||
|
[cocoaView updateBounds];
|
||||||
[cocoaView updateUIInfo];
|
[cocoaView updateUIInfo];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1967,16 +1972,7 @@ static void cocoa_update(DisplayChangeListener *dcl,
|
|||||||
COCOA_DEBUG("qemu_cocoa: cocoa_update\n");
|
COCOA_DEBUG("qemu_cocoa: cocoa_update\n");
|
||||||
|
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
NSRect rect;
|
NSRect rect = NSMakeRect(x, [cocoaView gscreen].height - y - h, w, h);
|
||||||
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]);
|
|
||||||
}
|
|
||||||
[cocoaView setNeedsDisplayInRect:rect];
|
[cocoaView setNeedsDisplayInRect:rect];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user