jspaint/TODO.md

354 lines
9.7 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
2014-09-29 01:19:39 +00:00
* Visual
* Some window layouts are bad
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
2014-09-22 10:13:18 +00:00
* Use win98 default scrollbar size
* 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
* Pixelate graphics when zoomed in
2014-09-22 10:13:18 +00:00
* Keep track of what's saved
* Don't warn about saving saved files (Ctrl+S and then Ctrl+N)
* Do warn about losing unsaved files (close button, etc.)
2014-05-22 08:20:59 +00:00
2014-09-20 17:36:56 +00:00
2014-09-29 01:19:39 +00:00
* Gracefully hide things as the window gets smaller (With media queries!)
2014-11-25 05:39:16 +00:00
* This could be animated ;)
2014-09-20 17:36:56 +00:00
2014-09-29 01:19:39 +00:00
* Issues
2014-10-27 01:16:43 +00:00
* Components
* Colors > Edit Colors... doesn't work when the $colorbox is hidden
* Component windows are gone forever once closed (can't be shown from the View menu)
* Components in windows hidden from the View menu don't hide their windows
2014-09-29 01:19:39 +00:00
* Status text gets cut off
* Also, it should gracefully push the dimension displays off the edge
instead of covering up the text with usually blank space
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
* Tool options flicker... *and lag*, when they're redrawn in quick succession
2014-09-29 01:19:39 +00:00
* Global event handlers interfering with stuff
2014-10-01 19:17:40 +00:00
* In Image > Attributes and other places
* You can't drag&drop in the inputs
2014-10-01 19:17:40 +00:00
* In Help > About Paint and other places
2014-10-01 18:45:19 +00:00
* You can't select text
2014-10-02 19:29:25 +00:00
* You can't drag links
2014-11-27 16:27:58 +00:00
* Free-form select can leave behind inverty brush in multiplayer
2014-11-28 02:53:34 +00:00
* The TextBox scrollbars have extra buttons
* The TextBox contents move down and right when rasterizing
* 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
2014-09-29 01:19:39 +00:00
2014-09-29 01:19:39 +00:00
* Handling actions that interfere with each other
* I currently have a function `this_ones_a_frame_changer();`
2014-11-25 05:39:16 +00:00
that finalizes the selection among other things, called at various times
(undo, redo, reset, file_open, ...and in the future, switching between frames of an animation)
* MS Paint disables actions while you're drawing. Maybe I should do that?
2014-09-29 01:19:39 +00:00
### Menus
* Keyboard Navigation
2014-10-27 01:16:43 +00:00
2014-11-20 13:51:24 +00:00
* Enable/disable items based on their applicability
* Enable Repeat, Clear Selection, Copy To... when they are applicable
* Disable Image > Clear Image when there is a selection like MS Paint does?
2014-09-29 01:19:39 +00:00
* Menu Items
* View
2014-11-20 13:51:24 +00:00
* Show/Hide Text Toolbar
* Zoom submenu
2014-09-29 01:19:39 +00:00
* Image
2014-11-20 13:51:24 +00:00
* Stretch / Skew functionality
2014-11-20 13:51:24 +00:00
* Sliding animation
2014-10-27 01:16:43 +00:00
* Use keyboard shortcuts defined in the menu data structure to declaratively setup hotkeys
2014-09-29 01:19:39 +00:00
### Components / Windows
* Use the ghost when dragging on a component window's titlebar
* Make the component ghost account for the window titlebar
2014-09-29 01:19:39 +00:00
* Keyboard interaction with dialogues
* Close dialogues with Escape
* Navigating form windows
2014-09-29 21:12:32 +00:00
* Left/Right, Enter/Space
* Handle windows going off the screen
2014-05-22 08:20:59 +00:00
### Extended editing
2014-05-18 08:47:46 +00:00
2014-10-24 00:54:05 +00:00
* Transparency ✓
2014-09-29 21:12:32 +00:00
* Detect transparency when opening an image ✓
* Option in Image > Attributes... ✓
2014-09-29 21:12:32 +00:00
* Color opacity slider
2014-10-02 19:29:25 +00:00
* Toggle between blend and copy modes
2014-11-20 13:51:24 +00:00
* Represent transparency with a checkered background pattern
2014-10-24 00:54:05 +00:00
* 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
2014-05-18 08:47:46 +00:00
2014-10-24 00:54:05 +00:00
* Multiplayer
* See [multiplayer.js](multiplayer.js)
2014-10-27 01:16:43 +00:00
* Deal with undo/redo for sessions
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
2014-09-02 23:02:38 +00:00
* Use pointer events polyfill
2014-09-29 01:19:39 +00:00
* Multi-touch devices
* Second touch cancels current action just like a second button does on the desktop
* Two-finger drag to pan
* Single-touch devices
* Pan tool
2014-09-22 10:13:18 +00:00
2014-05-18 08:47:46 +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-10-24 00:54:05 +00:00
* Add Pan and Color Eraser tools to the toolbox
2014-11-27 16:27:58 +00:00
* What about multitouch devices that don't need a pan tool?
Maybe add some other random tool?
2014-09-29 01:19:39 +00:00
### Colors
2014-09-20 17:36:56 +00:00
2014-09-29 01:19:39 +00:00
For mobile, tap (or click) the selected colors area to swap background/foreground colors.
2014-09-22 10:13:18 +00:00
2014-09-29 01:19:39 +00:00
The ability to change the current color without changing the palette
Load palettes with [palette.js](https://github.com/1j01/palette.js/)
### 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
* 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
* See [On-Canvas Objects](#on-canvas-objects) for Selection
2014-10-02 19:29:25 +00:00
* Eraser/Color Eraser ✓
2014-09-20 17:36:56 +00:00
* Fill With Color
2014-11-20 13:51:24 +00:00
* Find a better fill algorithm that gets into all the corners
2014-10-02 19:29:25 +00:00
* Pick Color ✓
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
* Adjust size
* Brush ✓
* Airbrush ✓
2014-05-22 08:20:59 +00:00
2014-09-20 17:36:56 +00:00
* Text
* Handles
* Wrapping!
2014-09-20 17:36:56 +00:00
* Underline
* Expanding to new lines
2014-10-02 19:29:25 +00:00
* Minimum size of 3em x 1em
2014-11-25 05:39:16 +00:00
* Detect fonts with [Font Detective](https://github.com/1j01/font-detective/)
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
* Line
* Stroke size when aliased
2014-10-02 19:29:25 +00:00
* Curve
* Aliasing
* Rectangle
* The stroke should go within the rectangle
* Polygon
* Aliasing
2014-11-27 16:27:58 +00:00
* Handle self-intersecting shapes like MS Paint, not like the canvas API
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
* See below
* Rounded Rectangle
* See 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)
* Lots of things: Use stroke size
2014-10-02 19:29:25 +00:00
* Rounded Rectangle & Ellipse:
2014-09-29 01:19:39 +00:00
* Support shape styles!
2014-11-27 16:27:58 +00:00
* If the width/height is less than the stroke size,
it should draw a shape with no stroke, filled with
the color that would normally be used for the stroke.
### On-Canvas Objects
* Selection
* Handles
* Hide the canvas handles when there is a selection. (This used to work!)
2014-11-27 16:27:58 +00:00
* I have a git stash where I'm trying to improve selections.
Canvas handles hiding is fixed there, but other stuff is broken
* Proportionally resize selection while holding Shift
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
### BSOD
2014-05-22 08:20:59 +00:00
2014-09-20 17:36:56 +00:00
Press ~ to bluescreen (or maybe something on the numpad?)
2014-05-22 08:20:59 +00:00
2014-06-07 15:37:08 +00:00
Prankily wait for next user input before fullscreening and bluescreening
2014-05-22 08:20:59 +00:00
### Chrome App
2014-05-22 08:20:59 +00:00
2014-09-02 23:02:38 +00:00
* Set up build process
2014-10-02 19:29:25 +00:00
* ~~Concatenate & Minify~~ (Why?)
2014-11-20 13:51:24 +00:00
* Increment version
2014-09-20 17:36:56 +00:00
* Compress into zip file
* Upload new version to the Chrome Web Store?
2014-09-20 17:36:56 +00:00
2014-09-02 23:02:38 +00:00
2014-11-20 13:51:24 +00:00
* Use the chrome.wallpaper API to change the ChromeOS wallpaper
* Theoretical support ✓
* Test this on Chrome OS
2014-05-22 08:20:59 +00:00
2014-09-20 17:36:56 +00:00
2014-09-22 10:13:18 +00:00
* Custom window frame
* (Note: Minimum window size might need updating)
2014-05-29 19:04:47 +00:00
2014-09-20 17:36:56 +00:00
2014-11-20 13:51:24 +00:00
* Publish to the Chrome Web Store!
2014-11-27 16:27:58 +00:00
* Analytics
* Basic things that people would complain about
2014-08-16 01:57:01 +00:00
2014-09-22 10:13:18 +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
* Improve README
* Introduce and explain the project ...better?
2014-11-20 13:51:24 +00:00
* Make it pretty with images (screenshots plz)
2014-09-29 01:19:39 +00:00
* Stop improving TODO
* It's just a TODO
* You're wasting your time
2014-10-18 06:34:44 +00:00
* Why did I even make this a markdown document?
2014-09-29 01:19:39 +00:00
* Work on the project
* CSS
* Buttons shouldn't need a class `.jspaint-button`
* Color cells probably shouldn't be buttons
* There also shouldn't be classes `.jspaint-window-button` (`.jspaint-window-titlebar button`) or `.jspaint-dialogue-button` (`.jspaint-window-content button`) at all
* DRY, especially for the buttons
* Seriously, the buttons
2014-09-29 01:19:39 +00:00
* Move into folder (called what? styles? stylesheets? css?)
* Deal with `z-index`es
2014-11-20 13:51:24 +00:00
* Comment stuff
2014-09-29 01:19:39 +00:00
* JS
2014-10-01 18:45:19 +00:00
* Refactor old code
2014-11-20 13:51:24 +00:00
* Selection and TextBox should inherit from a base class
* Remove either `selection.x/y/w/h` or `._x/_y/_w/_h`; and use `x/y/width/height`
* Outdated names like sel.$ghost = div.jspaint-selection (not exactly a ghost)
* Everything is in random files! "functions.js", REALLY?
2014-09-29 01:19:39 +00:00
* $Window has a $Button facility; $FormWindow overrides it with essentially a better one
2014-11-20 13:51:24 +00:00
* Image inversion code is duplicated in ChooserCanvas from tool-options.js but should go in image-manipulation.js
* render_brush shouldn't be in tool-options.js
* `$w.$form.addClass("jspaint-horizontal").css({display: "flex"});`
2014-11-20 13:51:24 +00:00
* Comment everything and then try to make the code as obvious as the comments
2014-10-01 18:45:19 +00:00
2014-10-18 06:34:44 +00:00
* Images
* Optimize
* Use a sprite sheet
2014-10-01 18:45:19 +00:00
* Help
* Actual Help Topics
* Interactive tutorial(s)?
* 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