Fix dynamic cursor offset if you 1. load a new empty session (remove the whole hash from the URL), 2. switch to the brush or eraser tool, 3. see the cursor offset on the canvas
Fix flash of UI where there's no menu bar while loading, that caused the shift in UI that caused the cursor offset to be wrong.
- Use dark blue for the theme color, from the windows 98 titlebar color
- Use dark gray for the background color, from the scrollable canvas area
- Make webhint.io happy by removing the version field and nonstandard categories from the manifest
- (PARTIALLY avoid a browser bug in chrome. When you zoom to a non-integer scale, there's this weird quantum antialiasing due to the canvas having a backing store which is higher density than the canvas's logical pixels (and redraw regions come into play as well). Switching to storing ImageData instead of canvases for undos/redos doesn't eliminate much of this problem, but it avoids having the undos/redos also store some high-DPI state and thereby SOMETIMES restore a state of whether antialiasing is happening or not. So it's a little less weird now, but it doesn't really solve that bugginess.)
- Protect against data loss when running low on memory. The browser (chrome at least) can clear canvases when low on memory. If the data is erased, and you undo, or do anything to the canvas, jspaint saves over the autosave. Ideally there should be multiple autosaves, but for now this is catastrophic in terms of data loss. Using ImageData instead of canvases, hopefully the browser is less willing to destroy this data, since it's more like a plain data structure in your program, and you would hope it wouldn't just delete arbitrary data in your program. A crash should be better than losing the canvas data (undos/redos) because in that case the autosave should still be in tact, altho this doesn't protect against the case where the main canvas is cleared by the browser, and then you do something to interact with the canvas other than undo/redo, and then either the page crashes or you refresh, and the autosave will still be gone.
- Behavior change or Regression: Now if the document is transparent, but the document mode is opaque, and you paste something larger than the canvas, it'll keep the transparency in the area of the original document, because it's using putImageData instead of drawImage.
- Regression: When you choose Opaque in the Image > Attributes... it no longer makes the document opaque because it's using putImageData instead of drawImage.
- Fix: Rewrite the Free-Form Select's temporary shape preview to use a proper layer instead of abusing the undo stack. This reduces the number of undo states created, and should make it easier to implement passive selections in the future. (Selections shouldn't create an undo state until you start dragging them.) This should also fix a bug in multiplayer where "inverty brush" could be left behind.
- Use new vector icon
- Use https://www.favicon-generator.org to create a template for what icons are needed etc.
- Tweak paths and add and update metadata
Maybe this will make it show up nicer in Google?
Currently Google is transforming "untitled - Paint" to "Paint: untitled" for the title of the page; maybe this would make it more confident in using the original title, since it lines up with the domain name, and is more than one word? idk
This probably won't help SEO (even in the limited way that I want (a better description, rather than ranking which is what most SEO is focused on)), but it should improve the site for Lynx users 🙃 and make it easier to update (HTML highlighting etc.)