Add Cursors of other Users
Allows you to see cursors of other users and includes misc other cursor changes that are relevant
Closes #242
Implementation
Each user sends their view region to the server. This is the left, right, bottom, top, and zoom. From this the server then matches it up to chunks (at a good size relative to their zoom level) and then returns all the data in those chunks (other users cursors and reactions).
On future requests the server will only respond to the user client with things that changed. If a cursor doesn’t move it doesn’t get resent and the client just positions that cursor based on where it knows it is.
Cursors that are at too different of a zoom level from the client don't get sent back by the server and the size of other peoples cursors change a bit depending on what their zoom level is relative to you. People who are more zoomed in will have smaller cursors and people more zoomed out will have larger cursors (and as the large ones get close to not showing they get more transparent so they arent blocking things)
Reactions
You can hit any of the number keys to send a reaction corresponding to the number. THis shows for a bit above you. This is sent to other users so you can do a little bit on communication within the event.
Reactions are limited to 1 per 1 second, 5 per minute, and 50 per hour to prevent someone from spamming requests
Other Changes
When you select a color your cursor becomes that color. Secondary color is shown as a square in the bottom right of the cursor if you have one set. This is given to other users so that when you display the cursors of other users they show as the color they have selected (but secondary color is not sent)
Adjusted the whois click and hold so it lines up the canvas exactly instead of being offset a bit like it was before
Made the left sidebars mutually exclusively open similar to teh right sidebar ones. When you whois a new pixel when whois is already open it opens new sidebar instead of just changing data in the current one so that gets more weight.
Color picked and pixel placed text now is colored based on the color you have selected
When you click to place a pixel but get an error the cursor temporarily swaps to an x