1. The zoom levels are following a curve 1.189207115002721^x where x ranges from -8 to 24, or alternatively 2^x where x is sampled at every 1/4 from -2 to 6. That means, that every zoom level is ~1.19 more zoomed in than the last one and that every 4 levels, the zoom level doubles. The values are truncated to a low number of decimals but it shouldn't have a large effect. Using exponential zoom means that the intervals should be the consistent at all levels. So I have to assume that the problem is not of consistency, but that the differences between the levels are too big? The zoom tool (to differentiate from the scroll wheel) on the other hand zooms the canvas 4 levels at a time (= doubles zoom), and should had had a way to zoom one level at a time, but that was broken, I'll fix that asap and add a slider for changing the zoom strength for good measure. Adding more fine grained zoom (e.g. doubling every 8 levels) would make zooming in and out slower especially on large doodles as this still redraws everything for every level when zooming with scroll wheel. If I manage to fix the lag with zooming with scroll I'll be able to add more fine grained zoom as well. If the problem was not any of this, and is somehow solvable, lmk.
2. Can I ask what your screen resolution is, I'm having a lot of difficulty trying to see if a dot or a part of line is one pixel in any direction because the pixels are very small. I changed the part of code that translates screen coordinates to add half a pixel to the screen coordinate so it should now use the center of the pixel instead of the top left corner of the pixel. I can't see a big difference but maybe the results are a tiny bit better now?
3. I don't know why the zoom level would affect the tool positions on the screen, other than that the zoom level gets changed even when the cursor is on the side panel. The scroll wheel is no longer used for zooming if it's on the layer or tool panels. I can't recreate the situation where the tools are off screen. I did, however manage to break the ui even more than it originally was.
4. insert "UI coding is my passion" meme or something here. I thought using an image would had been easier but apparently displaying images properly is too difficult for java or whatever so I'll just code the circle directly as a function of x and y positions of the pixels, the cpu usage likely won't be the best but at least it should stay intact when it's moving.
5. I thought I fixed that last year. At least on my machines the only time it's using more cpu is when it's redrawing the canvas but not if the cursor is not moving. I'll need to check that at some point when I have more energy.
I pushed a new build where at least some of those should be fixed.