Organize pages into documents:
Duplicate pages and scraps with gestures:
Ink sticks to imported images:
Use ruler for straight or curved lines:
Scissors can cut imported images:
More gesture videos available on the Loose Leaf site.
Building Loose Leaf
First, clone the Loose Leaf repository and initialize all submodules:
git clone firstname.lastname@example.org:adamwulf/loose-leaf.git cd loose-leaf git submodule update --recursive --init
Next, you'll need to add your own client ids and secrets for Fabric, Twitter, Facebook, Pinterest, Imgur, and Mixpanel. All of these are stored in a file called AppIds.plist. To get this file setup, copy from the template file:
cp Project/LooseLeaf/AppIds-Template.plist Project/LooseLeaf/AppIds.plist open Project/LooseLeaf/AppIds.plist
If you don't have ids for some of these services, leaving them blank will still let you build and run the app, though some features may not work.
That's it for configuration - now you can build the app and run it on your iPad!
Help translate Loose Leaf into your language! Join the project and start translating here: https://poeditor.com/join/project/UBaYwL0YTh
Some great places to get involved and help make Loose Leaf better for everyone:
- Feature #279, #696, and #697 - Add additional share options - destinations like Dropbox, Droplr, and Evernote would be nice additions
- Feature #1576 Update the ruler tool to act similar to Apple's Notes app and toggle to stay on the page
- Feature #1618 Support arbitrary page sizes instead of only screen-ratio sized pages
- Feature #1632 Add optional margin to imported PDFs
- Bug #1723 - Exporting multiple pages will often crash if the user has more than 10 documents imported. Super sneaky memory corruption bug going on here.
Loose Leaf includes a spacecommander as a submodule to help with keeping code style consistent. Please format all your code before submitting a PR by using the included format-all.sh and format-staged.sh scripts.
Much of the Loose Leaf codebase is separated into separate submodules:
- PerformanceBezier - A small library to dramatically speed up common operations on UIBezierPath, and also bring its functionality closer to NSBezierPath
- ClippingBezier - Calculates intersection points, paths, and shapes between two UIBezierPaths
- JotUI - OpenGL based drawing view that supports custom brush textures, undo/redo, and asynchronous import and export.
- MMStretchGestureRecognizers - A collection of three gestures that can stretch an arbitrary view with four fingers, used in the clone gesture.
- cloudkit-manager - A simple wrapper to CloudKit to make passing messages with attachments easy between multiple users
- touch-chart - Simplify and smooth UIBezierPaths by reducing the number of elements within the path
master branch contains all in-development code. The
alpha branch contains the settings used for App Store releases. Each App Store release is tagged. The
marketing branch shows hand shadows during gestures and is used to record demo videos.
This repo also includes two apps used during development of Loose Leaf:
- LittleClipper - This app was used to help test the touch-chart and ClippingBezier libraries during the development of the scissors feature.
- ShapeShifter - This app demonstrates the use of MMStretchGestureRecognizers and helped to tune the clone scrap/page gesture.
The Loose Leaf app and sample code are provided under the MIT License. Attribution is required.