mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-16 11:06:06 -04:00
add extremely inefficient window drawing to cocoa backend
This commit is contained in:
parent
9183838d54
commit
faf09dc423
57
src/Window.c
57
src/Window.c
@ -1518,6 +1518,9 @@ void Clipboard_SetText(const String* value) {
|
|||||||
|
|
||||||
PasteboardPutItemFlavor(pbRef, 1, FMT_UTF8, cfData, 0);
|
PasteboardPutItemFlavor(pbRef, 1, FMT_UTF8, cfData, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Window_OpenKeyboard(void) { }
|
||||||
|
void Window_CloseKeyboard(void) { }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -2024,9 +2027,6 @@ void Window_FreeFramebuffer(Bitmap* bmp) {
|
|||||||
CGColorSpaceRelease(colorSpace);
|
CGColorSpaceRelease(colorSpace);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Window_OpenKeyboard(void) { }
|
|
||||||
void Window_CloseKeyboard(void) { }
|
|
||||||
|
|
||||||
void Window_EnableRawMouse(void) {
|
void Window_EnableRawMouse(void) {
|
||||||
Window_DefaultEnableRawMouse();
|
Window_DefaultEnableRawMouse();
|
||||||
CGAssociateMouseAndMouseCursorPosition(0);
|
CGAssociateMouseAndMouseCursorPosition(0);
|
||||||
@ -3767,20 +3767,65 @@ void Window_ShowDialog(const char* title, const char* msg) {
|
|||||||
CFRelease(msgCF);
|
CFRelease(msgCF);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Bitmap fb_bmp;
|
||||||
void Window_AllocFramebuffer(Bitmap* bmp) {
|
void Window_AllocFramebuffer(Bitmap* bmp) {
|
||||||
bmp->Scan0 = (cc_uint8*)Mem_Alloc(bmp->Width * bmp->Height, 4, "window pixels");
|
bmp->Scan0 = (cc_uint8*)Mem_Alloc(bmp->Width * bmp->Height, 4, "window pixels");
|
||||||
|
fb_bmp = *bmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Window_DrawFramebuffer(Rect2D r) {
|
void Window_DrawFramebuffer(Rect2D r) {
|
||||||
|
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
|
||||||
|
CGContextRef context = NULL;
|
||||||
|
CGDataProviderRef provider;
|
||||||
|
CGImageRef image;
|
||||||
|
CGRect rect;
|
||||||
|
OSStatus err;
|
||||||
|
id nsView;
|
||||||
|
id nsContext;
|
||||||
|
|
||||||
|
/* Unfortunately CGImageRef is immutable, so changing the */
|
||||||
|
/* underlying data doesn't change what shows when drawing. */
|
||||||
|
/* TODO: Find a better way of doing this in cocoa.. */
|
||||||
|
|
||||||
|
nsView = objc_msgSend(winHandle, sel_registerName("contentView"));
|
||||||
|
Platform_Log1("VIEW: %x", &nsView);
|
||||||
|
|
||||||
|
objc_msgSend(nsView, sel_registerName("lockFocus"));
|
||||||
|
Platform_LogConst("LOCKED FOCUS");
|
||||||
|
|
||||||
|
nsContext = objc_msgSend((id)objc_getClass("NSGraphicsContext"), sel_registerName("currentContext"));
|
||||||
|
Platform_Log1("NS CTX: %x", &nsContext);
|
||||||
|
|
||||||
|
context = objc_msgSend(nsContext, sel_registerName("graphicsPort"));
|
||||||
|
Platform_Log1("CTX: %x", &context);
|
||||||
|
|
||||||
|
/* TODO: Only update changed bit.. */
|
||||||
|
rect.origin.x = 0; rect.origin.y = 0;
|
||||||
|
rect.size.width = Window_Width;
|
||||||
|
rect.size.height = Window_Height;
|
||||||
|
|
||||||
|
/* TODO: REPLACE THIS AWFUL HACK */
|
||||||
|
|
||||||
|
provider = CGDataProviderCreateWithData(NULL, fb_bmp.Scan0,
|
||||||
|
Bitmap_DataSize(fb_bmp.Width, fb_bmp.Height), NULL);
|
||||||
|
image = CGImageCreate(fb_bmp.Width, fb_bmp.Height, 8, 32, fb_bmp.Width * 4, colorSpace,
|
||||||
|
kCGBitmapByteOrder32Little | kCGImageAlphaFirst, provider, NULL, 0, 0);
|
||||||
|
|
||||||
|
CGContextDrawImage(context, rect, image);
|
||||||
|
CGContextSynchronize(context);
|
||||||
|
|
||||||
|
objc_msgSend(nsView, sel_registerName("unlockFocus"));
|
||||||
|
Platform_LogConst("UNLOCKED FOCUS");
|
||||||
|
|
||||||
|
CGImageRelease(image);
|
||||||
|
CGDataProviderRelease(provider);
|
||||||
|
CGColorSpaceRelease(colorSpace);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Window_FreeFramebuffer(Bitmap* bmp) {
|
void Window_FreeFramebuffer(Bitmap* bmp) {
|
||||||
Mem_Free(bmp->Scan0);
|
Mem_Free(bmp->Scan0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Window_OpenKeyboard(void) { }
|
|
||||||
void Window_CloseKeyboard(void) { }
|
|
||||||
|
|
||||||
void Window_EnableRawMouse(void) { }
|
void Window_EnableRawMouse(void) { }
|
||||||
void Window_UpdateRawMouse(void) { }
|
void Window_UpdateRawMouse(void) { }
|
||||||
void Window_DisableRawMouse(void) { }
|
void Window_DisableRawMouse(void) { }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user