This timeline is based on what is included in my original GSoC proposal
and is, of course, still open to discussion.


My school's Spring quarter ends June 10th. Please assume June 11th to be the start of week 1.

• Week 1

  • :ballot_box_with_check: Update CodeMirror and codemirror/lang-markdown to latest versions (est 1 hr of work)
  • :ballot_box_with_check: Use GFM (GitHub Flavored Markdown) syntax to support checkbox continuation (30 mins)
    • This came with updating CodeMirror to the latest version.
  • :ballot_box_with_check: Create toolbar with "bold", "italicize", and "strikethrough" options (4 hrs)
  • Prevent the WebView from getting destroyed when transitioning to/from markdown view (15 hrs)
    • This was in the original proposal, but may no longer be necessary — a MR has been merged that fixed the below issues with undo/redo by hiding the undo/redo buttons when the editor is invisible.
    • Completing this item may still be worth while, as it may be useful to preserve the undo/redo stacks when closing/re-opening the mobile editor.
    • Previously, this was causing issues with undo/redo when the CodeMirror editor was not visible.
  • :ballot_box_with_check: Write extension to codemirror/lang-markdown to recognize math environments (10 hrs)

Week 2

  • :ballot_box_with_check: Highlight math environments and embedded code blocks appropriately (15 hrs)
    • Currently, TeX has no special syntax highlighting
      • The specific colors should depend on the user's theme
    • :ballot_box_with_check: Support auto-indent and \verb;tab;-key indentation (1 hr)
    • :ballot_box_with_check: Add search (ctrl+F) support (1 hr)
    • :ballot_box_with_check: Show/hide search when clicking a button on the toolbar (4 hrs)
    • Add a button to minimize and maximize the toolbar (1 hr)
    • :ballot_box_with_check: Add "create bulleted list", "create to-do list", "create link", and "add header" buttons to the toolbar (4 hrs)

Week 3

  • :ballot_box_with_check: Create "insert drawing'' button and add to toolbar (30 mins)
  • :ballot_box_with_check: Create drawing dialog (15 hrs)
    • No saving yet
    • Should support drawing strokes and have its own toolbar
    • The toolbar, at this point, may be empty
    • Launched by clicking "attach drawing" in the attach menu
  • Loading and saving images with vector annotations (15 hrs)
    • Not connected to the drawing dialog yet

Week 4

Weeks 4-10 focus on the image annotation tool.

  • Set up toolbar logic in the drawing editor (5 hrs)
    • The action should send a message to the part of the code that handles creating strokes
  • Allow user to toggle touchscreen drawing/scrolling through the toolbar when drawing (5 hrs)
  • Add the ability to change the pen color and size when drawing (10 hrs)
    • This includes modifying the resource file format, if necessary — strokes now have more data associated with them
  • Implement saving for the drawing dialog (5 hrs)
  • Implement annotating existing images (10 hrs)

Week 5

  • :ballot_box_with_check: Implement and write tests for stroke intersection checking (10 hrs)
  • :ballot_box_with_check: Implement undo/redo for strokes in the drawing dialog (15 hrs)
  • :ballot_box_with_check: Add the ability to switch between an "eraser" and "pen" mode (10 hrs)
    • This includes refactoring, if necessary, to handle interpreting input as actions from different tools
    • In "eraser'' mode, pen-specific controls should be "grayed out"/disabled

Week 7

  • :ballot_box_with_check: Make the eraser delete strokes when the user's pen crosses them (10 hrs)
  • :ballot_box_with_check: Implement undo/redo for the eraser (5 hrs)
  • :ballot_box_with_check: Add a new "selection" tool (15 hrs)
  • :ballot_box_with_check: Allow users to move strokes with the selection tool (5 hrs)

Week 8

  • :ballot_box_with_check: Allow users to scale strokes with the selection tool (15 hrs)
  • :ballot_box_with_check: Allow users to rotate strokes with the selection tool (15 hrs)
  • :ballot_box_with_check: Finish implementing undo/redo for transforming strokes (5 hrs)

Week 9

  • Write tests for and verify undo/redo (10 hrs)
  • Add a "text" tool to the image annotator (10 hrs)
  • Desktop — Ensure printing/saving to PDF works in documents with annotated images (5 hrs)

Week 10

  • Add support for annotating/editing images on Desktop (30 hrs)
    • Porting the new image annotator to desktop
    • Allows annotated images/resources to be edited

Week 11

  • Make strokes in image editor look nice — Bézier curve approximation of strokes (35 hrs)
    • Math can be based on this Xournal++ pull request that adds "spline approximation of strokes".
    • It is possible that this will take longer than 35 hours. If this is the case, I can finish this during weeks 14 and 15.

Week 12 and beyond

  • Bugfixing, refactoring, and testing! If time, I will start implementing a very simple WYSIWYG editor.