jspaint/TODO.md

259 lines
11 KiB
Markdown
Raw Normal View History

2014-05-18 08:47:46 +00:00
2014-09-22 10:13:18 +00:00
# ![](images/icons/32.png) JS Paint Todo
2014-05-18 08:47:46 +00:00
2017-10-26 04:02:46 +00:00
### Help
* Resizable panes
* Resizable window
* Link-esque things
* Popups (I'd probably make the text within the popups selectable)
* Related topics (I'd probably make this a heading with links instead of the weird context menu thing)
* Note unsupported features (or just implement these)
* "To use black and white instead of color" (partially implemented)
* "To display gridlines"
* Update topics
* "To use a picture as the desktop background":
add a third step? It's not quite that easy (at least in the browser)
* "To create custom colors": way too OS-specific
(unless I'm gonna emulate the color selection dialogue)
* "To enlarge the size of the viewing area" (`paint_enlarge_area.htm`):
jspaint currently allows you to draw while "Viewing the Bitmap"
* "To zoom in or out of a picture", "To type and format text":
"You can enter text into a picture only in Normal view."
— jspaint handles this case (well, as well as it handles the Normal case)
* Add topics
* In "Tips and Tricks" (which is just a lame section)
* Transparency
* Multi-user / collaboration / "To share the document On-Line" or whatever
2017-10-26 04:02:46 +00:00
* Index
* Search
* Keyboard support
### Visual
* Warning sign for "Save changes to X?" dialogue
* Error symbol for error message dialogues
* 3D inset border for inputs - SVG `image-border`?
2017-10-26 04:02:46 +00:00
* The window close button uses text; font rendering is not consistent
* The progress bar (Rendering GIF) is left native
* Menu separator spacing
* Minor color differences (0x808080 != 0x7b7b7b)
* I want to give most things a revisit later on for Pixel Perfection
* Dynamic cursors
* Inverty fill bucket and airbrush cursors
* Previewy brush and eraser cursors
2017-10-30 05:23:01 +00:00
* Custom cursors in Edge; apparently they require `.cur` files? ugh
2018-01-10 03:42:38 +00:00
* The canvas-area's border is different in Firefox and Edge from Chrome
2017-10-26 04:02:46 +00:00
### Issues
* ["Quick Undo" stopped working in Chrome](https://github.com/1j01/jspaint/issues/9)
2018-01-18 06:56:44 +00:00
* [Resizing the canvas or selection is broken when magnified](https://github.com/1j01/jspaint/issues/13)
2017-10-26 04:02:46 +00:00
* If you open an image it resets the zoom but if you're on the magnification tool it doesn't update the options
* If you zoom in with the magnifier without previously changing the magnification on the toolbar,
then switch back to the magnifier, the toolbar doesn't show any magnification highlighted
2017-10-30 05:23:01 +00:00
* The TextBox contents move down and right when rasterizing
* If you click on a menu item (up/down) and then move over to a menu item and click (up/down) it does nothing (and you can repeat this)
2017-10-26 04:02:46 +00:00
* Can't glide thru tool options in Firefox, mobile Chrome;
might be a pointer events spec interpretation issue, and it could easily be that the more technically correct browsers are where it's not working
(Note: not a thing allowed by MS Paint)
2014-09-29 01:19:39 +00:00
2014-09-29 01:19:39 +00:00
### Menus
2015-06-29 04:33:22 +00:00
* Keyboard navigation of submenus
* <kbd>Alt</kbd> (by itself)?
2014-10-27 01:16:43 +00:00
2014-09-29 01:19:39 +00:00
### Components / Windows
2017-06-02 04:59:44 +00:00
* Use the ghost when dragging on a component window's title bar
* Make the component ghost account for the window's title bar
2014-09-29 01:19:39 +00:00
* Handle windows going off the screen
2014-05-22 08:20:59 +00:00
### Extended editing
2014-05-18 08:47:46 +00:00
* Transparency
2017-10-26 04:02:46 +00:00
* Color opacity slider
2018-08-24 06:22:46 +00:00
* Toggle between blend and copy (overwrite) modes
2017-10-26 04:02:46 +00:00
* Maybe equivalise any rgba(X, X, X, 0) in fill algorithm?
There'd still be the possibility of 1/255th opacity pixels,
2017-10-30 05:23:01 +00:00
but if you're creating colors from the combination of a color picker and an opacity slider,
you might naturally introduce differing zero-opacity color values a lot.
2014-09-29 21:12:32 +00:00
* Images with multiple sub-images
* Component to switch between sub-images
* Deal with undo/redo for sub-images
* Animated GIFs
* Transparency ([jnordberg/gif.js issue #5](https://github.com/jnordberg/gif.js/issues/5))
* Animated Transparent APNGs
2017-10-30 05:23:01 +00:00
* APNG Library ([this kickstarter wanted $15,000 to make this](https://www.kickstarter.com/projects/374397522/apngasm-foss-animated-png-tools-and-apng-standardi);
I was able to compile their [C++ implementation](https://github.com/apngasm/apngasm) to JS with [emscripten](https://github.com/kripken/emscripten) though;
2017-10-26 04:02:46 +00:00
I'll publish that at some point)
2014-09-29 21:12:32 +00:00
* Multi-size Icons
* Windows ICO ([jBinary can read](https://jdataview.github.io/jBinary.Repo/demo/#ico) and presumably write ICO files)
2014-09-29 21:12:32 +00:00
* Mac ICNS
* Layered images?
* Photoshop PSD ([via psd.js](https://github.com/trevorlinton/psd.js))
* OpenRaster ORA ([via ora.js](https://github.com/zsgalusz/ora.js/tree/master))
2014-05-18 08:47:46 +00:00
* Online (multi-user) and local (single-user) sessions
2016-03-24 16:38:37 +00:00
* See [sessions.js](src/sessions.js)
2014-10-27 01:16:43 +00:00
* Deal with undo/redo for sessions
2017-10-30 05:23:01 +00:00
* Particularly it might be helpful to undo *to* your last change, not just to right before it (by undoing it);
this could automatically be the behavior of undo if there have been changes since your last change
2017-10-26 04:02:46 +00:00
* Issues
* You get interrupted if you try to make a selection when there's a selection
* You get interrupted if you try to draw at the same time as another person (you basically have to take turns - lame!)
* Free-form select can leave behind inverty brush
(this should be fixed by improving how the selection tools work;
the inverty-ness shouldn't be drawn to the main canvas in the first place)
* Cursors from other users that go outside the parent can cause the page to be scrollable
2014-10-24 00:54:05 +00:00
2014-09-22 10:13:18 +00:00
2014-11-25 05:39:16 +00:00
### Device support
2014-05-18 08:47:46 +00:00
2015-06-22 00:01:12 +00:00
* Multi-touch devices
* Two-finger drag to pan (the second touch cancels the default action just like normal)
* Single-touch devices
* Pan tool
2014-09-22 10:13:18 +00:00
2014-05-18 08:47:46 +00:00
2015-06-22 00:01:12 +00:00
* Enlarge GUI elements on touch devices
2017-06-02 04:59:44 +00:00
* Menus
2018-01-18 06:56:44 +00:00
* Resize handles (at least functionally; in Win7 Paint, the hitbox size is much larger than the visible size, like maybe 32px)
2015-06-16 01:29:30 +00:00
2014-09-29 01:19:39 +00:00
* You can't use the Eraser/Color Eraser tool as a "Color Eraser" without a secondary mouse button
2017-10-26 04:02:46 +00:00
* Make sure anything that uses hovering is paralleled on mobile (tooltips, `:hover` effects)
2014-09-29 01:19:39 +00:00
2014-11-27 16:27:58 +00:00
* Access to functionality that would normally require a keyboard (with a numpad!)
2014-09-29 01:19:39 +00:00
* Numpad +/-: Increase/Decrease brush size, Double/Half selection size, ...
* Shift (toggle): Proportional, Smear / Trail Selection, "Snap to 8 directions" / "Octosnap"?
2017-10-26 04:02:46 +00:00
* Ctrl+Select: Crop tool or "Crop to selection" option
2014-05-22 08:20:59 +00:00
2014-08-08 21:44:46 +00:00
2014-09-29 01:19:39 +00:00
### Tools
2014-09-22 10:13:18 +00:00
2014-10-24 07:17:24 +00:00
* Free-Form Select
* Passive: create no undoables until you do something
2016-09-24 06:03:50 +00:00
* You should be able to make a selection, then change the secondary color, then drag the selection cutting it out with the color you selected
* See [On-Canvas Objects](#on-canvas-objects) for Selection
2014-09-22 10:13:18 +00:00
2014-10-02 19:29:25 +00:00
* Select
* Passive: create no undoables until you do something
2016-09-24 06:03:50 +00:00
* You should be able to make a selection, then change the secondary color, then drag the selection cutting it out with the color you selected
* See [On-Canvas Objects](#on-canvas-objects) for Selection
2014-10-02 19:29:25 +00:00
2014-11-27 03:54:50 +00:00
* Magnifier
* Choose and preview viewport with rectangular cursor
2014-10-02 19:29:25 +00:00
2014-09-20 17:36:56 +00:00
* Text
* Underline
2016-11-05 19:52:44 +00:00
* Expand box to make room for new lines
2014-10-02 19:29:25 +00:00
* Minimum size of 3em x 1em
2014-09-20 17:36:56 +00:00
* Store position of FontBox
2014-11-27 16:27:58 +00:00
* Keep an old TextBox while drawing a new one
* Save text and record transformations so the image can be saved as
2017-10-26 04:02:46 +00:00
SVG (or HTML?) with invisible selectable transformed text elements?
2014-09-20 17:36:56 +00:00
2014-10-02 19:29:25 +00:00
* Polygon
* Issue with extra undoables
2014-10-24 07:17:24 +00:00
* Close and finalize the polygon when switching to a different tool
2018-06-16 21:49:00 +00:00
* Don't start making the polygon until you click and drag more than the auto-finalization distance
* Cancel the polygon if you end up within the auto-finalization distance on the first gesture
* Preview invertily (like Free-Form Select) when fill-only is selected for the shape style option
* Investigate bug: jumping to 0, 0 (only saw it happen once so far; could it have had to do with the dialog box?)
* Investigate bug: unclosed polygon (last segment of stroke) (only saw it happen once so far)
2014-10-02 19:29:25 +00:00
2014-09-29 01:19:39 +00:00
* **Options**
* In MS Paint, visual area =/= selection highlight area =/= clickable area
2014-09-20 17:36:56 +00:00
2014-09-22 10:13:18 +00:00
2014-09-29 01:19:39 +00:00
* **Shape Styles and Strokes**
* Shapes: respond to Ctrl (It's complicated)
* Handle patterns (black and white mode)
* Still needed for brush and fill and right click with the eraser tool (i.e. replace color)
* Check to make sure patterns are aligned properly for all the tools
* There's supposed to be a mapping between color values and pattern fills, used by the text tool and for the palette when switching between modes (colors should be kept between going to black and white mode and back)
### On-Canvas Objects
* Selection
* Proportionally resize selection while holding Shift
2018-01-18 06:56:44 +00:00
(or maybe by default? I feel like it should be the default, tbh.)
2014-11-27 16:27:58 +00:00
* Don't cut until you drag or do something else
2017-10-26 04:02:46 +00:00
(In MS Paint, you can make a selection, change the background color
and drag it, leaving the new background color behind.)
* TextBox
* See Text tool
2018-08-25 02:20:45 +00:00
### Desktop App (Electron)
2016-03-24 16:00:40 +00:00
2018-08-25 02:20:45 +00:00
* Why doesn't the process exit when the window is closed? It has code to `quit`, from the example boilerplate.
2018-08-24 01:45:25 +00:00
* [Set up Content-Security-Policy](https://electronjs.org/docs/tutorial/security)
* Remember window position/state
2018-08-25 02:20:45 +00:00
* Minimum and default size of window
2018-08-24 02:50:10 +00:00
* Add icon to built executable
2018-08-24 01:45:25 +00:00
* Set up autoupdating
2018-08-25 02:20:45 +00:00
* Maybe keep window hidden until loaded (`show: false`)
2018-08-24 01:45:25 +00:00
* File association support (allow setting jspaint as default image editor)
2018-08-25 02:20:45 +00:00
* A dialog when closing
* Subwindows as separate windows
* Document recovery, other than File > Manage Storage
* Show link URLs when you hover over them, in the status bar (we have a status bar! haha) (there's this API: [event: update-target-url](https://github.com/electron/electron/blob/master/docs/api/web-contents.md#event-update-target-url), which gave me the idea, but it could probably be implemented with mouse events and such if that's not sufficient)
* Recent files (could also be implemented for 98.js.org in the future)
* Create a landing page / home page for the desktop app (like e.g. https://desktop.webamp.org/ or https://desktop.github.com/) - (perhaps https://desktop.jspaint.app/) - and/or for JS Paint in general (perhaps https://jspaint.app/about/)
* Remove usage of `prompt` (and ideally `alert`/`confirm` too! shouldn't be using these anyways!)
2018-08-24 04:15:21 +00:00
* macOS: `setRepresentedFilename`, `setDocumentEdited` etc., maybe even "sheets"?
* Windows: maybe handle `session-end` event?
2016-03-24 16:00:40 +00:00
2014-08-16 01:57:01 +00:00
### Also
2014-10-18 06:34:44 +00:00
* Anything marked `@TODO` or `@FIXME` in the source code
2014-09-29 01:19:39 +00:00
* See [Issues on GitHub](https://github.com/1j01/jspaint/issues)
2014-09-29 01:19:39 +00:00
* Improve README
2015-10-19 19:11:10 +00:00
* More images! Animated GIFs perhaps? :)
2014-09-29 01:19:39 +00:00
* CSS
* DRY, especially button styles - SVG `border-image`?
2017-05-23 03:58:35 +00:00
* Comment stuff?
* Use a CSS preprocessor
* DRY
* Clearer `z-index` handling?
* Color-swap themes (maybe even load Windows theme files)
2016-09-24 06:03:50 +00:00
* Stuff should go in an OS GUI library with themes for Windows 98 and other OSes
2014-09-29 01:19:39 +00:00
* JS
2017-06-02 04:59:44 +00:00
* Everything is in random files! "`functions.js`", REALLY?
2016-03-24 16:00:40 +00:00
* `$Window` has a `$Button` facility; `$FormWindow` overrides it with essentially a better one
* Image inversion code is duplicated in `ChooserCanvas` from tool-options.js but should go in image-manipulation.js
* Make code clearer / improve code quality: https://codeclimate.com/github/1j01/jspaint
2014-10-01 18:45:19 +00:00
2014-10-18 06:34:44 +00:00
* Images
2017-10-26 04:02:46 +00:00
* Use a shared sprite sheet per theme (and optimize it I guess)