jspaint/TODO.md

273 lines
8.9 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
2015-10-17 17:10:33 +00:00
* Help Topics
2015-10-18 00:43:21 +00:00
* Resizable panes
* Resizable window
2015-10-17 17:10:33 +00:00
* Link-esque things
2017-06-02 04:59:44 +00:00
* 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)
2017-06-24 06:22:29 +00:00
* Note unsupported features (or just implement these)
* "To use black and white instead of color" (partially implemented)
2015-10-17 17:10:33 +00:00
* "To display gridlines"
2015-10-19 19:11:10 +00:00
* Update topics
2015-10-19 20:15:01 +00:00
* "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)
2015-10-19 19:11:10 +00:00
* "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
* Multiplayer / collaboration / "To share the document On-Line" or whatever
2015-10-18 00:43:21 +00:00
* Index
* Search
2015-10-19 19:11:10 +00:00
* Keyboard support
2015-10-17 17:10:33 +00:00
2014-09-29 01:19:39 +00:00
* Visual
2015-06-19 19:29:49 +00:00
* Warning sign for "Save changes to X?" dialogue
* Error symbol for error message dialogues
2014-10-24 00:54:05 +00:00
* The window close button uses text; font rendering is not consistent
* The progress bar (Rendering GIF) is left native
* Menu separator spacing
2014-09-22 10:13:18 +00:00
* Minor color differences (0x808080 != 0x7b7b7b)
2014-09-29 21:12:32 +00:00
* 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
2014-09-22 10:13:18 +00:00
2014-09-29 01:19:39 +00:00
* Issues
2017-06-02 04:59:44 +00:00
* [Stretch/skew and rotate don't update the canvas size](https://github.com/1j01/jspaint/issues/8)
* ["Quick Undo" stopped working in Chrome](https://github.com/1j01/jspaint/issues/9)
* If you open an image it resets the zoom but if you're on the magnification tool it doesn't update the options
2015-06-15 23:50:31 +00:00
* 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
* Middle-click scrolling is prevented
2014-09-29 01:19:39 +00:00
* Firefox
* It lags unusably when using tools
* For some tools it only happens while dragging the mouse on the canvas
2017-06-02 04:59:44 +00:00
* Tool options lag unusably when they're redrawn in quick succession
2014-11-28 02:53:34 +00:00
* The TextBox contents move down and right when rasterizing
2015-06-15 23:50:31 +00:00
* Free-form select can leave behind inverty brush in multiplayer
2014-11-28 02:53:34 +00:00
* Multiplayer cursors that go outside the parent can cause the page to be scrollable
* Multiplayer interupts you:
* If you try to make a selection when there's a selection
* If you try to play with multiple players
2016-09-24 06:03:50 +00:00
* 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)
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
* [x] Detect transparency when opening an image
* [x] Option in Image > Attributes...
* [ ] Color opacity slider
* [ ] Toggle between blend and copy modes
* [x] Represent transparency with a checkered background pattern
* [ ] Maybe equivalise any rgba(X, X, X, 0) in fill algorithm
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
* APNG Library ([this kickstarter wants $15,000 to make this](https://www.kickstarter.com/projects/374397522/apngasm-foss-animated-png-tools-and-apng-standardi))
* Multi-size Icons
* Windows ICO ([jBinary can read](http://jdataview.github.io/jBinary.Repo/demo/#ico) and presumably write ICO files)
* 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
2016-03-24 16:38:37 +00:00
* Multiplayer and local sessions
* See [sessions.js](src/sessions.js)
2014-10-27 01:16:43 +00:00
* Deal with undo/redo for sessions
2016-09-24 06:03:50 +00:00
* Particularly it might be helpful to undo to the state after your last change, not just before that;
this could happen automatically if there have been changes since your last change
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
2015-06-29 04:19:22 +00:00
* Resize handles
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
2014-10-24 00:54:05 +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"?
2014-11-27 16:27:58 +00:00
* Ctrl+Select: Crop tool
2014-09-29 01:19:39 +00:00
* Ctrl+Shift+G: "Render GIF"
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
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
* Curve
* Aliasing
* Rectangle
* The stroke should go within the rectangle
* Polygon
* Aliasing
2016-09-24 06:03:50 +00:00
* Handle self-intersecting shapes like MS Paint, with an `"evenodd"` [winding rule](http://blogs.adobe.com/webplatform/2013/01/30/winding-rules-in-canvas/)
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
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**
* Secret 10x zoom by clicking the area just underneath the 8x zoom
* 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
### On-Canvas Objects
* Selection
* Proportionally resize selection while holding Shift
2017-06-02 04:59:44 +00:00
(or maybe by default? I feel like that should be the default.)
2014-11-27 16:27:58 +00:00
* Don't cut until you drag or do something else
(In MS Paint, you can make a selection, change the background color
and drag it, leaving the new background color behind.)
2014-10-27 01:16:43 +00:00
* Classic transparency where the selected background color is considered transparent
* 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
(recovery?)
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
* Improve README
2015-10-19 19:11:10 +00:00
* More images! Animated GIFs perhaps? :)
2014-09-29 01:19:39 +00:00
* CSS
2017-05-23 05:50:17 +00:00
* DRY, especially button styles
* Deal with `z-index` rules?
2017-05-23 03:58:35 +00:00
* Comment stuff?
2016-09-24 06:03:50 +00:00
* Use a CSS preprocessor so we can do color-swap themes (maybe even load Windows theme files)
* 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-06-02 04:59:44 +00:00
* Use a shared sprite sheet per theme, and optimize it
2014-10-18 06:34:44 +00:00
2014-10-01 18:45:19 +00:00
* Search Engine Optimization
* Load the About Paint content from an element on the page that gets hidden by code
2014-09-29 01:19:39 +00:00