Skip to content

Commit 258a757

Browse files
vpzomtrrfrtnot-fl3
authored andcommitted
Fix iOS display scaling in high_dpi mode
1 parent a7f5c96 commit 258a757

File tree

1 file changed

+17
-7
lines changed

1 file changed

+17
-7
lines changed

src/native/ios.rs

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,11 @@ pub fn define_glk_or_mtk_view(superclass: &Class) -> *const Class {
141141
let mut ios_pos: NSPoint = msg_send![ios_touch, locationInView: this];
142142

143143
if native_display().lock().unwrap().high_dpi {
144-
ios_pos.x *= 2.;
145-
ios_pos.y *= 2.;
144+
let main_screen: ObjcId = msg_send![class!(UIScreen), mainScreen];
145+
let scale: f64 = msg_send![main_screen, scale];
146+
147+
ios_pos.x *= scale;
148+
ios_pos.y *= scale;
146149
} else {
147150
let content_scale_factor: f64 = msg_send![this, contentScaleFactor];
148151
ios_pos.x *= content_scale_factor;
@@ -317,9 +320,11 @@ pub fn define_glk_or_mtk_view_dlg(superclass: &Class) -> *const Class {
317320
let high_dpi = native_display().lock().unwrap().high_dpi;
318321

319322
let (screen_width, screen_height) = if high_dpi {
323+
let scale: f64 = unsafe { msg_send![main_screen, scale] };
324+
320325
(
321-
screen_rect.size.width as i32 * 2,
322-
screen_rect.size.height as i32 * 2,
326+
(screen_rect.size.width * scale) as i32,
327+
(screen_rect.size.height * scale) as i32,
323328
)
324329
} else {
325330
let content_scale_factor: f64 = unsafe { msg_send![payload.view, contentScaleFactor] };
@@ -414,7 +419,10 @@ unsafe fn create_opengl_view(screen_rect: NSRect, _sample_count: i32, high_dpi:
414419
msg_send_![glk_view_obj, setUserInteractionEnabled: YES];
415420
msg_send_![glk_view_obj, setMultipleTouchEnabled: YES];
416421
if high_dpi {
417-
msg_send_![glk_view_obj, setContentScaleFactor: 2.0];
422+
let main_screen: ObjcId = msg_send![class!(UIScreen), mainScreen];
423+
let scale: f64 = msg_send![main_screen, scale];
424+
425+
msg_send_![glk_view_obj, setContentScaleFactor: scale];
418426
} else {
419427
msg_send_![glk_view_obj, setContentScaleFactor: 1.0];
420428
}
@@ -486,9 +494,11 @@ pub fn define_app_delegate() -> *const Class {
486494
let screen_rect: NSRect = msg_send![main_screen, bounds];
487495

488496
let (_, _) = if conf.high_dpi {
497+
let scale: f64 = msg_send![main_screen, scale];
498+
489499
(
490-
screen_rect.size.width as i32 * 2,
491-
screen_rect.size.height as i32 * 2,
500+
(screen_rect.size.width * scale) as i32,
501+
(screen_rect.size.height * scale) as i32,
492502
)
493503
} else {
494504
(

0 commit comments

Comments
 (0)