News for hackers. Stuff that matters.
Re:It's always been you, Canvas2D by Trufa on Friday March 04, 2022 @12:35PM (#30557741)
Dude!! Freaking awesome!! Thanks a bunch!! That's exactly what I was looking for! If you have some sort of ko-fi account or whatever I'll buy you a coffee!
Re:It's always been you, Canvas2D by etimberg on Friday March 04, 2022 @01:09PM (#30558221)
One thing to keep in mind with the window.devicePixelRatio is that it is not a static value as it can change over time. Some common reasons it could change are if the user drags the browser window from a low density screen to a high density one. Additionally, it will change if the user zooms the page in and out.
Re:It's always been you, Canvas2D by leeoniya on Friday March 04, 2022 @02:33PM (#30559318)
you can use matchMedia to detect devicePixelRatio changes and re-sync:

https://github.com/leeoniya/uPlot/blob/190134aa844cfa2a0c052...

everything stays crisp even as you browser-zoom. e.g. https://leeoniya.github.io/uPlot/demos/area-fill.html

Re:It's always been you, Canvas2D by moron4hire on Friday March 04, 2022 @03:20PM (#30559937)
Zooming also fires the Window's `resize` event, which will also catch a user rotating their smartphone/tablet, or, erh, resizing the window on desktop.
Re:It's always been you, Canvas2D by leeoniya on Friday March 04, 2022 @03:43PM (#30560276)
resize and orientationchange don't change devicePixelRatio though, so they're somewhat different concerns.
Re:It's always been you, Canvas2D by moron4hire on Friday March 04, 2022 @07:04PM (#30562326)
No, it's the same concern. The concern is not "how do I keep track of just devicePixelRatio?" It's "how do I fill this window with a canvas at native resolution?" Resize handles all of that. Device changes orientation? Resize fires. User zooms on content (this changing devicePixelRatio)? Resize fires. Anything that changes the page's clientWidth/clientHeight causes the Resize event to fire. You need only the one event.
Re:It's always been you, Canvas2D by Dylan16807 on Friday March 04, 2022 @09:39PM (#30563597)
> The concern is not "how do I keep track of just devicePixelRatio?" It's "how do I fill this window with a canvas at native resolution?"

Not everyone's canvas is filling the window.

Re:It's always been you, Canvas2D by moron4hire on Friday March 04, 2022 @10:32PM (#30563956)
All the ways in which you will care about how to buffer dimensions of your canvas to avoid aliasing artifacts can be handled with just the window.onresize event, whether your canvas is fixed or proportionally sized.

https://codepen.io/SeanMcBeth/pen/QWOoLNX

Throw a check in there to make sure the native dimensions actually did change so you don't needlessly redraw. Debounce it with setTimeout if you're super worried about people waggling their windows around or whatever.

Re:It's always been you, Canvas2D by inDigiNeous on Friday March 04, 2022 @03:27PM (#30560046)
Yeah I was struggling with this one a while, seems there is no way to know the actual devicePixelRatio of the display inside a browser, as the browser zoom level directly affects that.

Or does anyone here happen to know a way ?

Re:It's always been you, Canvas2D by moron4hire on Friday March 04, 2022 @07:29PM (#30562521)
DevicePixelRatio and clientWidth/clientHeight change together. You need only the Resize event on the Canvas. Your canvas.clientWidth * window.devicePixelRatio will always be the native width of the canvas.
Re:It's always been you, Canvas2D by simonsarris on Friday March 04, 2022 @01:01PM (#30558110)
Haha well, you could always subscribe to my newsletter for a month. You might get a kick out of it anyway.

I'm glad to have solved your mystery!

Re:It's always been you, Canvas2D by Trufa on Saturday March 05, 2022 @09:19AM (#30567798)
Done!!