jspaint/TODO.md

280 lines
10 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
* Toggle between blend and copy modes
* 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
* Pencil
2016-09-24 06:03:50 +00:00
* Adjust size (with numpad)
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
* Rectangle
* The stroke should go within the rectangle
* Polygon
2018-06-17 05:27:14 +00:00
* Remove `show_shape_styles_warning` (for Polygon specifically, or implement shape styles for the rest of the tools)
2014-10-02 19:29:25 +00:00
* 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
* Ellipse
2016-09-24 06:03:50 +00:00
* See Shape Styles and Strokes below
2014-10-02 19:29:25 +00:00
* Rounded Rectangle
2016-09-24 06:03:50 +00:00
* See Shape Styles and Strokes below
2014-09-20 17:36:56 +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)
2014-10-02 19:29:25 +00:00
* Rounded Rectangle & Ellipse:
* Support stroke size and shape styles!
* Rectangle, Rounded Rectangle & Ellipse:
* Stroke should be entirely inside the dragged region
* Handle patterns (black and white mode)
* Still needed for line, curve, brush, and fill
* Alignment should be fixed for selection tools (and checked for all of them)
### 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
### Chrome App
2014-05-22 08:20:59 +00:00
2017-06-02 04:59:44 +00:00
I started making a packaged, windowed app, but a hosted app would be simpler.
2015-10-19 19:11:10 +00:00
2017-06-02 04:59:44 +00:00
I implemented theoretical support for changing the wallpaper on Chrome OS, but I don't know if it works.
2014-08-16 01:57:01 +00:00
2014-09-22 10:13:18 +00:00
2015-10-19 19:11:10 +00:00
* [Analytics](https://developer.chrome.com/apps/analytics)
2016-03-24 16:00:40 +00:00
* Publish to the Chrome Web Store!
### Native App
2017-06-02 04:59:44 +00:00
* Proper clipboard support; Electron has an API for copying images
2016-03-24 16:00:40 +00:00
* A dialogue when closing
* Subwindows outside the main window
* A different way of handling always-saved documents
2017-10-26 04:02:46 +00:00
(recovery?)
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)