Started working on high-dpi support.
This commit is contained in:
parent
0420a9a852
commit
d1b9977a63
|
@ -162,6 +162,8 @@ struct Mac_Object{
|
||||||
struct Mac_Vars {
|
struct Mac_Vars {
|
||||||
b32 gl_is_initialized;
|
b32 gl_is_initialized;
|
||||||
|
|
||||||
|
i32 width, height;
|
||||||
|
|
||||||
Thread_Context *tctx;
|
Thread_Context *tctx;
|
||||||
|
|
||||||
Arena *frame_arena;
|
Arena *frame_arena;
|
||||||
|
@ -303,8 +305,14 @@ mac_file_can_be_made(u8* filename){
|
||||||
function void
|
function void
|
||||||
mac_resize(float width, float height){
|
mac_resize(float width, float height){
|
||||||
if ((width > 0.0f) && (height > 0.0f)){
|
if ((width > 0.0f) && (height > 0.0f)){
|
||||||
target.width = width;
|
NSSize coord_size = NSMakeSize(width, height);
|
||||||
target.height = height;
|
NSSize backing_size = [mac_vars.view convertSizeToBacking:coord_size];
|
||||||
|
|
||||||
|
mac_vars.width = (i32)backing_size.width;
|
||||||
|
mac_vars.height = (i32)backing_size.height;
|
||||||
|
|
||||||
|
target.width = (i32)backing_size.width;
|
||||||
|
target.height = (i32)backing_size.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
system_signal_step(0);
|
system_signal_step(0);
|
||||||
|
@ -361,6 +369,20 @@ mac_resize(float width, float height){
|
||||||
mac_resize(bounds.size.width, bounds.size.height);
|
mac_resize(bounds.size.width, bounds.size.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)viewDidChangeBackingProperties{
|
||||||
|
|
||||||
|
// NOTE(yuval): Screen scale factor calculation
|
||||||
|
NSScreen* screen = [NSScreen mainScreen];
|
||||||
|
NSDictionary* desc = [screen deviceDescription];
|
||||||
|
NSSize size = [[desc valueForKey:NSDeviceResolution] sizeValue];
|
||||||
|
f32 max_dpi = Max(size.width, size.height);
|
||||||
|
mac_vars.screen_scale_factor = (max_dpi / 72.0f);
|
||||||
|
|
||||||
|
NSRect frame = [screen frame];
|
||||||
|
printf("Screen: w:%f h:%f\n", frame.size.width, frame.size.height);
|
||||||
|
printf("Scale Factor: %f\n\n", mac_vars.screen_scale_factor);
|
||||||
|
}
|
||||||
|
|
||||||
- (void)drawRect:(NSRect)bounds{
|
- (void)drawRect:(NSRect)bounds{
|
||||||
// NOTE(yuval): Read comment in win32_4ed.cpp's main loop
|
// NOTE(yuval): Read comment in win32_4ed.cpp's main loop
|
||||||
system_mutex_release(mac_vars.global_frame_mutex);
|
system_mutex_release(mac_vars.global_frame_mutex);
|
||||||
|
@ -388,6 +410,8 @@ mac_resize(float width, float height){
|
||||||
|
|
||||||
input.trying_to_kill = input_chunk.trans.trying_to_kill;
|
input.trying_to_kill = input_chunk.trans.trying_to_kill;
|
||||||
|
|
||||||
|
block_zero_struct(&mac_vars.input_chunk.trans);
|
||||||
|
|
||||||
// NOTE(yuval): See comment in win32_4ed.cpp's main loop
|
// NOTE(yuval): See comment in win32_4ed.cpp's main loop
|
||||||
if (mac_vars.send_exit_signal){
|
if (mac_vars.send_exit_signal){
|
||||||
input.trying_to_kill = true;
|
input.trying_to_kill = true;
|
||||||
|
@ -407,6 +431,8 @@ mac_resize(float width, float height){
|
||||||
CGLUnlockContext([[self openGLContext] CGLContextObj]);
|
CGLUnlockContext([[self openGLContext] CGLContextObj]);
|
||||||
|
|
||||||
mac_vars.first = false;
|
mac_vars.first = false;
|
||||||
|
|
||||||
|
linalloc_clear(mac_vars.frame_arena);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)windowShouldClose:(NSWindow*)sender{
|
- (BOOL)windowShouldClose:(NSWindow*)sender{
|
||||||
|
@ -428,15 +454,30 @@ mac_resize(float width, float height){
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)keyDown:(NSEvent *)event{
|
- (void)keyDown:(NSEvent *)event{
|
||||||
[self requestDisplay];
|
NSString* characters = [event characters];
|
||||||
|
if ([characters length] != 0) {
|
||||||
|
u32 character_code = [characters characterAtIndex:0];
|
||||||
|
|
||||||
|
// NOTE(yuval): Control characters generate character_codes < 32
|
||||||
|
if (character_code > 31) {
|
||||||
|
// TODO(yuval): This is actually in utf16!!!
|
||||||
|
String_Const_u32 str_32 = SCu32(&character_code, 1);
|
||||||
|
String_Const_u8 str_8 = string_u8_from_string_u32(mac_vars.frame_arena, str_32).string;
|
||||||
|
|
||||||
|
Input_Event event = {};
|
||||||
|
event.kind = InputEventKind_TextInsert;
|
||||||
|
event.text.string = str_8;
|
||||||
|
push_input_event(mac_vars.frame_arena, &mac_vars.input_chunk.trans.event_list, &event);
|
||||||
|
|
||||||
|
system_signal_step(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)mouseMoved:(NSEvent*)event{
|
- (void)mouseMoved:(NSEvent*)event{
|
||||||
[self requestDisplay];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)mouseDown:(NSEvent*)event{
|
- (void)mouseDown:(NSEvent*)event{
|
||||||
[self requestDisplay];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)init_opengl{
|
- (void)init_opengl{
|
||||||
|
@ -478,7 +519,9 @@ mac_resize(float width, float height){
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)requestDisplay{
|
- (void)requestDisplay{
|
||||||
[self setNeedsDisplayInRect:[mac_vars.window frame]];
|
CGRect cg_rect = CGRectMake(0, 0, mac_vars.width, mac_vars.height);
|
||||||
|
NSRect rect = NSRectFromCGRect(cg_rect);
|
||||||
|
[self setNeedsDisplayInRect:rect];
|
||||||
}
|
}
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@ -648,20 +691,18 @@ main(int arg_count, char **args){
|
||||||
mac_gl_load_functions();
|
mac_gl_load_functions();
|
||||||
|
|
||||||
// NOTE(yuval): Create NSWindow
|
// NOTE(yuval): Create NSWindow
|
||||||
float w;
|
i32 w;
|
||||||
float h;
|
i32 h;
|
||||||
if (plat_settings.set_window_size){
|
if (plat_settings.set_window_size){
|
||||||
w = (float)plat_settings.window_w;
|
w = plat_settings.window_w;
|
||||||
h = (float)plat_settings.window_h;
|
h = plat_settings.window_h;
|
||||||
} else{
|
} else{
|
||||||
w = 800.0f;
|
w = 800;
|
||||||
h = 600.0f;
|
h = 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
mac_resize(w, h);
|
|
||||||
|
|
||||||
NSRect screen_rect = [[NSScreen mainScreen] frame];
|
NSRect screen_rect = [[NSScreen mainScreen] frame];
|
||||||
NSRect initial_frame = NSMakeRect((screen_rect.size.width - w) * 0.5f, (screen_rect.size.height - h) * 0.5f, w, h);
|
NSRect initial_frame = NSMakeRect((f32)(screen_rect.size.width - w) * 0.5f, (f32)(screen_rect.size.height - h) * 0.5f, w, h);
|
||||||
|
|
||||||
u32 style_mask = NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | NSWindowStyleMaskMiniaturizable | NSWindowStyleMaskResizable;
|
u32 style_mask = NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | NSWindowStyleMaskMiniaturizable | NSWindowStyleMaskResizable;
|
||||||
|
|
||||||
|
@ -684,11 +725,14 @@ main(int arg_count, char **args){
|
||||||
mac_vars.view = [[OpenGLView alloc] init];
|
mac_vars.view = [[OpenGLView alloc] init];
|
||||||
[mac_vars.view setFrame:[content_view bounds]];
|
[mac_vars.view setFrame:[content_view bounds]];
|
||||||
[mac_vars.view setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
|
[mac_vars.view setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
|
||||||
|
[mac_vars.view setWantsBestResolutionOpenGLSurface:YES];
|
||||||
|
|
||||||
// NOTE(yuval): Display opengl view and window
|
// NOTE(yuval): Display opengl view and window
|
||||||
[content_view addSubview:mac_vars.view];
|
[content_view addSubview:mac_vars.view];
|
||||||
[mac_vars.window makeKeyAndOrderFront:nil];
|
[mac_vars.window makeKeyAndOrderFront:nil];
|
||||||
|
|
||||||
|
mac_resize(w, h);
|
||||||
|
|
||||||
//
|
//
|
||||||
// TODO(yuval): Misc System Initializations
|
// TODO(yuval): Misc System Initializations
|
||||||
//
|
//
|
||||||
|
|
Loading…
Reference in New Issue