mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-16 02:56:09 -04:00
Start on the incredibly ugly cocoa backend
This commit is contained in:
parent
a3b2f7aad5
commit
672eeb904c
134
src/Window.c
134
src/Window.c
@ -284,7 +284,7 @@ static LRESULT CALLBACK Window_Procedure(HWND handle, UINT message, WPARAM wPara
|
|||||||
bool ext = (lParam & (1UL << 24)) != 0;
|
bool ext = (lParam & (1UL << 24)) != 0;
|
||||||
|
|
||||||
bool lShiftDown, rShiftDown;
|
bool lShiftDown, rShiftDown;
|
||||||
Key mappedKey;
|
Key key;
|
||||||
switch (wParam)
|
switch (wParam)
|
||||||
{
|
{
|
||||||
case VK_SHIFT:
|
case VK_SHIFT:
|
||||||
@ -295,7 +295,7 @@ static LRESULT CALLBACK Window_Procedure(HWND handle, UINT message, WPARAM wPara
|
|||||||
rShiftDown = ((USHORT)GetKeyState(VK_RSHIFT)) >> 15;
|
rShiftDown = ((USHORT)GetKeyState(VK_RSHIFT)) >> 15;
|
||||||
|
|
||||||
if (!pressed || lShiftDown != rShiftDown) {
|
if (!pressed || lShiftDown != rShiftDown) {
|
||||||
Input_SetPressed(KEY_LSHIFT, lShiftDown);
|
Input_SetPressed(KEY_LSHIFT, lShiftDown);
|
||||||
Input_SetPressed(KEY_RSHIFT, rShiftDown);
|
Input_SetPressed(KEY_RSHIFT, rShiftDown);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -311,8 +311,8 @@ static LRESULT CALLBACK Window_Procedure(HWND handle, UINT message, WPARAM wPara
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
mappedKey = Window_MapKey(wParam);
|
key = Window_MapKey(wParam);
|
||||||
if (mappedKey) Input_SetPressed(mappedKey, pressed);
|
if (key) Input_SetPressed(key, pressed);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
@ -3652,3 +3652,129 @@ void GLContext_SetFpsLimit(bool vsync, float minFrameMs) {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef CC_BUILD_COCOA
|
||||||
|
#include <objc/message.h>
|
||||||
|
#include <objc/runtime.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
static id appHandle;
|
||||||
|
static id winHandle;
|
||||||
|
|
||||||
|
typedef struct FailRect_ {
|
||||||
|
// TODO: use CGFloat because that works with 32 bit
|
||||||
|
double x, y;
|
||||||
|
double width, height;
|
||||||
|
} FailRect;
|
||||||
|
|
||||||
|
id Cocoa_SendIntPtr(id receiver, SEL op) {
|
||||||
|
IMP func = objc_msg_lookup(receiver, op);
|
||||||
|
return func(receiver, op);
|
||||||
|
}
|
||||||
|
|
||||||
|
id Cocoa_SendIntPtr_I(id receiver, SEL op, int a1) {
|
||||||
|
IMP func = objc_msg_lookup(receiver, op);
|
||||||
|
return func(receiver, op, a1);
|
||||||
|
}
|
||||||
|
|
||||||
|
id Cocoa_SendIntPtr_P(id receiver, SEL op, id a1) {
|
||||||
|
IMP func = objc_msg_lookup(receiver, op);
|
||||||
|
return func(receiver, op, a1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Cocoa_SendIntPtr_R(id receiver, SEL op, FailRect* r) {
|
||||||
|
IMP func = objc_msg_lookup(receiver, op);
|
||||||
|
func(receiver, op, r);
|
||||||
|
}
|
||||||
|
|
||||||
|
id cmacs_window_init_msgSend(id receiver, SEL op, FailRect a1, int a2, int a3, bool a4) {
|
||||||
|
IMP func = objc_msg_lookup(receiver, op);
|
||||||
|
return func(receiver, op, a1, a2, a3, a4);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Window_Init(void) {
|
||||||
|
id screen, screens;
|
||||||
|
int count;
|
||||||
|
FailRect rect = { 1, 2, 3, 4 };
|
||||||
|
|
||||||
|
Platform_LogConst("hi world");
|
||||||
|
appHandle = Cocoa_SendIntPtr((id)objc_getClass("NSApplication"), sel_registerName("sharedApplication"));
|
||||||
|
Platform_LogConst("all gudd!!");
|
||||||
|
|
||||||
|
|
||||||
|
// TODO: why's this bit of code completely stuffed
|
||||||
|
screens = Cocoa_SendIntPtr((id)objc_getClass("NSScreen"), sel_registerName("screens"));
|
||||||
|
count = Cocoa_SendIntPtr(screens, sel_registerName("count"));
|
||||||
|
Platform_Log1("COUNT: %i", &count);
|
||||||
|
|
||||||
|
screen = Cocoa_SendIntPtr_I(screens, sel_registerName("objectAtIndex:"), 0);
|
||||||
|
Cocoa_SendIntPtr_R(screen, sel_registerName("frame"), &rect);
|
||||||
|
Platform_LogConst("GOT FRAME");
|
||||||
|
printf("STUFF: %f,%f,%f,%f", rect.x, rect.y, rect.width, rect.height);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define NSTitledWindowMask (1 << 0)
|
||||||
|
#define NSClosableWindowMask (1 << 1)
|
||||||
|
#define NSMiniaturizableWindowMask (1 << 2)
|
||||||
|
#define NSResizableWindowMask (1 << 3)
|
||||||
|
|
||||||
|
void Window_Create(int width, int height) {
|
||||||
|
id window;
|
||||||
|
Window_Width = width;
|
||||||
|
Window_Height = height;
|
||||||
|
Window_Exists = true;
|
||||||
|
|
||||||
|
winHandle = Cocoa_SendIntPtr((id)objc_getClass("NSWindow"), sel_registerName("alloc"));
|
||||||
|
winHandle = cmacs_window_init_msgSend(winHandle, sel_getUid("initWithContentRect:styleMask:backing:defer:"), (FailRect) { 0, 0, 1024, 460 }, (NSTitledWindowMask | NSClosableWindowMask | NSResizableWindowMask | NSMiniaturizableWindowMask), 0, false);
|
||||||
|
|
||||||
|
// TODO: move to setVisible
|
||||||
|
Cocoa_SendIntPtr_P(winHandle, sel_registerName("makeKeyAndOrderFront:"), appHandle);
|
||||||
|
Platform_LogConst("made window");
|
||||||
|
}
|
||||||
|
|
||||||
|
void Window_SetTitle(const String* title) { }
|
||||||
|
void Clipboard_GetText(String* value) { }
|
||||||
|
void Clipboard_SetText(const String* value) { }
|
||||||
|
|
||||||
|
void Window_SetVisible(bool visible) { }
|
||||||
|
int Window_GetWindowState(void) { return 0; }
|
||||||
|
void Window_EnterFullscreen(void) { }
|
||||||
|
void Window_ExitFullscreen(void) { }
|
||||||
|
|
||||||
|
void Window_SetSize(int width, int height) { }
|
||||||
|
void Window_Close(void) { }
|
||||||
|
void Window_ProcessEvents(void) { }
|
||||||
|
|
||||||
|
static void Cursor_GetRawPos(int* x, int* y) { *x = 0; *y = 0; }
|
||||||
|
void Cursor_SetPosition(int x, int y) { }
|
||||||
|
void Cursor_SetVisible(bool visible) { }
|
||||||
|
void Window_ShowDialog(const char* title, const char* msg) { }
|
||||||
|
|
||||||
|
void Window_AllocFramebuffer(Bitmap* bmp) {
|
||||||
|
bmp->Scan0 = (cc_uint8*)Mem_Alloc(bmp->Width * bmp->Height, 4, "window pixels");
|
||||||
|
}
|
||||||
|
|
||||||
|
void Window_DrawFramebuffer(Rect2D r) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void Window_FreeFramebuffer(Bitmap* bmp) {
|
||||||
|
Mem_Free(bmp->Scan0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Window_OpenKeyboard(void) { }
|
||||||
|
void Window_CloseKeyboard(void) { }
|
||||||
|
|
||||||
|
void Window_EnableRawMouse(void) { }
|
||||||
|
void Window_UpdateRawMouse(void) { }
|
||||||
|
void Window_DisableRawMouse(void) { }
|
||||||
|
|
||||||
|
void GLContext_Init(struct GraphicsMode* mode) { }
|
||||||
|
void GLContext_Update(void) { }
|
||||||
|
bool GLContext_TryRestore(void) { return true; }
|
||||||
|
void GLContext_Free(void) { }
|
||||||
|
void* GLContext_GetAddress(const char* function) { return NULL; }
|
||||||
|
bool GLContext_SwapBuffers(void) { return true; }
|
||||||
|
void GLContext_SetFpsLimit(bool vsync, float minFrameMs) { }
|
||||||
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user