Big boards #94
Replies: 4 comments 2 replies
-
@francoisschwarzentruber I've been looking for a project like yours for months. The open-source interactive whiteboard space is crowded, as you most certainly know, but there is a lot of repetition between projects, as well as an evident lack of pedagogic expertise involved in the design decisions. As I see it, your project has three competitive advantages in comparison to most other tools around:
It would be a pity if any of these characteristic advantages of tableaunoir were sacrificed. Now several, if not all, of these advantages are made possible by the canvas, or would have been difficult to implement otherwise. The main general-purpose advantage of SVGs, to my mind, is their lossless scalability (zoom). But a good dithering/anti-aliasing routine could easily compensate for this, while maintaining all the advantages of the canvas. For a great deal of reasons, I generally don't think vector graphics are an appropriate representation for handwriting or real-time graphic interaction. All in all, if this either/or question, then I'd fervently support the canvas model. And that said, I think that a large (infinite?) board is just as important—tableaunoir does feel a bit cramped—and we should rather find ways of achieving that without abandoning the canvas model. Thanks for this good discussion. |
Beta Was this translation helpful? Give feedback.
-
Thank you for your pro-canvas message! I especially agree with 2. eraser. And especially, to erase a tiny precise portion of a drawing. With canvas, you can erase very precise small portions of a line because you manipulate pixels, as shown in that animation: With SVG (e.g. drawing between two vertices, in SVG because it should be animated when vertices are moved, meaning the eraser is less precise for this kind of drawings), the eraser will always remove totally small lines, as shown in that animation: However, for 1-5, both canvas and SVG work. For magnet, it is a bit more difficult to implement via SVG. If we decide tableaunoir to remain mainly in canvas, it could be nice offer some other killing use of canvas (brushes, etc.). To sum up:
|
Beta Was this translation helpful? Give feedback.
-
@tekhnee That sounds very interesting! What kind of music notation do you use? And thank you to precise that you indeed actually need a very precise eraser, and thus Canvas is more suitable. Well, in SVG, we could still have a very precise eraser but it will need to perform intersection computations, crop small lines, etc. :) Concerning the undo/redo, the coordination between clients is still not perfect, but the main issue is not there. Currently, in tableaunoir, there is a linear history and undo will undo the last action, whoever the author of that action is. The issue is to undo only our own actions but not actions of others (issue #46). For instance, if the linear history [..., action1 by user1, action2 by user2, action 3 by user3], the undo by user1 should only undo action1. With SVG, simply remove/add some SVG objects. With Canvas, go back in time after ..., and execute action2 and action3. :) |
Beta Was this translation helpful? Give feedback.
-
Multi-user undo/redo: yes it can be ambiguous. :) With Canvas, a layer per user hmm.. the issue is the number of users. |
Beta Was this translation helpful? Give feedback.
-
Handling big boards depends on how boards are implemented: let us discuss about canvas and SVG.
Now, tableaunoir is (essentially) canvas-based, except for the animated shapes (issue #86) for which SVG is used. Tableaunoir benefits from the advantage of canvas and svg.
Canvas
The advantages of canvas are:
However, a unique big canvas is not suitable for a big board. A solution is to have several tiles. The board is divided in 2000x2000 tiles and only visible tiles are loaded.
SVG
On the other hand, SVG is suitable for handling big boards. It is also suitable when geometrical information should be stored. For instance, animated shapes(like drawing edges between nodes that can be moved) are currently implemented with svg (and they are actually implemented with svg). SVG could slow down when the board contains a looot of objects (but again having tiles would be a solution). In SVG, it is difficult to implement a nice eraser. For the moment, animated handwritten shapes are made up of small svglines. The eraser on animated lines is not as good as the eraser for fixed shapes (implemented with canvas).
Beta Was this translation helpful? Give feedback.
All reactions