jspaint/TODO.md

3.5 KiB

Todo

  • Improve README

    • Make it more than 4 words
      • (If you exclude "words" that have acronyms in them, there is only one two-letter word: "in")
    • Explain the project
    • Link to the hosted version
    • Show how to install it as a chrome app
    • Make it pretty with images
  • Menus!

  • Don't warn about saving saved files (Ctrl+S and then Ctrl+N)

  • Do warn about losing unsaved files (close button, etc.)

  • Use win98 default scrollbar size

  • Minor color differences (0x808080 != 0x7b7b7b)

  • Tips and Tricks from this tutorial

    • Brush Scaling ✓
    • Custom Brushes ✓
    • The 'Stamp' Tool (Draw the selection on click, not just drag)
    • Image Scaling (Ctrl+Plus and Ctrl+Minus on the Numpad to scale the selection by factors of 2)
    • Color Replacement (see Tools)
    • The Grid (Ctrl+G + zoom6x+)
    • Quick Undo ✓ (I also made it redoable, in case you do it by accident)
    • Scroll Wheel draws line down and to the right (let's maybe not implement this hm?)

Extended editing

  • Transparent PNGs
  • Animated GIFs
  • Multisize Icons

Mobile support

  • Multitouch (use pointer events polyfill)

Actions

  • Canvas Manipulations
    • Rotate
    • Flip
    • Skew
    • Invert
    • Clear
    • Make these all as (canvas)-> new Canvas?
      • rotated(canvas, degrees)?
      • flipped(canvas, vertical)?
      • skewed(canvas, skewX, skewY)?
      • inverted(canvas)?
      • cleared(canvas)???
  • Undo/Redo History to Frames

Tools

  • OPTIONS

    • shapes all have their own settings for [fill | stroke | stroke_fill]
    • shapes, lines and curves all use one setting for stroke width
    • selection + free-form selection + text use one setting for [opaque/transparent]
    • secret 10x zoom by clicking the area just underneath the 8x zoom
    • visual area is different from selection highlight area is different from clickable area
  • fill bucket and airbrush cursors are supposed to be inverty :\

  • Shapes respond to Ctrl, by...

    • It's complicated.
  • Use stroke width

  • Color Eraser

    • right click with the eraser to selectively replace color1 with color2 (background)
  • Fill Bucket

    • get into those corners!
    • handle transparency also
    • man, this fill algorithm is pretty bad
    • find a better fill algorithm
  • Text tool

    • Save text and record transformations so it can be saved as an SVG with invisible selectable elements
  • Strokes

    • Rectangle: The stroke is within the rectangle.
    • Rounded Rectangle / Ellipse: If the width/height is less than the stroke width, it draws the fillstroke.

Colors

  • Double-left-click a color to choose primary color. ✓
  • Double-right-click to choose the secondary color. ✓
  • Double-ctrl-click to choose the ternary color. ✓
  • (not in mspaint) Double?-Click one of the selected colors to change it directly?

Components / Windows

  • Drag components into a window
  • Drag windows
  • Double-click a component window's titlebar to dock the component to its most recent location.

BSOD

Press `/~ to bluescreen

As a prank, wait for next user input before fullscreening and bluescreening

Chrome App

  • Use the chrome.wallpaper API to change the ChromeOS wallpaper.

    • Code:

        chrome.wallpaper.setWallpaper({
        	url: canvas.toDataURL(),
        	layout: 'CENTER_CROPPED',
        	name: file_name
        }, function(){});
      
    • I'd need to test this on Chrome OS

  • Handle files: ✓

  • Minimum Window Size ✓