diff --git a/src/mach.js b/src/mach.js index a7bf3a04..f8bc66e1 100644 --- a/src/mach.js +++ b/src/mach.js @@ -42,8 +42,10 @@ const mach = { machCanvasInit(width, height, id) { let canvas = document.createElement("canvas"); canvas.id = "#mach-canvas-" + mach.canvases.length; - canvas.width = width; - canvas.height = height; + canvas.style.width = width + "px"; + canvas.style.height = height + "px"; + canvas.width = Math.floor(width * window.devicePixelRatio); + canvas.height = Math.floor(height * window.devicePixelRatio); canvas.tabIndex = 1; mach.setString(canvas.id, id); @@ -71,17 +73,29 @@ const mach = { machCanvasSetSize(canvas, width, height) { const cv = mach.canvases[canvas]; if (width > 0 && height > 0) { - cv.canvas.width = width; - cv.canvas.height = height; + cv.canvas.style.width = width + "px"; + cv.canvas.style.height = height + "px"; + cv.canvas.width = width * window.devicePixelRatio; + cv.canvas.height = height * window.devicePixelRatio; } }, - machCanvasGetWidth(canvas) { + machCanvasGetWindowWidth(canvas) { + const cv = mach.canvases[canvas]; + return cv.canvas.width / window.devicePixelRatio; + }, + + machCanvasGetWindowHeight(canvas) { + const cv = mach.canvases[canvas]; + return cv.canvas.height / window.devicePixelRatio; + }, + + machCanvasGetFramebufferWidth(canvas) { const cv = mach.canvases[canvas]; return cv.canvas.width; }, - machCanvasGetHeight(canvas) { + machCanvasGetFramebufferHeight(canvas) { const cv = mach.canvases[canvas]; return cv.canvas.height; }, diff --git a/src/wasm.zig b/src/wasm.zig index 7fd3a43a..2b988100 100644 --- a/src/wasm.zig +++ b/src/wasm.zig @@ -9,8 +9,10 @@ const js = struct { extern fn machCanvasDeinit(canvas: CanvasId) void; extern fn machCanvasSetTitle(canvas: CanvasId, title: [*]const u8, len: u32) void; extern fn machCanvasSetSize(canvas: CanvasId, width: u32, height: u32) void; - extern fn machCanvasGetWidth(canvas: CanvasId) u32; - extern fn machCanvasGetHeight(canvas: CanvasId) u32; + extern fn machCanvasGetWindowWidth(canvas: CanvasId) u32; + extern fn machCanvasGetWindowHeight(canvas: CanvasId) u32; + extern fn machCanvasGetFramebufferWidth(canvas: CanvasId) u32; + extern fn machCanvasGetFramebufferHeight(canvas: CanvasId) u32; extern fn machPerfNow() f64; extern fn machLog(str: [*]const u8, len: u32) void; @@ -41,14 +43,17 @@ pub const Core = struct { pub fn setShouldClose(_: *Core, _: bool) void {} - pub fn getFramebufferSize(_: *Core) !structs.Size { - return structs.Size{ .width = 0, .height = 0 }; + pub fn getFramebufferSize(core: *Core) !structs.Size { + return structs.Size{ + .width = js.machCanvasGetFramebufferWidth(core.id), + .height = js.machCanvasGetFramebufferHeight(core.id), + }; } pub fn getWindowSize(core: *Core) !structs.Size { return structs.Size{ - .width = js.machCanvasGetWidth(core.id), - .height = js.machCanvasGetHeight(core.id), + .width = js.machCanvasGetWindowWidth(core.id), + .height = js.machCanvasGetWindowHeight(core.id), }; }